Текстуры загружаются неправильно? - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь показать некоторые текстуры в моей программе, и у меня есть этот код, который используется для загрузки растровых изображений в текстуры openGL:

void LoadGLTextures()
{
  // Bitmap handle and structure
  HBITMAP hBMP;
  BITMAP  BMP;

  // Generate list of textures from resources
  byte Texture[] = {IDB_FONT, IDB_SKIN, IDB_PIANO};
  glGenTextures(sizeof(Texture), &texture[0]);

   // Iterate through texture list and load bitmaps
  for (int loop=0; loop<sizeof(Texture); loop++)
  {
    hBMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(Texture[loop]),
                          IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
    if (hBMP)
    {
     GetObject(hBMP,sizeof(BMP), &BMP);
     glPixelStorei(GL_UNPACK_ALIGNMENT,4);
     glBindTexture(GL_TEXTURE_2D, texture[loop]);
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);

  // Generate Mipmapped Texture (3 Bytes, Width, Height And Data From The BMP)
     gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
     DeleteObject(hBMP);
    }
  }

И пока мой фоновый скин загружается и отображается правильно, другой(фортепиано) текстура не прорисовывается.Я уверен, что код рисования правильный, потому что когда я меняю, какая текстура используется (от пианино до фоновой текстуры, в данном случае), другая текстура рисуется.Поэтому я думаю, что растровое изображение загружается неправильно.Но я не уверен, почему?Есть ли что-то явно очевидное, что я упустил из виду?

Растровое изображение имеет 128 * 256 и 24-битный цвет.

Если вам нужен какой-либо другой код, пожалуйста, дайте мне знать.

edit - Если кто-нибудь знает какие-либо библиотеки, которые будут делать то, что мне нужно, пожалуйста, дайте мне знать

1 Ответ

0 голосов
/ 09 января 2012

Возможно, он работает неправильно, потому что устарел.

С http://www.opengl.org/wiki/Common_Mistakes:

gluBuild2DMipmaps - Никогда не используйте это. Используйте либо GL_GENERATE_MIPMAP (требуется GL 1.4), либо функцию glGenerateMipmap (требуется GL 3.0).

Редактировать: Также вам, вероятно, нужно вызвать glEnable (GL_TEXTURE_2D) для КАЖДОГО текстурного блока, то есть внутри цикла, где вы вызываете glBindTexture.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...