gpt4 book ai didi

java - 如何在 OpenGL 中围绕 Z 轴中心旋转对象?

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

当我使用旋转矩阵围绕 Z 轴旋转正方形时,它实际上是在围绕它旋转小圆圈,而不是实际旋转到位。我希望它像轮子一样旋转。

我尝试先旋转,然后平移,然后反之亦然,但它不起作用。我读过一些人们在网上提出的问题,但都是旧的 OpenGL。

我的矩阵代码:

public static Matrix4f createTranslateMatrix(Vector3f t) {
Matrix4f tM = new Matrix4f();

Matrix4f.translate(t, tM, tM);

return tM;

}

public static Matrix4f createRotateMatrixZ(float z) {
Matrix4f zM = new Matrix4f();

Matrix4f.rotate((float) Math.toRadians(z), new Vector3f(0,0,1), zM, zM);

return zM;
}

渲染代码:

GL30.glBindVertexArray(cube_model.vaoID);
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);



Matrix4f translateM = Maths.createTranslateMatrix(new Vector3f(0.0f, Display.getWidth() - 200f, 0.0f));
Matrix4f rotateM = Maths.createRotateMatrixZ(increaseRotation);
Matrix4f translateM2 = Maths.createTranslateMatrix(new Vector3f(0.0f, 0.0f, 0.0f));


Matrix4f modelM = new Matrix4f();
modelM.setIdentity();

Matrix4f.mul(translateM2, rotateM, modelM);
Matrix4f.mul(modelM, translateM, modelM);


shader.loadModelMatrix(modelM);



GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 6);

increaseRotation += 1f;
if(increaseRotation == 360.0f) {
increaseRotation = 0;
}


GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL30.glBindVertexArray(0);

四:

    private static final float vertices[] = {
-Display.getWidth() / 5, 0.0f, 0.0f, 1.0f,1.0f,1.0f,1.0f,
Display.getWidth() / 5, 0.0f, 0.0f, 0.0f,1.0f,1.0f,1.0f,
-Display.getWidth() / 5, Display.getHeight() / 5, 0.0f, 1.0f,1.0f,1.0f,1.0f,

Display.getWidth() / 5, 0.0f, 0.0f, 1.0f,1.0f,1.0f,1.0f,
Display.getWidth() / 5, Display.getHeight() /5, 0.0f, 0.0f,1.0f,1.0f,1.0f,
-Display.getWidth() / 5, Display.getHeight() / 5, 0.0f, 1.0f,1.0f,1.0f,1.0f
};

正交矩阵:

public static Matrix4f createOrthoMatrix(final float l, final float r, final float b, final float t, final float n, final float f ) {
Matrix4f orthoM = new Matrix4f();

orthoM.m00 = 2 / (r - l);
orthoM.m03 = -(r+l)/(r-l);
orthoM.m11 = 2/(t-b);
orthoM.m13 = -(t+b)/(t-b);
orthoM.m22 = -2/(f-n);
orthoM.m23 = -(f+n)/(f-n);
orthoM.m33 = 1;


return orthoM;


}

正交矩阵初始化:

        loadProjectionMatrix(Maths.createOrthoMatrix(-Display.getWidth(), Display.getWidth(), -Display.getHeight(), Display.getHeight(), 0.1f, 1000));

我希望对象在原地旋转,而不是围绕其某些边缘旋转。

最佳答案

旋转总是围绕坐标系的原点发生。因此,您首先必须将几何图形平移到原点,然后旋转,然后平移回来。

关于java - 如何在 OpenGL 中围绕 Z 轴中心旋转对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57858570/

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