我正在做我自己的世界-> cam 转换(而不是使用gluLookAt
)。我在关注这里的信息,但我得到了一个不同的符号来翻译最终的 4x4 模型视图转换。
文章说“由于我们是向下看 x 轴,所以世界是由相机的负位置平移的。” . 然后他们翻译-eye
,这是-camPos
我的代码。
我认为这是不对的,因为 opengl 是惯用右手的,并且相机通常向下看 -Z (远离屏幕)。所以看起来正确的翻译变换应该是+camPos
。
float lookAtP[3] = {0,0,0}; /* camera look at point */
float camPos[3] = {0,0,-150}; /* camera location */
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(camPos[0],camPos[1],camPos[2], lookAtP[0],lookAtP[1],lookAtP[2], 0,1,0);
GLfloat matrix[16];
glGetFloatv (GL_MODELVIEW_MATRIX, matrix);
mat_print(matrix);
结果(gluLookAt):
-1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -1.0000 0.0000
0.0000 0.0000 -150.0000 1.0000
当我关注这篇文章时,我得到了不同符号的翻译(+150)。我计算旋转矩阵R
,然后平移T
。然后,加载T*R
with的转置glLoadMatrix
(因为 opengl 是右手的,本文处理的是左手坐标系)。
-1.0000 0.0000 0.0000 0.0000
0.0000 1.0000 0.0000 0.0000
0.0000 0.0000 -1.0000 0.0000
0.0000 0.0000 150.0000 1.0000
问题是,文章是否正确???