Матрица OpenGL работает по-разному на iphone и на симуляторе? - PullRequest
0 голосов
/ 09 апреля 2011

Я делаю простую 2-мерную игру, с использованием 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, &(m[0][0]));
// … Print matrix
glGetFixedv(GL_PROJECTION, &(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?Но как это выяснить?Может быть, у кого-то есть подсказки, где искать ответ?Что-то связано с фиксированным или плавающим?

1 Ответ

0 голосов
/ 09 апреля 2011

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

о (^_^) о

...