gpt4 book ai didi

java - OpenGL 矩阵无法正确旋转

转载 作者:行者123 更新时间:2023-12-02 00:20:41 24 4
gpt4 key购买 nike

好吧,我得到了 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() 之前添加的代码是否导致观察目标距离 0,0,0(您的立方体所在的位置)太远

关于java - OpenGL 矩阵无法正确旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com