编辑- 添加了更多代码
尝试使用 OpenGL ES 2.0 正确旋转我的四边形时遇到很多问题。
它似乎总是围绕屏幕坐标的中心旋转。我试图让它围绕它自己的中心旋转(对于 2d,所以仅限 z 轴)。
我一直在试验 Matrix.translate,如下所示。但是,在此处更改 x 或 y 位置只会在屏幕上的不同位置绘制四边形,但是当它旋转时,它会再次围绕屏幕中心旋转。请有人解释一下如何让它绕着它自己的z轴旋转(就像一个轮子)?
谢谢,这是相关的代码行 - 如果需要更多,请询问,我会发布。(请注意,我在 SO 和更广泛的互联网上查看了很多类似的问题,但到目前为止我还没有找到答案)。
谢谢。
//Set rotation
Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f);
//Testing translation
Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0);
我的着色器(在类级别声明)
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
从 onSurfaceChanged
float ratio = (float) width / height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
在我的 onDrawFrame 方法中
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
//Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);