OpenGL入门笔记(十一)

每个3D世界基本上可以看作是sector(区段)的集合。一个sector(区段)可以是一个房间、一个立方体、或者任意一个闭合的区间。在程序内部直接存储数据会让程序显得太过死板和无趣。从磁盘上载入世界资料,会给我们带来更多的弹性,可以让我们体验不同的世界,而不用被迫重新编译程序。另一个好处就是用户可以切换世界资料并修改它们而无需知道程序如何读入输出这些资料的。 

数据文件中每个三角形都以如下形式声明:

X1 Y1 Z1 U1 V1
X2 Y2 Z2 U2 V2
X3 Y3 Z3 U3 V3

坐标数据文件

到目前为止,我们所作过的都是些简单的旋转和平移。但我们的镜头始终位于原点(000)处。任何一个不错的3D引擎都会允许用户在这个世界中游走和遍 历,我们的这个也一样。实现这个功能的一种途径是直接移动镜头并绘制以镜头为中心的3D环境。这样做会很慢并且不易用代码实现。我们的解决方法如下:

1)根据用户的指令旋转并变换镜头位置。

2)围绕原点,以与镜头相反的旋转方向来旋转世界。(让人产生镜头旋转的错觉)

3)以与镜头平移方式相反的方式来平移世界(让人产生镜头移动的错觉)

实现很简单。当左右方向键按下后,旋转变量yrot相应增加或减少。当前后方向键按下后,我们使用sinecosine函数重新生成镜头位置。Piover180是一个很简单的折算因子用来折算度和弧度。

walkbias基本上就是当人行走时头部产生上下摆动的幅度。我们使用简单的sine正弦波来调节镜头的Y轴位置。如果不添加这个而只是前后移动的话,程序看起来就没这么棒了。

demo10

posted on   Phinecos(洞庭散人)  阅读(1268)  评论(1编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示