c++ - OpenGL 纹理无法正确加载

标签 c++ opengl graphics textures texture2d

我在 OSX 10.10.5 上使用 Xcode 7.0,当我尝试在正方形上绘制纹理时,我得到了一个非常奇怪的结果:

enter image description here

我要绘制的图像是:

enter image description here

我找了好久都没找到类似的东西。这是我用来绘制纹理/四边形的代码:

TI = new SDL_Surface *[1];
TI[0] = IMG_Load ("media/dragonite.png");
texture = new GLuint[1];
glGenTextures (1,&texture[0]);
glBindTexture (GL_TEXTURE_2D,texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,TI[0]->w,TI[0]->h,0,GL_BGR,GL_UNSIGNED_BYTE,TI[0]->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
SDL_FreeSurface (TI[0]);
delete[] TI;
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

rtri = rquad = 0;
SDL_Event e;

while (true) {
    if (SDL_PollEvent(&e)) {
        if (e.type == SDL_QUIT)
            break;
    }

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1, 1, 1);
    glLoadIdentity();
    glTranslatef(0, 0, SCREEN_ZOOM);
    glRotatef(rquad, 3, 0.5, 1);

    glBegin (GL_QUADS);
    glTexCoord2f(0,0);glVertex3f (1,1,0);
    glTexCoord2f(1,0);glVertex3f (-1,1,0);
    glTexCoord2f(1,1);glVertex3f (-1,-1,0);
    glTexCoord2f(0,1);glVertex3f (1,-1,0);
    glEnd ();

    //rquad -= 0.35;
    SDL_GL_SwapWindow (w);

}

感谢任何帮助。谢谢。

最佳答案

glTexImage2D 的第三个参数是internalFormat。使用枚举而不是魔数(Magic Number) 3。尝试使用 GL_RGB。

我能够在自己的渲染器中正确显示该纹理。参数 format 也应为 GL_RGB 或 GL_RGBA。

我推荐查看和 OpenGL 文档:http://docs.gl/gl4/glTexImage2D

关于c++ - OpenGL 纹理无法正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764926/

相关文章:

c++ - 使用 GLUT 在 3D OpenGL 世界中显示固定位置的 2D 文本

java 图形 paintComponent

c++ - QTreeWidget可以跳转到特定行(由QTreeWidgetItem或列指定)吗?

c++ - 从文件读取时如何从行中单独读取每个数字

c++ - STL map.find 在使用 vs2010 的调试和发布中表现不同

graphics - 旋转的非线性优化

java - 我想用鼠标拖动图像来移动矩形,代码有什么问题

c++ - 使用一个图像阈值另一个

c++ - GL_MULTISAMPLE 在哪里定义?

c++ - 如何从 GLUT 坐标转换为窗口坐标