当我们看到现实世界里,有很多山地。那么这种山地,在3D世界里又是怎么样显示出来的呢?要模拟现实中的山地,就需要研究它怎么样构成,然后采用各种方法创建出来。在游戏的世界里,对于地形的要求是不严谨的,只要看起来像山地,就行了,而不像其它地理系统,一定要精确到跟现实世界里山比例一样。因此,在这里创建的3D地形,都是近似地模拟出来,这样就节省了很多工作,加快地形的显示,提高游戏速度的流畅性。

这里介绍的山地地形,主要使用高度图来实现。它的原理是:先生成平面的网格,比如是4×4大小,那么它就有16个顶点。接着,就设置每个网格顶点的高度,也就是设置每个顶点的Y轴坐标值,随着Y轴的坐标值不同,就代表了高度不一样。如果Y轴的值是有规律地变化,那么显示出来的网格,就是山地的形状了,然后再加上各种不同的纹理,就可以显示高山、沙滩、雪山和盘地等等。

山地网格1,如下图:

山地图形1,如下:

创建山地图形2,如下图:

3D游戏从入门到精通-32

前面已经编译好OGRE库,现在编译Helloworld工程就很快了。当然,在这个程序里也是设置为Debug的方式编译的,这样才能使用前面的OGRE的调试方式的库文件。点一下编译运行按钮,很快就看到一个漂亮的OGRE LOGO呈现在你的眼前,如下图所示:

从这张美丽的画面里,看到一个古铜色的OGRE头像,在光源的照射下,闪亮着光泽,活灵活现的。左下角是一些重要信息,第一行是FPS的数,什么叫做FPS呢?或许你也会问这个问题,如果你还不懂,现在就给你讲一下。FPS是Frame per second的缩写,就是每秒钟多少帧画面的意思。在视频或者动画里,衡量动画的流畅性,就是通过FPS来体现的。FPS值越大,表示动画流畅性越好。反之,越小的FPS值,说明动画不好,也就是说画面更新不及时,看到很卡住的样子。FPS值的大小,是跟电脑的性能,显示画面复杂程度有关。越好的CPU,FPS值就越大。更多的内存,FPS值就越大。更好的显示卡,FPS值也变大。最好的渲染引擎也会导致FPS值变大的,也就是说,当渲染引擎变得非常有效率时,就可以要求的电脑配置越低。FPS值反而变成衡量OGRE引擎的性能了,如果OGRE非常高效,FPS值就越大。第二行是平均FPS值,第三行是最坏时FPS值,第四行是最好时的FPS值,第五行是三角形个数,这里是4546个三角形。

右下角是一个OGRE的LOGO图片显示。

到这里,就把这个Helloworld编译并运行了。那么它又是怎么样编写的呢?怎么样调用OGRE库的呢?

3D游戏从入门到精通-33

大体运行流程如下:
1) WinMain函数:Windows程序入口。
2) app.go()函数:应用程序框架运行函数。
3) ExampleApplication::setup()函数:在这里初始化和创建场境的工作。
4) Root::startRendering():开始渲染并进入消息循环。
5) ExampleApplication::destroyScene():退出时删除所有分配的资源。
由这里可以看出,程序运行后,进行一系列创建和加载动作,然后调用渲染并进入消息循环,响应键盘和鼠标的消息,直到用户按退按钮。它们的关系如下图所示:
 

