- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenGL初学者用C#做个3D吞食鱼(一)第一人称视角的实现4WindowsLive
OpenGL 入门暨用C#做个3D 吞食鱼(一)第一人称视角的
实现
废话少说先上图:
图表 1 第一人称视角效果图
源代码在文末。
为了学OpenGL,尝试各种代码示例是不错的选择。但是我就经常因为视角不合适又他妈不
能动而看不到画出来的东西!那么做一个类似CS 里面那样第一人称视角的走动功能(前后
左右走,上下走,左右旋转和上下旋转)就是大势所趋啊。
1. 开发环境
本人就喜欢C# 的智能提示、控件和各种自动生成的代码,最适合学OpenGL 、编译原理之类
的新东西用了。于是学OpenGL 也找了C#版的。在codeproject 上有这个SharpGL 的介绍(在
这里),超好用的OpenGL 封装,看一眼就知道是我的菜,我想要的都有了。用法太简单了,
不再具体介绍。
2. 目标
具体的说,我们要实现下面的功能:按键盘的WSAD 或上下左右键,可以实现前后左右移动;
按Q 键,上升(CS 里爬楼梯上楼);按E 键,下降;按住鼠标左键左右移动,镜头跟着左右
旋转;按住鼠标左键上下移动,镜头跟着上下翻转。这是基本功能,具体到工程实现时还会
陆续添加一些必要的辅助功能,到时候再说。
3. 前提条件
问:我们的线索是什么呢?
答:OpenGL 有一个 gluLookAt 函数,是用来设定眼睛、目标和“上方向”的。简单来说,
它的作用就是告诉OpenGL,我们的眼睛在哪儿,眼睛往哪个点看,我们站立的时候从脚到
头是哪个方向。想象一下,你站立在一个地方,眼睛注意看某处一个点,这时,整个映入眼
帘的画面就是OpenGL 要呈现给你的画面了。(额,貌似不需要想象,不是瞎子就行了)
在SharpGL 这个类库里,当然有与之对应的OpenGL.LookAt 函数。所以我们只需要弄清楚在
移动、旋转的时候如何计算眼睛、目标和上方向的三维坐标就行了。
好消息是,上方向(用向量表示)永远设定为(0,1,0)就行了,不需要改变。在SharpGL 里我
们默认Y 轴为上方,X 轴和Z 轴组成了地面。在这个吞食鱼游戏里,游戏地图是从Y 轴正半
轴向上的一小块地方。这就是世界环境的设定了。
如下图表 2SharpGL.LookAt 模型所示,红色(向右的)箭头为X 轴,绿色(向上的)箭头为
Y 轴,蓝色(斜向下的)为Z 轴。黑色箭头的头部表示看向的目标(center ),箭尾为眼睛所
在的位置。为方便起见,我们在后文把黑色箭头都称为“视线”。
图表 2SharpGL.LookAt 模型
PS:虽然视线不是无穷的指向远处的,但这不妨看到碍箭头后面的部分。设定看到的范围的
函数是gluPerspective (SharpGL 里对应OpenGL.Perspective 方法),这不是本文重点,请自行
上百度Google 之。
毫无疑问,第一人称的功能,无非就是设定eye 和center 的值,然后调用一下OpenGL.LookAt
函数就行了。下面我们将详细说明如何实现的。
三维世界少不了三元组这个数据结构,我们先在这里定义出来,省得下文啰嗦。
public struct TriTuple
{
public double X;
public double Y;
public double Z;
public TriTuple(double x, double y, double z)
{
// TODO: Complete member initialization
this.X = x;
this.Y = y;
this.Z = z;
}
public override string ToString()
{
return string.Format({0:f2},{1:f2},{2:f2}, X, Y, Z);
}
internal void Add(TriTuple diff)
{
this.X = this.X + diff.X;
this.Y = this.Y + diff.Y;
您可能关注的文档
- 毛乌素沙地,澳洲沙漠与巴丹吉林沙漠概况.pptx
- MStar 单层触控方案研讨会-测试篇.pdf
- 毛毛虫不见了讲课.ppt
- MIS10_数字化企业中知识管理.pdf
- 比较指令在十字路口交通灯控制中的应用教案.doc
- 毛特新版选择题.doc
- 毛毛虫不见了2.ppt
- 毛毛虫不见了教学课件.ppt
- MTK-6589_四核智能手机原理图.pdf
- 民事诉讼法基础知识.ppt
- 2025年干部谈心谈话内容范文.docx
- 2025年民主生活会对照检查发言材料范文.docx
- 水利主管部门党组书记2025年深入贯彻中央八项规定精神学习教育工作动员部署会上的讲话文稿.docx
- 2篇:机关单位深入开展贯彻落实中央八项规定精神学习教育实施方案.docx
- 领导干部深入贯彻中央八项规定精神学习教育的交流发言文稿.docx
- 企业领导干部在2025年深入贯彻中央八项规定精神学习教育动员部署会上的讲话范文.docx
- 三篇在2025年深入贯彻中央八项规定精神学习教育动员部署会上的讲话范文稿.docx
- 三篇:党员干部在贯彻落实中央八项规定精神学习教育动员部署会上的讲话范文.docx
- 5篇:党委书记在深入贯彻中央八项规定精神学习教育动员部署会上的讲话.docx
- 市委书记在研究部署深入贯彻中央八项规定精神学习教育工作会上的讲话范文.docx
文档评论(0)