2009-12-16 216 views
4

移動相機時,我寫的iPhone基於區塊的遊戲引擎,它一般除了工作從以下毛刺。基本上,相機將始終將播放器保持在屏幕中央,並且它會正確地跟隨播放器並在靜止時正確地繪製所有內容。但同時玩家移動,玩家對毛刺走表面的瓷磚,如下所示:毛刺在OpenGL

http://img41.imageshack.us/img41/9422/movingy.png

相比固定(正確):

http://img689.imageshack.us/img689/7026/still.png

沒有人有任何想法,爲什麼這可能是?


感謝您的回覆。浮點錯誤是我的第一個想法,我試圖稍微增加瓷磚的大小,但這並沒有幫助。將glClearColor更改爲紅色仍然會留下黑色間隙,因此可能不是浮點錯誤。由於瓷磚通常會使用不同的紋理,我不知道是否可以使用頂點數組(我一直認爲相同的紋理必須應用於數組中的所有東西,糾正我,如果我錯了),我不要認爲VBO在OpenGL ES中可用。設置過濾到最近的鄰居改善了事情,但毛刺仍然發生每十幀左右,像素結果意味着這種解決方案是不可行的。

什麼,我現在在做什麼,我已經在過去做的是,這一次,我移動相機,而不是在世界上的靜止物體(即瓷磚,玩家仍然之間的主要區別移動)。我用來移動相機的代碼是:

void Camera::CentreAtPoint(GLfloat x, GLfloat y) 
{ 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrthof(x - size.x/2.0f, x + size.x/2.0f, y + size.y/2.0f, y - size.y/2.0f, 0.01f, 5.0f); 
glMatrixMode(GL_MODELVIEW); 
} 

這樣做是否存在問題,如果有的話是否有解決方案?

+0

只是想確保你意識到GL_NEAREST適用於過濾參數,但GL_CLAMP_TO_EDGE適用於質地包裹的參數,所以你可能還是想嘗試一下。如果您已經嘗試過,請忽略此操作。 – 2009-12-17 05:03:41

+0

我應該提到,我已經嘗試過了。 – 2009-12-17 05:57:38

回答

2

我的第一個猜測是floating point rounding error。這可能會導致您的四邊形座標稍微偏移,導致您看到的空白。爲了驗證這一點,您可能需要嘗試更改glClearColor()並查看間隙是否隨着顏色變化。

一種解決方法是使瓷磚稍大。只需要非常小的增量(比如0.0001f)來覆蓋這種錯誤。

或者,您可以嘗試使用Vertex ArrayVBO來存儲地面網格(確保鄰接的正方形共享頂點)。我希望這能解決這個問題,但我不是100%肯定的 - 而且它也應該更快。

+0

根據預期的圖形樣式,可以將紋理過濾設置爲最近鄰居以獲得清晰/塊狀像素復古。 – 2009-12-16 07:23:51

0

有時候,這是通過在邊界紋理元素過濾問題引起的。你可以嘗試在紋理參數中使用GL_CLAMP_TO_EDGE。

0

其由於過濾..用鉗到邊緣,並留下一個1個或2像素的邊界。這就是爲什麼我們在glTexImage呼叫BORDER一個選項..


從第四個參數的變化0〜1