Android:Open GL ES:Shape未按预期旋转

时间:2015-03-14 07:37:37

标签: android opengl-es rendering renderer

我试图从三角形中心沿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 个答案:

答案 0 :(得分:0)

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

解决方案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

最好的方法是计算中心并在旋转前进行平移。

祝你好运!