没有glutLookAt *函数的点 - 平面碰撞
据我所知,建议使用glTranslate / glRotate来支持glutLootAt。我不会去寻找明显的HW与SW计算模式之外的原因,而只是选择波形。然而,这让我有些头疼,因为我不知道如何有效地阻止相机突破墙壁。我只对点平面交叉点感兴趣,而不是AABB或其他任何东西。
因此,使用glTranslates和glRotates意味着视点保持静止(简单地在(0,0,0)),而世界围绕着它。这对我来说意味着为了检查任何交叉点,我现在需要为每个相机移动重新计算世界的顶点坐标(glutLookAt方法不需要)。
由于无法从GPU-land获得所需的新坐标,因此需要手动在CPU中计算。对于每一个相机运动...... :(
似乎需要将当前旋转保留在3个轴中的每一个旁边,并且相同用于平移。我的程序中没有使用缩放。我的问题:
1 - 上述推理有缺陷吗?怎么样 ?
2 - 如果没有,必须有办法避免这种重新计算。
我看到它的方式(并通过查看http://www.glprogramming.com/red/appendixf.html)它需要一个矩阵乘法用于平移,另一个用于旋转(仅需要除y轴所需)。然而,必须计算如此多的加法/乘法,特别是正弦/余弦,肯定会杀死FPS。计算上将有数千甚至数万个顶点。每一帧......所有的数学......在计算出世界的新坐标之后,事物似乎很容易 - 只要看看是否有任何平面改变了它的'd'符号(从飞机方程式ax + by + cz + d = 0)。如果是这样,请使用轻量级交叉产品方法来测试该点是否位于该平面的每个“移动”三角形内的空间内。
谢谢
编辑:我发现了glGet,我认为这是要走的路,但我不知道如何正确使用它:
// Retains the current modelview matrix
//glPushMatrix();
glGetFloatv(GL_MODELVIEW_MATRIX, m_vt16CurrentMatrixVerts);
//glPopMatrix();
m_vt16CurrentMatrixVerts是一个浮点数[16],它填充0.f或8.67453e-13或类似的东西。我搞砸了哪里?
没有找到相关结果
已邀请:
1 个回复
茬贺努充尽