Размеры текстуры OpenGL CubeMap - PullRequest
       45

Размеры текстуры OpenGL CubeMap

0 голосов
/ 20 сентября 2010

alt text После всех выходных я наконец-то получил сферу, отражающую ее среду в OpenGL.Это выглядит почти хорошо.Проблема в том, что некоторые функции не совпадают.Я не могу найти много информации по теме отображения сферы OpenGL, за исключением двухстраничного раздела в Красной книге и нескольких разбросанных и в основном незаконченных тем на форуме.Не уверен, что это необходимо, но я включил свой код, где я загружаю текстуры.После проб и ошибок я обнаружил, что наличие симметричных размеров от 0 до 512 дает наилучшие результаты, но они все еще не идеальны (и размеры должны быть степенью двойки, или он падает).Кто-нибудь знает какие-либо стратегии, чтобы получить текстуры, которые выстраиваются более правильно?

void loadCubemapTextures(){

  glGenTextures(1, &cubemap);
  glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

  glDrawBuffer(GL_AUX1);
  glReadBuffer(GL_AUX1);

  glMatrixMode(GL_MODELVIEW);

  //Generate cube map textures
  for(int i = 0; i < 6; i++){

      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();
      //Viewing Transformation
      gluLookAt(pos[0], pos[1], pos[2],
           view_pos[i][0], view_pos[i][1], view_pos[i][2],
         top[i][0], top[i][1], top[i][2]);

      glMatrixMode(GL_PROJECTION);
      glLoadIdentity(); 
      gluPerspective(90.0, 1.0, cubemapRadius + 1, 200.0);
      glMatrixMode(GL_MODELVIEW);

      render();

      glCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, 0, 0, 256, 256, 0);
  }

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Вашим стенам не хватает функций, чтобы прояснить их ориентацию и местоположение, но я бы поспорил, что это проблема.

Значения, которые есть в view_pos и top, определяют их.Среди вещей, которые выглядят подозрительно:

  • черный цвет у основания шерифа исходит от лица, запечатлевшего вид спереди.Она должна быть сверху (то есть она либо перевернута, либо повернута на 180 градусов).
  • аналогично, черный цвет, исходящий из задней части обзора (в центре сферы), выглядит повернутым на четвертькруг (так как черный идет слева, а не сверху).
  • отражение сферы карты выглядит странно.Ему не хватает разрешения, чтобы точно понять, что это такое.

В любом случае, чтобы исправить это, вы можете либо убедиться, что ваши значения соответствуют ожиданиям в правильном определении карты куба (как при проверке всехили просто сделайте кучу проб и ошибок, добавив достаточно геометрии, чтобы выяснить, какова ориентация каждой грани.

0 голосов
/ 21 сентября 2010

Проблема не имеет ничего общего с координатами, хотя спасибо за ввод.Я забыл установить матрицу представления ... простой вызов gluViewport внутри цикла for исправил это для меня.

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