|
|
1
3
OpenGL不是一个游戏引擎,而是一个渲染库。另一方面,碰撞检测是游戏逻辑的一个功能。因此,它不应该与OpenGL有任何关系,OpenGL只是一种在屏幕上放置可视化表示的查看机制——它不了解您的游戏对象,也不包含任何有用的持久数据。如果你确实尝试将一个对象的位置存储在一个矩阵中,并通过转换来移动它,那么你最终可能会受到累积浮点错误的影响,从而导致不可预测的行为。 您应该做的是手动保持对象的所有位置(以及方向、速度等)。所有对象的移动都应该由您在应用程序代码中执行。当渲染对象时,您读取对象的当前值并将其传递给OpenGL。通常,您为要渲染的每个类型对象获取多边形数据,按对象实例的方向旋转它,按其位置平移它,然后渲染。每帧重复一次。 如果你对 Model-View-Controller 范例然后你的游戏对象就是模型,OpenGL提供了一个视图。因此,您应该根据需要操纵您的模型,并在需要时从中读取视图。 |
|
|
2
2
最好只跟踪每一个物体的绝对位置。 |
|
|
3
1
令人沮丧,不是吗?所有OpenGL和图形编程初学者都有与您类似的问题。跟踪各种参照系可能很困难。 我建议的第一件事是从亚马逊或其他零售商那里获得OpenGL超级圣经的副本。它从绝对起点开始,并从那里逐步构建。早期推荐NEHE网站的海报也给出了很好的建议。 至于您的问题本身,当您创建OpenGL程序时,您可以将“ModelView”矩阵设置为标识(有关详细信息,请参阅《超级圣经》),并且您在glpoint()调用中设置的所有坐标都将相对于该矩阵定义为参照系。如果除了从这里调用glpoint()之外,您不做任何事情,那么您的所有对象都将处于相同的绝对坐标系中。 当您开始调用gltranslate、glrotate和glloadmatrix时,会变得很棘手,因为这些函数会转换引用框架。当发生这种情况时,所有随后的glpoint()调用都是相对于新的引用框架的。 (如另一张海报所述,如果要返回到早期的参考框架,必须在转换前将ModelView矩阵保存在堆栈上,然后才能“弹出”堆栈并返回到以前的位置。) 很难在支持网站上描述这一点,但可以将其视为牙医座椅上的一系列机械臂。他可以把托盘移到你下巴下面,然后以一定角度旋转托盘来托住你的下巴。每一个独立的运动都可以看作是一个转换,在OpenGL中实现为一个矩阵。 就像我说的,很难在网上恰当地描述这一点。抓起超级圣经书,它会更有意义。祝你好运! |
|
|
4
0
当我学习OpenGL时,我使用了以下2种资源。 似乎是 gametutorials 已经付钱了,卖了一张CD,但写得很好,所以可能值得买。 然而, NeHe 仍然是网上的免费教程,包括 this one for collision detection . |
|
|
5
0
“绝对”是什么意思? 如果你想要你的点相对于之前的点,你可以反转你刚才做的变换:用第二个平移的负平移,围绕同一轴以相同的数量反向旋转,然后用第一个平移的负平移。这将为您提供从新坐标到旧坐标系的转换。 或者,您可以使用变换,您必须将旧的点引入新的坐标系。 |
|
|
6
0
在世界坐标中跟踪物体的位置,并直接比较它们。 要进行显示,请使用相机模型,并对其应用所有转换。 |