2015-11-16 33 views
-1

这是代码。请帮助球员用土帮助OpenGL纹理加载需要

#include <GL/glut.h> 
#include <iostream> 
#include <math.h> 
#include "SOIL.h" 
using namespace std; 

GLuint texture[1]; 

int LoadGLTextures() 
{ 
    texture[0] = SOIL_load_OGL_texture 
     (
     "NeHe.bmp", 
     SOIL_LOAD_AUTO, 
     SOIL_CREATE_NEW_ID, 
     SOIL_FLAG_INVERT_Y 
     ); 

    if(texture[0] == 0) 
     return false; 


    glBindTexture(GL_TEXTURE_2D, texture[0]); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 

    return true; 
} 

void ChangeSize(int w, int h) 
{ 
    if(h == 0) 
    { 
     h = 1; 
    } 
    float ratio = 1.0f * w/h; 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glViewport(0,0,w,h); 
    gluPerspective(45,ratio,1,1000); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(0.0,0.0,6.0, 
       0.0,0.0,0.0, 
       0.0f,1.0f,0.0f); 
} 

void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glEnable(GL_TEXTURE_2D); 
    glBindTexture(GL_TEXTURE_2D, texture[0]); 

    glBegin(GL_QUADS); 

    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); 

    glEnd(); 

    glFlush(); 
} 

void idle(void) 
{ 
    glutPostRedisplay(); 
} 

int main(int argc, char *argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitWindowSize(640,480); 
    glutInitWindowPosition(10,10); 
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH); 
    glutCreateWindow("ZC"); 

    glutReshapeFunc(ChangeSize); 
    glutDisplayFunc(display); 
    glutIdleFunc(idle); 

    glEnable(GL_DEPTH_TEST); 

    glutMainLoop(); 
} 

我没有得到错误,但没有加载纹理。

+2

你能给我们一个最小的,完整的,可验证的例子吗?如果我们不能运行你的代码,我们可能找不到问题。请参阅此链接以获取更多详细信息:http://stackoverflow.com/help/mcve –

+0

这里是代码http://pastebin.com/tKvk7DXA – ZimCa

+0

我看到了显示功能。你能发布一个完整的程序吗? –

回答

0

您忘记了在主程序中调用LoadGLTextures。我用这个变化跑你的程序:

glEnable(GL_DEPTH_TEST); 

    LoadGLTextures(); //<-- added this 

    glutMainLoop(); 
} 

和事情工作正常。

我提供了我自己的NeHe.bmp文件,因为你没有链接到一个。如果您的.bmp文件在某些​​方面不好,它也可能会失败。

+0

是的,它的工作,ty男士 – ZimCa

+0

好的,请接受这个答案。 ...然后我可能会建议删除这个问题,因为它不太可能对其他人有用。 –