1

テクスチャを設定した後、テクスチャを適用する前は 20 fps であり、300 fps でした

私のコード:

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

ご覧のとおり、リソース ファイルからテクスチャを読み込みます。LoadTEX()メインの WINAPI ループを呼び出します。

2 つ目の問題は、テクスチャが少し透明であるため、背後の面から色を取得し、それ自体と混合することです。なんで?

4

1 に答える 1

3

メインの WINAPI ループで LoadTEX() を呼び出します。

これは、これをフレームごとに 1 回呼び出すことを意味すると想定しています。この場合、これがパフォーマンス低下の原因です。ループの前に一度テクスチャをロードしてから、フレームごとに描画する必要があります。

2 つ目の問題は、テクスチャが少し透明であるため、後ろの面から色を取り、それ自体と混合することです。

テクスチャをレンダリングするためのコードを見ないと、その理由を説明するのは困難です。glDisable(GL_BLEND) でブレンドを無効にすると、テクスチャは透明ではなくなります。

于 2013-08-28T13:03:10.010 に答える