我正在尝试围绕其中心旋转纹理,并且我已经通过此代码实现了但是在旋转时图像也以某个角度显示(因此图像在某些角度看不到正确),如附图所示帮我解决这个问题
这是我的代码
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glOrthof(0, 320, 0, 480, 0, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_TEXTURE_2D);
}
正方形的顶点是
float vertices[] = {
-.25f,.25f,0,
-.25f,-.25f,0,
.25f,.25f,0,
.25f,-.25f,0
};
这是我的绘制方法
public void draw(GL10 gl) {
gl.glPushMatrix();
gl.glTranslatef(-.125f, -.125f, 0f);
gl.glRotatef(r,0, 0,-1 );
gl.glTranslatef(.125f, .125f, 0);
// Point to our buffers
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// Set the face rotation
gl.glFrontFace(GL10.GL_CW);
// Point to our vertex buffer
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexbuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texturebuffer);
// Draw the vertices as triangle strip
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
r = r+1;
gl.glPopMatrix();
}
答案 0 :(得分:1)
看起来你的纹理坐标可能只是引用太多的纹理 - 如果你的代码的某些部分填充非二次幂图像到两个纹理的大小,但是不会传递相关知识。因此,您可以围绕纹理的中心旋转,但实际图像仅使用纹理角落的一部分。
我无法在示例代码中看到任何内容,以显示您是如何加载图片的,或者是将值放入texturebuffer
的人,但这些是明智的区域。