Android NDK: координаты странных линий в OpenGL ES - PullRequest
0 голосов
/ 27 января 2012

Я рендеринг простой сцены с библиотекой GLESv1_CM на Android с NDK.

void render(Rect viewport)
{
  glViewport(viewport.left, viewport.top, viewport.Width(), viewport.Height());
  glClear(GL_COLOR_BUFFER_BIT);
  glMatrixMode(GL_PROJECTION);   
  glLoadIdentity();
  glOrthof(viewport.left, viewport.right, viewport.top, viewport.bottom, -1, 1);
  GLfloat points[] = { 5, 50, 1, 1, 1, 1,
                       7, 50, 1, 1, 1, 1,
                       7, 50, 1, 0, 0, 1,
                       7, 52, 1, 0, 0, 1,
                       8, 50, 0, 1, 0, 1,
                      10, 50, 0, 1, 0, 1};
  glEnableClientState(GL_VERTEX_ARRAY);
  glEnableClientState(GL_COLOR_ARRAY);
  glVertexPointer(2,GL_FLOAT,sizeof(GLfloat)*6,&points);
  glColorPointer(4,GL_FLOAT,sizeof(GLfloat)*6,&points[2]);
  glDrawArrays(GL_LINES,0,6);
  glDisableClientState(GL_VERTEX_ARRAY);
  glDisableClientState(GL_COLOR_ARRAY);
}

Я хочу иметь 3 пересеченные линии, но когда я запускаю его на устройстве с Android 2.2 или 3.2, у меня есть это:

screen from Android 2.2 device

Более того, на эмуляторе Android с Android 4 (обновление: то же самое на эмуляторе с 2.3) у меня есть это:

screen from Android 4 emulator

Можно ли сделать так, чтобы это выглядело на этом рисунке на всех устройствах со всеми версиями Android без использования opengl2?

wanted screen

Спасибо

1 Ответ

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

Согласно FAQ по OpenGL для этого типа проекции:

Если требуется точная пикселизация, вы можете поместить небольшой перевод в матрицу ModelView, как показанониже:

glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
glTranslatef (0.375, 0.375, 0.);

Я полагаю, что это уменьшает вероятность проблем с округлением.

...