OpenGL ES 2D Co-Ordinates - PullRequest
       1

OpenGL ES 2D Co-Ordinates

1 голос
/ 20 июня 2011

Я пытаюсь настроить свой GLSurfaceView для использования традиционной 2D системы координат. По сути, я хочу поместить свою первую плитку в 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);

Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Рисуется в левом нижнем углу, потому что именно там OpenGL определяет начало области просмотра.Чтобы преодолеть это, вы должны отразить ось Y в проекции.Достаточно просто, просто поменяйте bottom и top параметрами glOrtho.

GL.glOrtho(gl, 0, mViewWidth, mViewHeight, 0, -1, 1); // using GL. instead of GLU
2 голосов
/ 21 июня 2011

Мне удалось решить эту проблему с помощью комментария @ datenwolf.

Базовая инициализация была правильной, однако использование glDrawTexOES игнорирует ортокамеру.Чтобы не использовать glDrawTex, я загружал текстуры как обычно, но для их рисования использовал буфер вершин.

Я использовал проект Android SpriteMethodTest, который содержит код о том, как правильно их загрузить.Мне просто пришлось поиграть с камерой, и теперь все работает нормально.

...