簡單的 OpenGL 紋理貼圖不起作用?

問題

我正在嘗試找出 OpenGL 中的紋理映射,但我找不到一個簡單的例子來工作。

正在繪制多邊形,雖然它沒有紋理,而只是純色。此外,位圖也被正確加載到 sprite1[] 中,因為到目前為止我一直在成功使用 glDrawPixels。

我使用 glGenTextures 來獲取我的 tex 名稱,但我注意到它并沒有改變 texName1;?這個 GLuint 是我初始化它的任何東西,即使在調用 glGenTextures 之后……

我已啟用 GL_TEXTURE_2D。

繼承人的代碼:

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


更新:我不知所措。這是我嘗試過的所有內容:

原來我是在初始化 OGL 之前初始化我的紋理。紋理在類構造函數(shù)中初始化(glGenTextures->glTexImage2D)并在每幀調用的成員函數(shù)中繪制(glBegin->glEnd)。genTextures 現(xiàn)在似乎工作正常,我的名字是 1。

GL_RGBA8、GL_BGRA_EXT 的所有可能組合(GL_BGRA 在我的系統(tǒng)上不起作用;我需要 _EXT),我什至從位圖中刪除了 alpha 通道并嘗試了 GL_RGB、GL_BGR_EXT 等的所有組合。沒有運氣。

嘗試以程序方式創(chuàng)建位圖并使用它

確保 GL_COLOR_MATERIAL 未啟用。

將位圖大小更改為 32×32。

嘗試了 glTexEnvi 而不是 glTexEnvf。

解決方法

要檢查的第一件事是顏色材料設置,如 ShadowIce 所述,然后檢查您的紋理文件以確保其大小合理(例如 256×256)和 RGB 位圖。如果文件有輕微的問題,無論您如何嘗試,它都不會正確呈現(xiàn)。

然后,我將停止嘗試僅調試該代碼,而是查看您與 NeHe 網(wǎng)站上的教程有什么不同。

NeHe 始終是檢查您是否嘗試在 OpenGL 中做事的好地方。紋理可能是最難做到的事情,而且隨著你其他 GL 技能的提高,它們只會變得更加困難。

我的 OpenGL 生銹了,但我記得與glTexImage2D

.?最后我設法讓它工作,但我總是有更多的運氣,gluBuild2DMipmaps

所以我最終得到了

<span style="color:#333333"><span style="background-color:#ffffff"><code class="language-cpp">gluBuild2DMipmaps (

? GL_TEXTURE_2D, type, i.width, i.height, type, GL_UNSIGNED_BYTE, i.data

);

</code></span></span>

取代

<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

);


一些隨機的想法:

GL_COLOR_MATERIAL 可能已啟用

將“glTexEnvf”更改為“glTexEnvi”,看看是否有幫助

如果在 glGenTextures 之后 texName1 為 0,您可能沒有活動的 OpenGL 上下文

對于錯誤檢查,我建議編寫一個小函數(shù),打印來自 glGetErrors 的最常見結果的可讀輸出,并使用它來查找產(chǎn)生錯誤的行。另一種可能性是使用GLIntercept、BuGLe或gDEBugger之類的東西。

除了mentat 指出您可能對非二次冪紋理尺寸有問題之外,您還提到紋理名稱生成不會更改名稱。

這聽起來好像您調用glGenTextures()得太早了,即在初始化 OpenGL 之前。如果你不是,那么我建議在調用glGenTextures()檢查 OpenGL 錯誤狀態(tài)之后添加代碼,方法是調用glGetError().

文章來源:簡單的 OpenGL 紋理貼圖不起作用?

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容