我的问题是,我不能让在OpenGL载体“瞄准线”。 我做了一些研究,发现它应该是转换之后ž载体,但它不想工作。 我有了这个代码,以检索块(我希望它从“照相机”移动盼着)的速度,但所有的时间它移动无关的摄像头,但所有的时间同样的方式相比,呈现的世界:
GLfloat matrix[16];
glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
GLfloat d = sqrt( matrix[8]*matrix[8] + matrix[9]*matrix[9] + matrix[10]*matrix[10]);
xmov = matrix[8]/d;
ymov = matrix[9]/d;
zmov = matrix[10]/d;
我做了什么错?
好了,现在你明确你真正想做的事情之后,我敢肯定,这是正确的答案:
你可能使用一些所谓的ModelView
矩阵。 没有它似乎奇怪吧,它的本质结合两个部分组成? 嗯,这是我,以后我想了一会儿,它是有意义的。 最终的顶点位置计算如下:
gl_Position = ProjectionMat * ModelViewMat * VertexPos;
你看,有对OpenGL的没有什么区别,你是否从原点移动“摄像机”,由[x,y,z]
或移动物体[-x,-y,-z]
-你会得到相同的结果。 然而有用区分“照相机”位置的东西,可以是从原点不同。
gl_Position = ProjectionMat * ViewMat * ModelMat * VertexPos;
我觉得最自然的方式来做到这一点是,正如我所说,分裂成计算两个矩阵: Model
和View
。 现场的每个对象现在已经改变Model
矩阵,摄像机的位置是通过改变设置View
矩阵。 说得通?
我给你举个例子。 如果相机处于[5,0,0]
其对应于Translate(-5,0,0)
并且您在对象[-5,0,0]
它会降落从相机10个单位。 现在,当你移动你的相机远离原点(增加第一平移距离),“照相机”和物体之间的距离增大。
对象翻译模型 ,相机翻译观 。
所以它不是很难得出结论,如果你想忽略相机的位置,只是剥离View
从等式的一部分; 每个对象将不考虑相机的位置考虑可以得出,因此相对于只在您的口中。
gl_Position = ProjectionMat * ModelMat * VertexPos;
我们假设模型现在将土地沿着从视不管你当前“看” X轴5个单位,这就是,我认为,几乎你想要达到的目标。
无论如何,你很可能使用它一个很好的教程