3D游戏从入门到精通-31 32 33相关推荐

  1. 3D游戏从入门到精通-32

    前面已经编译好OGRE库,现在编译Helloworld工程就很快了.当然,在这个程序里也是设置为Debug的方式编译的,这样才能使用前面的OGRE的调试方式的库文件.点一下编译运行按钮,很快就看到一个 ...

  2. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  3. 用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...

  4. python教程是用什么博客写的-用Python和Pygame写游戏-从入门到精通(目录)

    目光博客一开始,就有一个将pygame好好介绍一遍的宏伟计划,历时四个月,在各位朋友的关怀鞭策下,如今(2011/8/26)理论学习的部分似乎已经都完成了,在次列一个目录,方便查询.介绍还不是很全,下 ...

  5. 七夕福利 | 3D视觉从入门到精通系统学习教程

    写在前面 首先提前祝大家七夕快乐,感谢大家对工坊的陪伴与支持! 今天是七夕福利活动的最后一天,共100张券,已经送出去了60多张,还剩不到35张,大家可以抓住本次的活动机会,享受全年的最低价(优惠了7 ...

  6. 「3D视觉从入门到精通」知识星球

    写在前面 话不多说,送大家一张优惠券(今明两天有效,共60张),感谢大家一路的陪伴与支持. 什么是知识星球? 知识星球是一个高度活跃的社区平台,在这里你可以和相同研究方向的小伙伴一起探讨科研工作难题. ...

  7. 3D游戏建模入门基础:3dmax常用功能详解

    你收藏了那么多教程,却不知道3dmax怎么入门?掌握3dmax常用功能是3dmax入门的基础之一,所以呢小编今天就为您盘点了一些3dmax最常用到的功能和使用方法,快来和小编一起学习3dmax入门基础 ...

  8. 视频+课件|3D视觉从入门到精通系统学习教程

    前言 很多粉丝在公众号后台留言,不知如何入门3D视觉.3D领域的主线是什么,一些难点该如何解决,有哪些方法,导师新开的3D视觉方向无人指导等等.这些痛点,工坊的许多童鞋都踩过坑,也为大家提出了许多非常 ...

  9. 用Python和Pygame写游戏-从入门到精通(16)

    经历了长年的艰苦卓绝的披星戴月的惨绝人寰的跋山涉水,我们终于接近了AI之旅的尾声(好吧,实际上我们这才是刚刚开始).这一次真正展示一下这几回辛勤工作的结果,最后的画面会是这个样子: 下面给出完整代码( ...

最新文章

  1. 计算机网络sdn,刘少伟:SDN重新定义网络
  2. 由“递归遍历二叉树”引发的思考
  3. leetcode - 4Sum
  4. 【收藏】HDFS的Java API使用
  5. springboot项目修改个人头像
  6. C语言解析http请求表单内容
  7. array_walk与array_map的区别
  8. 关于chrome控制台警告:Synchronous XMLHttpRequest on the main thread终极解决办法
  9. LeetCode2——Add Two Numbers(两个链表中的数字相加,形成新链表)
  10. 全球第一!苹果市值冲破3万亿美元 创历史记录
  11. linux c 获取文件数量
  12. python分支结构基础实训_python-002基础——分支结构
  13. android dns 测试工具,DNS Test测速工具
  14. 计算机图形学(一) 视频显示设备_7_光栅扫描系统
  15. 第一节 Python环境搭建
  16. java字符转转长整型_P104 将数字字符串转换成长整型整数 ★★
  17. Java 运算符中 前++ 和后++ 的区别详解
  18. Unity [hold on busy for 老长长时间的解决方法]
  19. IPv6 基本原理详解介绍
  20. 32avalon - 指令ms-rules(自定义验证规则)

热门文章

  1. 360祭出“权威机构对扣扣保镖的测试报告”,为何TX等意外冷静?
  2. 计算机毕业设计ssm高校心理健康咨询平台vknhv系统+程序+源码+lw+远程部署
  3. 高泽龙:河北省石家庄市打造中国元宇宙示范城区的规划和建议
  4. skynet + cocosCreater-js 开发棋牌记录
  5. java(借助eclipe操作)汉化
  6. 下载安装MySQL数据库ODBC驱动和配置MySQL ODBC数据源
  7. 老白智慧药房显示服务器异常,老白智慧药房app
  8. 化工制造业的ERP解决方案
  9. CMake - 使用 target_sources() 提高源文件处理能力
  10. Inventor 二次开发 - Gear Up Inventor 分享 Inventor 二次开发 的资料和经验