2012-10-29 46 views
2

我在使用OpenGl中的紋理時遇到問題(僅限2D)

我想顯示一個Level(大小爲15x15),並且每個Field可以有不同的值/圖片。
我有大約100種不同的字體類型,根據關卡設計,我必須爲每種類型顯示不同的圖像。
如果我爲每個可能的字段(100個文件)使用單個tga-Image,一切正常, ,但現在我將所有圖像放在一個文件中,根據字段類型,我總是顯示一個不同的部分來自圖像。

問題:有時細線圖像中沒有顯示 和不同精靈之間,經常會出現黑色或灰色線條,這會使整個圖形變得醜陋。

有沒有辦法輕鬆解決這個問題?
(也許我必須將tga-image加載到一個GLuint中,然後將它分成100個不同的GLunint?或者是否有一個改進渲染的設置?或者我必須更改tga-image文件本身的分辨率?)

這裏是我的圖像文件的一部分,每一個元素都有的220x220像素的分辨率 - >全PIC:2200x2200像素 Sprite-ImagesOpenGl紋理:錯誤的像素

而這是OpenGL的輸出:
OpenGl-Output

我真的不想擁有圖像文件的混亂。特別是由於加載所有這些文件會消耗大量的時間,我敢肯定,有一個解決方案在那裏

編輯:

我使用以下設置:

// Specify filtering and edge actions 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); 

EDIT2 :

現在我將GL_LINEAR更改爲GL_NEAREST,並在紋理座標中添加了一個半紋理座標,圖像之間不再有任何線條:)
但我仍然有其他問題:
pixel-bug
圖像中的小元素(線條)無法正確顯示。
這是應該的樣子:
howitshouldlook

+0

使用最近的,並確保你排隊的像素正確 – Ylisar

回答

2

「請記住,這在紋理像素中心的OpenGL樣紋理」

看一看答案在這裏: OpenGL ES Texture Coordinates Slightly Off

+0

感謝,解釋和解決問題與各地的黑色和灰色線 – maja

+0

是不是因爲你從GL_LINEAR更改爲GL_NEAREST?它與GL_LiNEAR的外觀如何? – Dirk

+0

沒有線是由於半紋素。現在當我用GL_NEAREST更改GL_LINEAR時,我看不到任何差異 – maja

0

你需要將填充像素添加到紋理中,以避免沿着它們的邊緣形成線條。因此,當OpenGL從要繪製的紋理中採樣像素(包括mipmap級別,如果渲染它們的尺寸小於它們在文件中的尺寸),則不會使用錯誤着色的像素。