我使用glDrawTexfOES
绘制了一些纹理,显示效果很好。我希望能够改变相机视图以给人一种放大或缩小的印象,但这就是我遇到麻烦的地方。我尝试制作基本的顶点数组,这个工作正常,我可以缩放。但是,我希望能够使用glDrawTexfOES
缩放纹理。相关代码如下:
onSurfaceCreated
包括对以下内容的调用:
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
onSurfaceChanged
完全实施(我怀疑问题在于此处)
public void onSurfaceChanged(GL10 gl, int width, int height) {
mWidth = width;
mHeight = height;
gl.glViewport(0, 0, mWidth, mHeight);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, mWidth, 0, mHeight, -1, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
最后,onDrawFrame实现:
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
// Set crop area (UVarray are uv co-ords for a texture map, the texture renders fine.)
((GL11) gl).glTexParameterfv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES,UVarray,0);
// Draw texture
((GL11Ext) gl).glDrawTexfOES(32.0f,32.0f,0.0f,64.0f,64.0f);
}
我尝试将glViewport
和glOrthof
的参数更改为宽度* 2和高度* 2,但纹理仍然根本不缩放,它们保持完全相同。当我交换使用顶点数组时,这些调整工作。
非常感谢任何帮助。
答案 0 :(得分:0)
glDrawTextfOES()
的宽度和高度参数位于像素中。模型视图和投影矩阵仅影响位置,而不影响缩放本身。因此,不应使用64像素作为宽度和高度参数,而应使用全局缩放宽度和高度的变量,如果需要,使用纹理裁剪选择纹理的一部分。
这可能是一个有用的阅读 - OES_draw_texture。