我正在嘗試使用即時模式紋理來構建一個簡單的項目。 不幸的是,當我渲染時,GL顏色顯示出來而不是紋理。我搜索瞭解決方案,但發現在線示例和我的代碼之間沒有任何有意義的區別。OpenGL即時模式紋理不起作用
我已經將它減少到一個最小的失敗的例子,我已經在這裏提供了。如果我的理解是正確的,這應該會產生一個帶有黑色,紅色,綠色和藍色角落的紋理四邊形。不幸的是,它看起來是紫色的,就好像它完全忽略了紋理。我究竟做錯了什麼?
#include <glut.h>
GLuint tex;
void displayFunc() {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(0.5, 0, 1);
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();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(0, 0);
glutInitWindowSize(640, 480);
glutCreateWindow("Test");
glutDisplayFunc(displayFunc);
GLubyte textureData[] = { 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, 0 };
GLsizei width = 2;
GLsizei height = 2;
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, (GLvoid*)textureData);
glutMainLoop();
}
而且可能值得一提:
我建立在Mac(運行埃爾卡皮坦10.11.1)這個項目
顯卡:NVIDIA的GeForce GT 650M 1024 MB
除了Reti Koradi的回答,你的紋理也不是mipmap-complete。您應該通過'glTexParameteri'將紋理縮小過濾器明確設置爲「GL_LINEAR」或「GL_NEAREST」。 – derhass
@derhass謝謝!我需要這兩個和Reti Koradi的答案來解決它。 –