OpenGL matrix работает по-разному на iphone и в симуляторе?

#iphone #opengl-es #matrix #floating-point #fixed

#iPhone #opengl-es #матрица #с плавающей запятой #исправлено

Вопрос:

Я делаю простую 2d-игру с использованием opengl ortho view, с треугольниками в качестве спрайтов.

Проблема в том, что абсолютно один и тот же код игры идеально работает на моем симуляторе Mac, но когда я запускаю игру на телефоне, что-то идет не так. Когда я отслеживаю проблему, я обнаружил кое-что, чего не понимаю.

Я упростил код, чтобы иметь четкое доказательство различного поведения, и код выглядит следующим образом:

 // Setup projection matrix as identity
GLfixed projectionMatrix[16];
projectionMatrix[0] = 65536;//1.0f;
projectionMatrix[1] = 0;
projectionMatrix[2] = 0;
projectionMatrix[3] = 0;

projectionMatrix[4] = 0;
projectionMatrix[5] = 65536;//1.0f;
projectionMatrix[6] = 0;
projectionMatrix[7] = 0;

projectionMatrix[8] = 0;
projectionMatrix[9] = 0;
projectionMatrix[10] = 65536;//1.0f;
projectionMatrix[11] = 0;

projectionMatrix[12] = 0;
projectionMatrix[13] = 0;
projectionMatrix[14] = 0;
projectionMatrix[15] = 65536;//1.0f;

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glLoadMatrixx( projectionMatrix );


// Setup modelview matrix
glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();

// And here I printout the content of the matricies
GLfixed m[4][4];
glGetFixedv(GL_MODELVIEW, amp;(m[0][0]));
// … Print matrix
glGetFixedv(GL_PROJECTION, amp;(m[0][0]));
// … Print matrix

The printed values on my mac using simulator (feels right):
 ==== MODEL
 [65536][0][0][0]
 [0][65536][0][0]
 [0][0][65536][0]
 [0][0][0][65536]
 ==== PROJECTION
 [65536][0][0][0]
 [0][65536][0][0]
 [0][0][65536][0]
 [0][0][0][65536]

And printed values on my ipod (wtf?):
 ==== MODEL
 [-1490935922][1236752][20995][803202364]
 [1][1032192][1245312][803202404]
 [879947476][3][92][803202728]
 [1][10558464][803202404][808970200]
 ==== PROJECTION
 [-1490935922][1236752][20995][803202364]
 [1][1032192][1245312][803202404]
 [879947476][3][92][803202728]
 [1][10558464][803202404][808970200]
  

Я думаю, может быть, что-то по-разному инициализировано в gl? Но как выяснить, что именно?
Может быть, у кого-нибудь есть какие-нибудь подсказки, где искать ответ?
Что-то связано с fixed vs float?

Ответ №1:

Ого-го… Сразу после публикации я сам нашел ответ… Извините за беспокойство… Причина была в ключевых словах: GL_MODELVIEW и GL_MODELVIEW_MATRIX, которые я должен использовать: glMatrixMode(GL_MODELVIEW ); и glGetFixedv( GL_MODELVIEW_MATRIX, amp;(m[0][0]));

o(^_^)o