#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