2013-08-28 47 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)并且您的纹理将不再透明。