2013-08-28 87 views
0

時,低幀率設置紋理之後有aplying紋理之前20fps的是300fps的Opengl:使用紋理

我的代碼:

void LoadTEX() 
{ 
    GLuint texture; 
    HBITMAP GLtex; 
    BITMAP tex; 
    byte  Texture=TEX; 

    glGenTextures(sizeof(Texture), &texture); 
    GLtex= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(Texture), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); 

    GetObject(GLtex,sizeof(tex), &tex); 
    glPixelStorei(GL_UNPACK_ALIGNMENT,4);   
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);  
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, tex.bmWidth, tex.bmHeight, GL_RGB, GL_UNSIGNED_BYTE, tex.bmBits); 
    DeleteObject(GLtex); 
} 

,你可以看到我從我的resourcs文件加載紋理。我在我的主WINAPI循環中調用LoadTEX()

第二個問題是紋理是有點透明的,所以它從背後的臉上取得顏色並將其與自身混合。爲什麼?

+1

http://www.opengl.org/wiki/Common_Mistakes#gluBuild2DMipmaps < - gluBuild2DMipmaps相當陳舊 – jozxyqk

+0

我該如何使用它?我曾嘗試過:'glBindTexture(GL_TEXTURE_2D,texture);'然後'glEnable(GL_TEXTURE_2D);'和finaly:'glGenerateMipmap(GL_TEXTURE_2D);'代碼編譯但沒有顯示窗口。 – NightKn8

+0

glEnable(GL_TEXTURE_2D)僅用於固定管線渲染afaik,直到您需要紋理映射您的繪圖並且不使用着色器時才需要。您需要先使用glTexImage2D將紋理數據發送到OpenGL,然後調用glGenerateMipmap。確保你有一個合適的mipmapping過濾器集(也有GL_LINEAR_MIPMAP_LINEAR)。你可能也想看看各向異性過濾。 – jozxyqk

回答

3

我在我的主WINAPI循環中調用LoadTEX()。

我假設這意味着您每幀調用一次,在這種情況下,這是您的性能下降的原因。您應該在循環之前加載紋理一次,然後在每一幀中繪製它。

的第二個問題是,質地有點透明的,因此它需要從後面臉上的顏色,並與自身

混頻,沒有看到你的代碼渲染紋理這是很難說爲什麼。禁用與glDisable混合(GL_BLEND)並且您的紋理將不再透明。