簡體   English   中英

在OpenGL中移動相機時出現故障

[英]Glitch when moving camera in OpenGL

我正在為iPhone編寫基於圖塊的游戲引擎,除了以下故障外,它通常可以正常工作。 基本上,相機將始終將播放器保持在屏幕中央,並且它會移動以正確跟隨播放器,並在靜止時正確繪制所有內容。 但是,在播放器移動的同時,播放器表面的瓷磚會出現毛刺,如下所示:

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);
}  

用這種方式做事是否存在問題,如果可以,是否有解決方案?

我的第一個猜測是浮點數舍入錯誤 這可能會導致四邊形的坐標稍微偏離一點,從而導致出現間隙。 為了驗證這一點,您可能想要嘗試更改glClearColor()並查看間隙是否隨之改變顏色。

一種解決方法是使瓷磚稍大一些。 只需很小的增量(如0.0001f)即可解決此類錯誤。

或者,您可以嘗試使用“ 頂點陣列”或“ VBO”來存儲地面網格(確保相鄰的正方形共享頂點)。 我希望這可以解決問題,但我不確定100%-而且渲染速度也應該更快。

有時,這是由於邊界紋理上的過濾問題引起的。 您可以嘗試在紋理參數中使用GL_CLAMP_TO_EDGE。

它是由於過濾..使用線夾邊緣並留下1或2像素邊框..這就是為什么我們在glTexImage調用中選擇BORDER的原因。


第四個參數從0變為1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM