OpenGL矩阵在iphone和模拟器上的工作方式不同?

时间:2011-04-09 07:49:24

标签: iphone opengl-es matrix floating-point fixed

我正在做一个简单的2D游戏,使用opengl正视图,三角形作为精灵。

问题是,绝对相同的游戏代码在我的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]

我想也许smth在gl中有不同的初始化?但是如何搞清楚什么? 也许有人有任何线索在哪里寻找答案? 是与固定vs浮动相关的东西吗?

1 个答案:

答案 0 :(得分:0)

Wooohoo ...我发布后,我自己找到了答案...... 很抱歉打扰...原因在于关键字: GL_MODELVIEW和GL_MODELVIEW_MATRIX 我应该用: glMatrixMode(GL_MODELVIEW); 和 glGetFixedv(GL_MODELVIEW_MATRIX,&(m [0] [0]));

0 (^_^)Ø