日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的 OpenGL 纹理贴图不起作用?

發布時間:2024/8/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的 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">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 );</code></span></span>

    ?

    一些隨機的想法:

    • GL_COLOR_MATERIAL 可能已啟用
    • 將“glTexEnvf”更改為“glTexEnvi”,看看是否有幫助
    • 如果在 glGenTextures 之后 texName1 為 0,您可能沒有活動的 OpenGL 上下文

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

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

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

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

    總結

    以上是生活随笔為你收集整理的简单的 OpenGL 纹理贴图不起作用?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。