【问题标题】:Opengl: low fps when using textureOpengl:使用纹理时fps低
【发布时间】:2013-08-31 13:23:16
【问题描述】:

设置纹理后有 20fps,然后应用纹理为 300fps

我的代码:

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);  
}

如您所见,我从资源文件中加载了纹理。我在主 WINAPI 循环中调用 LoadTEX()

第二个问题是纹理有点透明,所以它从后面的脸上取颜色并与自己混合。为什么?

【问题讨论】:

  • 如何使用它?我试过:glBindTexture( GL_TEXTURE_2D, texture ); 然后glEnable(GL_TEXTURE_2D); 和finaly:glGenerateMipmap(GL_TEXTURE_2D); 代码编译但没有显示窗口。
  • glEnable(GL_TEXTURE_2D) 仅用于固定管道渲染 afaik,直到您想要在绘图上进行纹理映射并且不使用着色器时才需要。您需要先使用 glTexImage2D 将纹理数据发送到 OpenGL,然后调用 glGenerateMipmap。确保您有适当的 mipmapping 过滤器集(还有 GL_LINEAR_MIPMAP_LINEAR)。您可能还想看看各向异性过滤。

标签: opengl textures render texture-mapping texture2d


【解决方案1】:

我在主 WINAPI 循环中调用 LoadTEX()。

我假设这意味着您每帧调用一次,在这种情况下,这就是您的性能下降的原因。您应该在循环之前加载一次纹理,然后在每一帧中绘制它。

第二个问题是纹理有点透明所以它从后面取颜色并与自己混合

如果没有看到用于渲染纹理的代码,很难说出原因。使用 glDisable(GL_BLEND) 禁用混合,您的纹理将不再透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多