2013-08-28 31 views
0

白盒我有我使用的顯示質感以下:OpenGL的顯示,而不是質地

glEnable (GL_BLEND); 
glEnable(GL_TEXTURE_2D); 
     glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR); 
     glGenTextures(1, tex); 
    glBindTexture (GL_TEXTURE_2D, *tex); 
     glBegin (GL_QUADS); 
     glTexCoord2f (tx, ty); 
     glVertex2f (sx, sy); 
     glTexCoord2f (tw, ty); 
     glVertex2f (sx + sxmax, sy); 
     glTexCoord2f (tw, th); 
     glVertex2f (sx + sxmax, sy + symax); 
     glTexCoord2f (tx, th); 
     glVertex2f (sx, sy + symax); 
     glEnd(); 
     glDisable (GL_TEXTURE_2D); 
     glDisable (GL_BLEND); 

我使用加載紋理如下:

GLuint GetTexture(string Filename) 
    { 
     GLuint tex_ID; 

     tex_ID = SOIL_load_OGL_texture(
        Filename.c_str(), 
        SOIL_LOAD_AUTO, 
        SOIL_CREATE_NEW_ID, 
        SOIL_FLAG_POWER_OF_TWO 
        | SOIL_FLAG_MIPMAPS 
        | SOIL_FLAG_MULTIPLY_ALPHA 
        | SOIL_FLAG_COMPRESS_TO_DXT 
        | SOIL_FLAG_DDS_LOAD_DIRECT 
        | SOIL_FLAG_INVERT_Y 
       ); 

     if(tex_ID > 0) 
     { 

      glEnable(GL_TEXTURE_2D); 

      glBindTexture(GL_TEXTURE_2D, tex_ID); 

      return tex_ID; 
     } 
     else 
     { 
      cout<<"Texture failed to load"<<SOIL_last_result()<<Filename<<endl; 
      return 0; 
     } 
    } 

,並通過引用傳遞到一個類

當我運行檢查,看看是否正確加載的紋理:

if(tex==0) 

是。此外,每當我運行glColor3f();與一些值時,屏幕上不顯示任何內容。 我做錯了什麼?

我使用glfw和SOIL來加載/顯示紋理。

+0

嘗試做小步驟:首先加載紋理並嘗試渲染它(不啓用blening),然後添加混合。使用以下標誌加載紋理:SOIL_FLAG_INVERT_Y(僅一個標誌,僅用於測試)。如果你有工作紋理,然後嘗試添加混合... – fen

+0

你有沒有在第一幀後重新'glEnable(GL_TEXTURE_2D)'? – genpfault

+0

第一個代碼塊中的「tex」類型是什麼? – genpfault

回答

3
glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR); 
glGenTextures(1, tex); 
^^^^^^^^^^^^^^^^^^^^^ I hope tex didn't have anything important in it... 
glBindTexture (GL_TEXTURE_2D, *tex); 
glBegin (GL_QUADS); 
.... 

你生成一個全新的質地每一幀。這也恰好是incomplete

生成紋理一旦並使用它。