在OpenGL视线矢量(Sight vector in OpenGL)

2019-07-18 03:39发布

我的问题是,我不能让在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;

我做了什么错?

Answer 1:

好了,现在你明确你真正想做的事情之后,我敢肯定,这是正确的答案:

你可能使用一些所谓的ModelView矩阵。 没有它似乎奇怪吧,它的本质结合两个部分组成? 嗯,这是我,以后我想了一会儿,它是有意义的。 最终的顶点位置计算如下:

gl_Position = ProjectionMat * ModelViewMat * VertexPos;

你看,有对OpenGL的没有什么区别,你是否从原点移动“摄像机”,由[x,y,z]或移动物体[-x,-y,-z] -你会得到相同的结果。 然而有用区分“照相机”位置的东西,可以是从原点不同。

gl_Position = ProjectionMat * ViewMat * ModelMat * VertexPos;

我觉得最自然的方式来做到这一点是,正如我所说,分裂成计算两个矩阵: ModelView 。 现场的每个对象现在已经改变Model矩阵,摄像机的位置是通过改变设置View矩阵。 说得通?

我给你举个例子。 如果相机处于[5,0,0]其对应于Translate(-5,0,0)并且您在对象[-5,0,0]它会降落从相机10个单位。 现在,当你移动你的相机远离原点(增加第一平移距离),“照相机”和物体之间的距离增大。

对象翻译模型 ,相机翻译

所以它不是很难得出结论,如果你想忽略相机的位置,只是剥离View从等式的一部分; 每个对象将考虑相机的位置考虑可以得出,因此相对于只在您的口中。

gl_Position = ProjectionMat * ModelMat * VertexPos;

我们假设模型现在将土地沿着从视不管你当前“看” X轴5个单位,这就是,我认为,几乎你想要达到的目标。

无论如何,你很可能使用它一个很好的教程



文章来源: Sight vector in OpenGL
标签: opengl vector 3d