简单的 OpenGL 纹理贴图不起作用?
問題
我正在嘗試找出 OpenGL 中的紋理映射,但我找不到一個簡單的例子來工作。
正在繪制多邊形,雖然它沒有紋理,而只是純色。此外,位圖也被正確加載到 sprite1[] 中,因為到目前為止我一直在成功使用 glDrawPixels。
我使用 glGenTextures 來獲取我的 tex 名稱,但我注意到它并沒有改變 texName1;?這個 GLuint 是我初始化它的任何東西,即使在調用 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>更新:我不知所措。這是我嘗試過的所有內容:
原來我是在初始化 OGL 之前初始化我的紋理。紋理在類構造函數中初始化(glGenTextures->glTexImage2D)并在每幀調用的成員函數中繪制(glBegin->glEnd)。genTextures 現在似乎工作正常,我的名字是 1。
GL_RGBA8、GL_BGRA_EXT 的所有可能組合(GL_BGRA 在我的系統上不起作用;我需要 _EXT),我什至從位圖中刪除了 alpha 通道并嘗試了 GL_RGB、GL_BGR_EXT 等的所有組合。沒有運氣。
嘗試以程序方式創建位圖并使用它
確保 GL_COLOR_MATERIAL 未啟用。
將位圖大小更改為 32×32。
嘗試了 glTexEnvi 而不是 glTexEnvf。
解決方法
要檢查的第一件事是顏色材料設置,如 ShadowIce 所述,然后檢查您的紋理文件以確保其大小合理(例如 256×256)和 RGB 位圖。如果文件有輕微的問題,無論您如何嘗試,它都不會正確呈現。
然后,我將停止嘗試僅調試該代碼,而是查看您與 NeHe 網站上的教程有什么不同。
NeHe 始終是檢查您是否嘗試在 OpenGL 中做事的好地方。紋理可能是最難做到的事情,而且隨著你其他 GL 技能的提高,它們只會變得更加困難。
我的 OpenGL 生銹了,但我記得與glTexImage2D
.?最后我設法讓它工作,但我總是有更多的運氣,?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>?
一些隨機的想法:
- GL_COLOR_MATERIAL 可能已啟用
- 將“glTexEnvf”更改為“glTexEnvi”,看看是否有幫助
- 如果在 glGenTextures 之后 texName1 為 0,您可能沒有活動的 OpenGL 上下文
對于錯誤檢查,我建議編寫一個小函數,打印來自 glGetErrors 的最常見結果的可讀輸出,并使用它來查找產生錯誤的行。另一種可能性是使用GLIntercept、BuGLe或gDEBugger之類的東西。
除了mentat 指出您可能對非二次冪紋理尺寸有問題之外,您還提到紋理名稱生成不會更改名稱。
這聽起來好像您調用glGenTextures()得太早了,即在初始化 OpenGL 之前。如果你不是,那么我建議在調用glGenTextures()檢查 OpenGL 錯誤狀態之后添加代碼,方法是調用glGetError().
?文章來源:簡單的 OpenGL 紋理貼圖不起作用?
總結
以上是生活随笔為你收集整理的简单的 OpenGL 纹理贴图不起作用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server的linux版命令行
- 下一篇: Silverlight4_Tools安装