【发布时间】:2010-04-20 02:59:58
【问题描述】:
我基本上在 iPhone 上有一个 2d 游戏,我正在尝试设置以不同速度滚动的多个背景(称为视差背景)。
所以我的想法是使用不同的 z 坐标平面将背景粘贴在前景后面,并让它们比前景(大小)更大以适应,这样整个东西就可以滚动(只是在不同的速度)。
而且(据我所知)我基本上实现了这一点。唯一的问题是它似乎完全忽略了我给它的任何 z 值,或者更确切地说它只是将它们全部归零。我看到了背景(到目前为止,我只测试了一个背景,以保持简单......所以现在我只有一个前景,我想要一个背景以不同的速度滚动),但它与我的滚动 1:1前景,所以它显然看起来不正确,并且大部分都被切断了(因为它更大)。我已经尝试了各种背景的 z 值和各种近/远剪裁平面......它总是一样的。我可能只是做错了一件简单的事情,但我无法弄清楚。我想知道它是否与我在 glVertexPointer 中仅使用 2 个坐标作为前景有关? (当然是我在3的背景)
我会发布一些代码:
这是一些初始设置:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -10.0f, 10.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//transparency
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
关于我前景的浮点数组的一点点......它是交错的。对于我的前景,它去顶点 x,顶点 y,纹理 x,纹理 y,重复。这一切都很好。
这是我的 FOREGROUND 渲染:
glVertexPointer(2, GL_FLOAT, 4*sizeof(GLfloat), texes); <br>
glTexCoordPointer(2, GL_FLOAT, 4*sizeof(GLfloat), (GLvoid*)texes + 2*sizeof(GLfloat)); <br>
glDrawArrays(GL_TRIANGLES, 0, indexCount / 4);
背景渲染:
除了这次它去顶点 x、顶点 y、顶点 z、纹理 x、纹理 y 之外,这里相同的钻头,重复。这次记下 z 值。我确实在调试时确保了这个数组中的数据是正确的(得到正确的 z 值)。又一次,它出现了……它并没有像它应该的那样回到很远的地方。
glVertexPointer(3, GL_FLOAT, 5*sizeof(GLfloat), b1Texes);
glTexCoordPointer(2, GL_FLOAT, 5*sizeof(GLfloat), (GLvoid*)b1Texes + 3*sizeof(GLfloat));
glDrawArrays(GL_TRIANGLES, 0, b1IndexCount / 5);
要移动我的相机,我只需执行一个简单的 glTranslatef(x, y, 0.0f);
我不明白我做错了什么,因为这似乎是可以想象的最基本的 3D 功能......更远的东西更小,并且在相机移动时移动速度不会那么快。对我来说不是这样。似乎它应该是非常基本的,甚至不会真正受到我的投影和所有这些的影响(尽管我什至尝试做 glFrustum 只是为了好玩,但没有成功)。请帮忙,我觉得这只是一件愚蠢的事情。如有必要,我会发布更多代码。
【问题讨论】:
-
你启用depthBuffering了吗?
-
要添加深度缓冲区,请参见此处memention.com/blog/2009/10/08/Think-deep.html
标签: iphone opengl-es scroll background