我试图从三角形中心沿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);
}
答案 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
最好的方法是计算中心并在旋转前进行平移。
祝你好运!