2013-01-15 39 views
2

我目前正在學習Open GL ES以構建iOS應用程序。我正在嘗試向我的模型添加紋理,但沒有成功。我從打開G1 ES紋理渲染

link

下載的樣本項目,並一直在研究它。我的問題是:當我運行項目不變,我得到如下:

image with working texture

,你可以看到它與紋理一個基本的立方體。我決定將.png文件更改爲不同的圖像。但是當我做了我遭到了:

image not rendering texture

我不知道爲什麼我的PNG文件不渲染到立方體?

我的繼承人質地: my texture

和原: original

只是爲了確認即時得到任何錯誤,我已經沒有修改的代碼。

回答

1

對於這個特定的教程,你可以用一個正方形,二維冪的紋理來修復你的問題。您發佈的是135x134,因此您需要將其轉換爲128X128256x256

請參閱相關的討論這個帖子:iphone opengl es 2.0 non power of two

+1

我剛剛將128x128紋理轉換爲128x129,當我運行我的項目時,它就消失了。因此,在其他任何事情之前嘗試使用具有兩個冪次方的紋理。 –

+0

-1 iOS上的紋理不需要是兩個冪!我每天都會使用NPOT紋理! –

+0

的確如此,但這個*初學者*教程很明顯就是這種情況,並且出現了意想不到的結果。 NPOT紋理是OpenGL ES中更高級的主題。在你走路之前學習爬行以及所有這些。 –

0

你是如何改變你的圖像文件?你只是替換文件夾中的文件還是將它包含在項目中?以防萬一,您應該將文件拖入XCode並將其重命名爲tile_floor.png,或者將initWithFrame方法中的(紋理)圖像文件名更改爲紋理文件的名稱。

如果這不起作用,那麼您的兩個圖像文件中的顏色格式或每像素位信息可能不同。

+0

我將圖像添加到項目中,然後根據您的建議重命名圖像(交換名稱)。我如何檢查每像素位數?它們都是RGB根據信息 – geminiCoder

+0

如果您使用的圖像是您在這裏複製的圖像,那麼這應該不成問題。兩者都是24 bpp。 (要檢查,我使用GIMP打開它們,但右鍵單擊的get-info應該也是這樣)。重命名圖像後運行項目是否無效? –

+0

不過仍然得到同樣的東西? – geminiCoder

3

如果使用非冪的兩個紋理不能使用的貼圖,你需要設置你篩選正確的。

過濾:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

鉗:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

但這配有缺點,在3D對象的紋理質量會很差,如果距離遠。因此,在這種情況下留下兩個紋理,並使用mipmap。