繁体   English   中英

OpenGL矩阵无法正确旋转

[英]OpenGL matrix not rotating properly

好了,所以我得到了gluLookAt的代码:

lookAt = new Vector3f(-player.pos.x, -player.pos.y, -player.pos.z);
       lookAt.x += (float)Math.cos(Math.toRadians(player.yaw)) * Math.cos(Math.toRadians(player.pitch));
       lookAt.y += (float)Math.sin(Math.toRadians(player.pitch));
       lookAt.z += (float) Math.sin(Math.toRadians(player.yaw)) * Math.cos(Math.toRadians(player.pitch));

       GLU.gluLookAt(-player.pos.x, -player.pos.y, -player.pos.z, 
               lookAt.x, lookAt.y, lookAt.z, 
               0, 1, 0);

当我尝试绘制旋转的立方体时,它无法正确旋转。

GL11.glPushMatrix();
GL11.glLoadIdentity();
GL11.glTranslatef(-cube.pos.x, -cube.pos.y, -cube.pos.z);
GL11.glRotatef(cube.yaw, 0, 1, 0);
GL11.glTranslatef(cube.pos.x, cube.pos.y, cube.pos.z);
/*draw the cube normally*/
GL11.glPopMatrix();

所以我的问题是我是否可以正确处理glulookat对矩阵所做的更改? 还是我做错了什么? 我正在寻找的结果是将多维数据集返回到0,0,0并旋转它,然后将其放回原处。

问题在这里:

GL11.glTranslatef(-cube.pos.x, -cube.pos.y, -cube.pos.z);
GL11.glRotatef(cube.yaw, 0, 1, 0);
GL11.glTranslatef(cube.pos.x, cube.pos.y, cube.pos.z);

多维数据集已经“在” 0,0,0。 这是因为Medel矩阵是恒等式(您称为glLoadIdentity())。

所以你应该这样做:

 GL11.glRotatef(cube.yaw, 0, 1, 0);
 GL11.glTranslatef(cube.pos.x, cube.pos.y, cube.pos.z);

应该会达到预期的效果。 如果不是,请使用固定摄像机尝试,以查看您在glulookat()之前添加的代码是否导致lookat目标距离0,0,0(多维数据集所在的位置)太远

在绘制多维数据集之前调用glLoadIdentity将清除视图矩阵中设置的所有gluLookAt,我认为它不应该存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM