我正在爲iOS的遊戲工作,我在使用glDrawArrays(使用cocos2D v1.0.1,使用OpenGL ES 1.1)時遇到了一些問題。我首先創建定義一座小山的頂部和底部,與紋理數組沿着CGPoints座標的數組:使用glDrawArrays,iOS的OpenGL紋理腐敗
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 class,並得到了相同的結果。我也嘗試使用glHints(例如GL_LIN_SMOOTH_HINT和GL_NICEST),但我沒有找到任何有用的東西。
任何想法我可以解決這個問題?
我想隨着遊戲的進一步向一個方向滾動,值會增加。良好的實現不需要使用比屏幕寬度更大的值。即不要將攝像機移動到無盡的世界中,將世界移動到固定位置的攝像機上,並創建並丟棄攝像機視野外的世界。 – LearnCocos2D 2012-07-08 11:52:32
謝謝蒂姆,就是這樣!由於紋理重複,我能夠使紋理座標保持在較低的值,使用... hillTexCoords [nHillVertices] = ccp((topLeftVertexX - (floor(offsetX/textureSize.width)* textureSize.width))/ textureSize.width,0.0); 再次感謝,我甚至不認爲這可能是一個浮點精度問題。現在有道理! – LanceK 2012-07-08 19:21:03