gpt4 book ai didi

java - Opengl 旋转对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:48 24 4
gpt4 key购买 nike

我正在尝试在 OpenGL 中旋转一个对象。我可以成功绘制一个正方形,但是当我尝试旋转它时,它停留在同一个位置。我尝试移动下面的行的顺序,但仍然不起作用,(在删除某些顺序或删除某些行的情况下根本不绘制)...这是我到目前为止的代码,mAngle 是 0 到 360 之间的随机 float 。

    Matrix.setIdentityM(mModelMatrix, 0);
Matrix.setRotateM(mModelMatrix, 0, mAngle, 0f, 0f, 1.0f);
Matrix.setLookAtM(mModelMatrix, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);
Matrix.translateM(mModelMatrix, 0, 0f, 0f, 0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mModelMatrix, 0);

mSquare.draw(mMVPMatrix);

最佳答案

Matrix.setRotateM 创建一个新矩阵,用于绕轴 (x, y, z) 旋转角度 a(以度为单位)。
Matrix.setLookAtM 根据视点、 View 中心和向上 vector 定义新的观看变换。
这两个操作都不操作输入矩阵,它们通过参数创建一个完整的新矩阵并将其写入输出rm

相比之下,使用Matrix.rotateM旋转给定的矩阵。

参见android.opengl - Matrix


您必须通过 Matrix.setLookAtM 创建一个单独的 View 矩阵:

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);

并且您必须将其乘以 Matrix.multiplyMM 与旋转矩阵(模型矩阵):

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);


我建议这样编写代码:

Matrix modelM= new Matrix();
Matrix.setRotateM(modelM, 0, mAngle, 0f, 0f, 1.0f);

Matrix viewM = new Matrix();
Matrix.setLookAtM(viewM, 0, 0, 0, 5f, 0f, 0f, 0f, 0f, 10.0f, 0.0f);

Matrix.multiplyMM(mModelMatrix, 0, viewM, 0, modelM, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mModelMatrix, 0);

关于java - Opengl 旋转对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204274/

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