为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复在 OpenGL 中沿 x 或 y 轴旋转时奇怪的对象拉伸?

如何修复在 OpenGL 中沿 x 或 y 轴旋转时奇怪的对象拉伸?

拉风的咖菲猫 2023-07-19 10:50:16
当我使用旋转矩阵在 openGL 中旋转我的正方形时,当我想围绕 X 或 Y 轴旋转它时,整个对象消失并拉伸。Z 轴工作正常。问题可能是什么?我尝试在 DrawArrays 之前加载uniformMatrix4f,但它不起作用。仍然是同样的问题。翻译工作正常且可扩展。渲染方法public void render(Player model, Cube cube_model, StaticShader shader) {        GL30.glBindVertexArray(model.vaoID);        GL20.glEnableVertexAttribArray(0);        GL20.glEnableVertexAttribArray(1);        shader.loadModelMatrix(Maths.createModelMatrix(new Vector3f(move_X,-Display.getHeight(),0f), 0f,0f,tilt_Y,1f));        GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 3);        GL20.glDisableVertexAttribArray(1);        GL20.glDisableVertexAttribArray(0);        GL30.glBindVertexArray(0);        GL30.glBindVertexArray(cube_model.vaoID);        GL20.glEnableVertexAttribArray(0);        GL20.glEnableVertexAttribArray(1);        shader.loadModelMatrix(Maths.createModelMatrix(new Vector3f(0f,Display.getHeight() - 200f,0f), 0f,increaseRotation,0f,0.5f));        GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 6);        increaseRotation += 1f;        GL20.glDisableVertexAttribArray(0);        GL20.glDisableVertexAttribArray(1);        GL30.glBindVertexArray(0);    }矩阵数学:public static Matrix4f createModelMatrix(Vector3f t, float rx, float ry, float rz, float s) {        Matrix4f modelMatrix = new Matrix4f();        modelMatrix.setIdentity();        Matrix4f.translate(t, modelMatrix, modelMatrix);        Matrix4f.rotate((float) Math.toRadians(rx), new Vector3f(1,0,0), modelMatrix, modelMatrix);        Matrix4f.rotate((float) Math.toRadians(ry), new Vector3f(0,1,0), modelMatrix, modelMatrix);        Matrix4f.rotate((float) Math.toRadians(rz), new Vector3f(0,0,1), modelMatrix, modelMatrix);        Matrix4f.scale(new Vector3f(s,s,s), modelMatrix, modelMatrix);        return modelMatrix;    }我期望立方体正常地在 Y 轴上旋转到位,但它实际上正在旋转并消失,然后它的一条线在中间出现拉伸并消失。
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

我想围绕 X 或 Y 轴旋转它,整个对象消失并拉伸。Z 轴工作正常。

当然。

你的物体是一个二维物体。它只是一个具有二维 x 和 y 的平面。x 轴和 y 轴平行于视口。z 轴指向视口之外。
如果绕 z 轴(在 xy 平面中)旋转,对象将保持其大小并旋转。
但如果绕 x 轴旋转,则对象似乎沿 y 轴拉伸并以 90° 和 270° 的角度消失。如果绕 y 轴旋转,则对象似乎沿 x 轴拉伸。

由于正交投影,围绕 x 和 y 轴的旋转看起来“平坦” 。实际上,您没有投影矩阵,因此场景是并行投影的(正交)。
如果你想“看到”3维旋转,那么你必须使用透视投影


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信