我正在为 iOS 开发一款游戏,我在使用 glDrawArrays 的纹理方面遇到了一些问题(使用 cocos2D v1.0.1,带有 OpenGL ES 1.1)。我首先创建了一个定义山顶和底部的 CGPoints 数组,以及一个纹理坐标数组:
hillVertices[nHillVertices] = CGPointMake((topLeftVertexX)*CC_CONTENT_SCALE_FACTOR(), topLeftVertexY*CC_CONTENT_SCALE_FACTOR());
hillTexCoords[nHillVertices] = CGPointMake((topLeftVertexX)/textureSize.width, 0.0);
nHillVerticies++;
hillVertices[nHillVertices] = CGPointMake((bottomLeftVertexX)*CC_CONTENT_SCALE_FACTOR(), bottomLeftVertexY*CC_CONTENT_SCALE_FACTOR());
hillTexCoords[nHillVertices] = CGPointMake(topLeftVertexX)/textureSize.width, 1.0);
nHillVerticies++;
然后使用...绘制
glBindTexture(GL_TEXTURE_2D, groundSprite.texture.name);
glVertexPointer(2, GL_FLOAT, 0, hillVertices);
glTexCoordPointer(2, GL_FLOAT, 0, hillTexCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (nHillVertices-1));
在游戏开始时(当“topLeftVertexX”值较小时),山丘看起来不错……
但随着游戏的继续,x 偏移值(topLeftVertexX)增加,事情开始变得更糟......
接近尾声,它变得糟糕......
我认为问题是在游戏开始时,“topLeftVertexX”的值很小,所以结果
(topLeftVertexX)/textureSize.width
在
hillTexCoords[nHillVertices] = CGPointMake((topLeftVertexX)/textureSize.width, 0.0);
是小。然而,随着游戏的继续和 x 值的增加,我认为该值变得足够大,足以导致某种腐败。textureSize 为 512x512,“topLeftVertexX”在游戏开始时从 0 开始,一直上升到大约 200,000。
我尝试增加三角形的数量(包括添加额外的条带),但这无济于事。我也尝试使用@jpsarda 的CCSpriteBiCurve 类,得到了相同的结果。我也尝试使用 glHints(例如 GL_LINE_SMOOTH_HINT 和 GL_NICEST),但我没有找到任何有用的东西。
有什么想法可以解决这个问题吗?