簡體   English   中英

OpenGL紋理不顯示

[英]Opengl texture not showing

我試圖在opengl中顯示一個簡單的紋理(來自數組),但是我只得到了一個空白的白色屏幕。

我的代碼生成紋理:

GLbyte textureData[] = { 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255 };
GLsizei width = 2;
GLsizei height = 2;


glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glGenTextures(1, &textureName);   
glBindTexture(GL_TEXTURE_2D, textureName); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_UNSIGNED_BYTE, GL_RGB8, (GLvoid*)textureData);

並顯示代碼:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureName);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, -1.0);

glTexCoord2f(1.0, 0.0);
glVertex2f(1.0, -1.0);

glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0, 1.0);

glTexCoord2f(1.0, 1.0);
glVertex2f(1.0, 1.0);
glEnd();

glutSwapBuffers();

我知道問題出在紋理上,因為我可以在屏幕上繪制實心形狀。

默認縮小過濾設置為使用mipmap。 由於您沒有提供所有降低到1×1的mipmap級別,並且沒有切換到不需要mipmapping的過濾器方法,因此將跳過紋理采樣。

您必須將設置filter方法添加到未映射的對象中,如下所示:

glTexImage2D(…);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

或提供完整的圖像級別堆棧。

由於評論而更新

glTexImage2D調用也存在問題: GL_RGB8不是該數據格式的有效標記。 顯式大小的格式令牌僅允許用於內部格式。 但是,對於初學者而言,您可能仍應使用未調整大小的標記(僅使用GL_RGB而不使用8 )(顯式大小僅在確實重要時才使用,例如,出於某些精度要求或避免流紋理更新的轉換成本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM