Android:打开 GL ES:形状未按预期旋转

Android: Open GL ES: Shape not rotating as expected

我正在尝试从三角形的中心沿 Z 轴旋转一个三角形。但是在这里我从三角形边缘的中心而不是它的中心得到三角形旋转。

渲染器代码:

@Override
public void onDrawFrame(GL10 gl) {

    float scratch[] = new float[16];

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);

    int time = (int) (SystemClock.uptimeMillis() % 4000l);
    float angle = 0.090f * time;

    Matrix.setRotateM(mRotationMatrix, 0, angle, 0.0f, 0.0f, -1.0f);

    Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0);
    triangle.draw(scratch);
}

问题更有可能是由于构成三角形的顶点引起的。

解决方案 1:在旋转三角形之前,对其进行平移,使其中心与场景中心对齐。

解决方案 2:提供围绕中心的顶点。例如:

glVertex(0,0,0); 
glVertex(1,0,0); 
glVertex(0,1,0); // will produce rotation around the first vertex

...所以用一半抵消它们:

glVertex(0-0.5,0-0.5,0-0.5); 
glVertex(1-0.5,0-0.5,0-0.5); 
glVertex(0-0.5,1-0.5,0-0.5); // will produce rotation around the approximate center

最好的方法是在旋转之前计算中心和平移。

祝你好运!