android - OpenGL ES 二维坐标

标签 android opengl-es 2d

我正在尝试设置我的 GLSurfaceView 以使用传统的 2D 坐标系。 基本上,我想将我的第一个图 block 放在左上角的 0x0 处。 但是,当我在 0x0 处绘制纹理时,它会将其绘制在左下角。

我希望它从 0x0 开始,随着 Y 坐标的增加而下降。

这是我初始化渲染器的方式:

gl.glClearColor(0f, 0f, 0f, 1);
gl.glViewport(0, 0, mViewWidth,mViewHeight); 
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();

GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glEnable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_TEXTURE_2D);

然后我使用以下方法绘制我的纹理:

gl.glBindTexture(GL10.GL_TEXTURE_2D, mytexture);
((GL11Ext) gl).glDrawTexfOES(0, 32, 0, tile_width, tile_height);

任何帮助将不胜感激,谢谢!

最佳答案

它绘制在左下角,因为那是 OpenGL 定义视口(viewport)原点的地方。要克服这个问题,您必须在投影中镜像 Y 轴。很简单,只需交换 glOrtho 的 bottomtop 参数即可。

GL.glOrtho(gl, 0, mViewWidth, mViewHeight, 0, -1, 1); // using GL. instead of GLU

关于android - OpenGL ES 二维坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407797/

相关文章:

android - 如何将 Ionic 设置为默认呈现 iOS 样式?

java - 使用 OpenGL ES 绘制纹理最简单的方法是什么?

java从文件中读取二维数组

java - 在 Java 中查找顶点法线的代码?

android - 如何在 OpenGL ES 2.0 中管理多个纹理?

python - (Python) 2D Array Checkers - 如何跳跃并吃掉对手的棋子

math - CGAL 3.4 : How do I get end vertex co-ordinates from a Finite_edges_iterator?

android - 如何改变android中actionbar部分的颜色

android - Fragment 中的可扩展 ListView

android - 如何实现拖放功能