Android и glOrthof - PullRequest
       1

Android и glOrthof

3 голосов
/ 04 февраля 2012

Я занимаюсь разработкой простой игры с миром плиток для Android 2.3.Я пытаюсь настроить орфографический вид в opengl, но мои плитки 1x1 отображаются продолговатыми - ориентированными по направлению к экрану - если экран находится в вертикальном положении, то квадрат растягивается вертикально, если горизонтальный, то растягивается горизонтально,Вот что у меня в методе onSurfaceChanged:

gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0.0f, width, 0.0f, height, 1.0f, 100.0f);

В моем методе onDrawFrame у меня есть:

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 
    0.0f, 0.0f, 6.0f, // eye translation 
    0.0f, 0.0f, 0.0f, // eye center
    0.0f, 1.0f, 0.0f  // eye world up
    ); 
// draw objects

Из метода onDraw объекта:

gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFloatVertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexBuffer);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glPushMatrix();
gl.glTranslatef(localTranslation.getX(), localTranslation.getY(), localTranslation.getZ());
gl.glScalef(localScale.getX(), localScale.getY(), localScale.getZ());
gl.glRotatef(mAngle, localRotation.getX(), localRotation.getY(), localRotation.getZ());
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glNormal3f(0.0f, 0.0f, -1.0f);
gl.glPopMatrix();
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

Я использовал те же методы onSurfaceCreated, onDrawFrame и onDraw в режиме перспективы, и он работал без каких-либо искажений при рисовании объектов.Я пробовал несколько разных вещей, извлеченных из сети (например, замена правого / нижнего орто-вызова с соотношением сторон ширина / высота), но, похоже, ничего не решило проблему.

Вот как выглядит экран:

The images should be perfect 1x1 squares in ortho mode.

Есть идеи?Что мне не хватает?Все, что я хочу видеть, - это идеальные квадраты 1x1, на которые я могу бросать текстуры без искажений.

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Попробуйте это

gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0.0f, width, 0.0f, height, 1.0f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW); 
gl.glLoadIdentity();  
0 голосов
/ 15 марта 2012

Хорошо, этот параметр я использую как для iOS, так и для Android, но когда соотношение экранов отличается, положение объектов изменяется.

glViewport(0, 0, backingWidth, backingHeight);

glOrthof(-1.0,                  //LEFT 
         1.0,                   //RIGHT
         -1.0 * backingHeight / backingWidth,  //BOTTOM
         1.0 * backingHeight / backingWidth,   //TOP
         -2.0,                  //NEAR
         100.0);                //FAR

ПРИМЕЧАНИЕ.для всех моих моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...