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
最好的方法是在旋转之前计算中心和平移。
祝你好运!
我正在尝试从三角形的中心沿 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
最好的方法是在旋转之前计算中心和平移。
祝你好运!