2015-11-16 40 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

好的,請接受這個答案。 ...然後我可能會建議刪除這個問題,因爲它不太可能對其他人有用。 –