2013-01-08 219 views
1

我嘗試了很多使用SOIL在openGL中加載和顯示圖像的例子。在運行下面的源代碼時,它顯示的只是一個沒有圖像的四核心組件。 我試圖打開一個名爲:foto的圖像。 我將圖像文件放入程序的文件夾中。使用openGL,圖像加載圖像

bool* keyStates = new bool[256]; 
GLuint texture[0]; 

void resize(int height, int width) { 
    const float ar = (float) width/(float) height; 
    glViewport(0, 10, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 90.0); 
    //gluLookAt(0, 2, 0, -1, 1, -3, 0, 1, 0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity() ; 
} 
void keyOperations (void) { 
    if (!keyStates['a']) {} 
} 
static void Draw(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(0.0f,0.0f,-5.0f); 
    texture[0] = SOIL_load_OGL_texture // load an image file directly as a new OpenGL texture 
    (
     "foto.png", 
     SOIL_LOAD_AUTO, 
     SOIL_CREATE_NEW_ID, 
     SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT 
    ); 
// allocate a texture name 

    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(); 
    glutSwapBuffers(); 
} 
void keyPressed (unsigned char key, int x, int y) { 
    keyStates[key] = false; 
} 
void keyUp (unsigned char key, int x, int y) { 
    keyStates[key] = true; 
} 
int main(int argc, char **argv) 
{ 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInit(&argc, argv); 
    glutInitWindowSize(600, 600); 
    glutCreateWindow("ugh fml"); 
    glutReshapeFunc(resize); 
    glutDisplayFunc(Draw); 
    glutKeyboardFunc(keyPressed); 
    glutKeyboardUpFunc(keyUp); 
    ///////////////////////////////////// 
    glEnable(GL_TEXTURE_2D); 
    glShadeModel(GL_SMOOTH); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); 
    glClearDepth(1.0f); 
    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    glutMainLoop(); 
} 
+1

在SOIL_load_OGL_texture()調用之後'texture [0]'是否爲非零?如果*是*零,那麼'SOIL_last_result()'返回什麼? – genpfault

+0

當我放入:cout << SOIL_LAST_RESULT()後紋理加載它說無法加載文件,但我的圖像是PNG格式,並在項目的文件夾或我必須做一些特殊的圖像? – abcdef

+2

另請注意,紋理數組的長度爲零。 – Plow

回答

2

您正在使用相對路徑來訪問foto.png

確保您的working directory是您期望的地方。

一些IDE喜歡將工作目錄更改爲某個地方其他比可執行文件的位置。

+0

謝謝,我四處尋找這個,你需要一個特殊的庫,爲那些正確設置目錄的功能? – abcdef

+1

查看'chdir()',但修復IDE配置會更容易。 – genpfault