当我使用旋转矩阵在 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维旋转,那么你必须使用透视投影
添加回答
举报
0/150
提交
取消