简单的 OpenGL 纹理贴图不起作用?
問題
我正在嘗試找出 OpenGL 中的紋理映射,但我找不到一個(gè)簡(jiǎn)單的例子來(lái)工作。
正在繪制多邊形,雖然它沒有紋理,而只是純色。此外,位圖也被正確加載到 sprite1[] 中,因?yàn)榈侥壳盀橹刮乙恢痹诔晒κ褂?glDrawPixels。
我使用 glGenTextures 來(lái)獲取我的 tex 名稱,但我注意到它并沒有改變 texName1;?這個(gè) GLuint 是我初始化它的任何東西,即使在調(diào)用 glGenTextures 之后……
我已啟用 GL_TEXTURE_2D。
繼承人的代碼:
<span style="color:#003b61"><span style="background-color:#ffffff"><code class="language-cpp">GLuint texName1 = 0;glGenTextures(1, &texName1); glBindTexture(GL_TEXTURE_2D, texName1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, sprite1[18], sprite1[22], 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, &sprite1[54]);glColor3f(1, 1, 0); glBindTexture(GL_TEXTURE_2D, texName1); glBegin(GL_QUADS);glTexCoord2f (0.0, 0.0);glVertex3f (0.0, 0.0, -5.0f);glTexCoord2f (1.0, 0.0);glVertex3f (.5, 0.0, -5.0f);glTexCoord2f (1.0, 1.0);glVertex3f (.5, .5, -5.0f);glTexCoord2f (0.0, 1.0);glVertex3f (0.0, .5, -5.0f); glEnd(); </code></span></span>更新:我不知所措。這是我嘗試過的所有內(nèi)容:
原來(lái)我是在初始化 OGL 之前初始化我的紋理。紋理在類構(gòu)造函數(shù)中初始化(glGenTextures->glTexImage2D)并在每幀調(diào)用的成員函數(shù)中繪制(glBegin->glEnd)。genTextures 現(xiàn)在似乎工作正常,我的名字是 1。
GL_RGBA8、GL_BGRA_EXT 的所有可能組合(GL_BGRA 在我的系統(tǒng)上不起作用;我需要 _EXT),我什至從位圖中刪除了 alpha 通道并嘗試了 GL_RGB、GL_BGR_EXT 等的所有組合。沒有運(yùn)氣。
嘗試以程序方式創(chuàng)建位圖并使用它
確保 GL_COLOR_MATERIAL 未啟用。
將位圖大小更改為 32×32。
嘗試了 glTexEnvi 而不是 glTexEnvf。
解決方法
要檢查的第一件事是顏色材料設(shè)置,如 ShadowIce 所述,然后檢查您的紋理文件以確保其大小合理(例如 256×256)和 RGB 位圖。如果文件有輕微的問題,無(wú)論您如何嘗試,它都不會(huì)正確呈現(xiàn)。
然后,我將停止嘗試僅調(diào)試該代碼,而是查看您與 NeHe 網(wǎng)站上的教程有什么不同。
NeHe 始終是檢查您是否嘗試在 OpenGL 中做事的好地方。紋理可能是最難做到的事情,而且隨著你其他 GL 技能的提高,它們只會(huì)變得更加困難。
我的 OpenGL 生銹了,但我記得與glTexImage2D
.?最后我設(shè)法讓它工作,但我總是有更多的運(yùn)氣,?gluBuild2DMipmaps
所以我最終得到了
取代
<span style="color:#333333"><span style="background-color:#ffffff"><code class="language-cpp">glTexImage2D (GL_TEXTURE_2D, 0, type, i.width, i.height, 0, type, GL_UNSIGNED_BYTE, i.data );</code></span></span>?
一些隨機(jī)的想法:
- GL_COLOR_MATERIAL 可能已啟用
- 將“glTexEnvf”更改為“glTexEnvi”,看看是否有幫助
- 如果在 glGenTextures 之后 texName1 為 0,您可能沒有活動(dòng)的 OpenGL 上下文
對(duì)于錯(cuò)誤檢查,我建議編寫一個(gè)小函數(shù),打印來(lái)自 glGetErrors 的最常見結(jié)果的可讀輸出,并使用它來(lái)查找產(chǎn)生錯(cuò)誤的行。另一種可能性是使用GLIntercept、BuGLe或gDEBugger之類的東西。
除了mentat 指出您可能對(duì)非二次冪紋理尺寸有問題之外,您還提到紋理名稱生成不會(huì)更改名稱。
這聽起來(lái)好像您調(diào)用glGenTextures()得太早了,即在初始化 OpenGL 之前。如果你不是,那么我建議在調(diào)用glGenTextures()檢查 OpenGL 錯(cuò)誤狀態(tài)之后添加代碼,方法是調(diào)用glGetError().
?文章來(lái)源:簡(jiǎn)單的 OpenGL 紋理貼圖不起作用?
總結(jié)
以上是生活随笔為你收集整理的简单的 OpenGL 纹理贴图不起作用?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server的linux版命令行
- 下一篇: Silverlight4_Tools安装