На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Отражение с помощью кубических текстур , В OpenGL.Не работает...
    Пытаюсь по аналогии с http://www.gamedev.ru/code/articles/?id=4172 сделать отражение комнаты на сферу с помощбю кубических текстур.и что-то никак не получается.в чем можеь быть дело?

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

    ExpandedWrap disabled
      void Init()
      {
          glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f );
          glHint       ( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
          glShadeModel(GL_SMOOTH);
          glEnable(GL_DEPTH_TEST);
       
          CubeMapTarget[0] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT;
          CubeMapTarget[1] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT;
          CubeMapTarget[2] = GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT;
          CubeMapTarget[3] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT;
          CubeMapTarget[4] = GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT;
          CubeMapTarget[5] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT;
          
          glEnable        ( GL_TEXTURE_CUBE_MAP_EXT );
          glGenTextures   ( 1, &texCubeMap );
          glPixelStorei       ( GL_UNPACK_ALIGNMENT, 1 );
          glBindTexture   ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap );
       
          glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_S, GL_REPEAT );
          glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_T, GL_REPEAT );
          glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_R, GL_REPEAT );
       
          glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
          glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
          for ( int i = 0; i < 6; i++ )
          {
              glTexImage2D  ( CubeMapTarget[i], 0, GL_RGB, CUBEMAP_SIZE, CUBEMAP_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
          }
          glDisable ( GL_TEXTURE_CUBE_MAP_EXT);
          
      }
       
      void CreateCubemap()
      {
          glViewport   ( CUBEMAP_OFFSET, CUBEMAP_OFFSET, CUBEMAP_SIZE, CUBEMAP_SIZE );
          glMatrixMode ( GL_PROJECTION );
          glLoadIdentity();
          gluPerspective ( 90.0, 1.0, 1.5, 100.0 );
          glMatrixMode ( GL_MODELVIEW );
          glEnable ( GL_TEXTURE_2D );
       
          for ( int i = 0; i < 6; i++ )
          {
              glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
              glLoadIdentity();
              switch(i)
              {
                  case 0:
                      gluLookAt(0,0,0,1,0,0,0,1,0);
                      break;
                  case 1:
                      gluLookAt(0,0,0,-1,0,0,0,1,0);
                      break;
                  case 2:
                      gluLookAt(0,0,0,0,1,0,0,0,1);
                      break;
                  case 3:
                      gluLookAt(0,0,0,0,-1,0,0,0,1);
                      break;
                  case 4:
                      gluLookAt(0,0,0,0,0,1,0,1,0);
                      break;
                  case 5:
                      gluLookAt(0,0,0,0,0,-1,0,1,0);
                      break;
       
              }
              RenderObjects();
              glEnable      ( GL_TEXTURE_CUBE_MAP_EXT);
              glBindTexture ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap );
              glCopyTexSubImage2D ( CubeMapTarget[i], 0, 0, 0,
                  CUBEMAP_OFFSET, CUBEMAP_OFFSET, CUBEMAP_SIZE, CUBEMAP_SIZE );
              glDisable ( GL_TEXTURE_CUBE_MAP_EXT );
          }
       
          glDisable ( GL_TEXTURE_2D );
          reshape   ( ViewWidth, ViewHeight );
      }
       
      void RenderSphere()
      {
          float m1[16],m2[16];
          glGetFloatv ( GL_MODELVIEW_MATRIX, m1 );
          transpose   ( m1, m2 );
       
          glEnable  ( GL_TEXTURE_CUBE_MAP_EXT );
          glTexGeni ( GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT );
          glTexGeni ( GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT );
          glTexGeni ( GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT );
          glEnable  ( GL_TEXTURE_GEN_S );
          glEnable  ( GL_TEXTURE_GEN_T );
          glEnable  ( GL_TEXTURE_GEN_R );
          glBindTexture ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap );
          glPushMatrix();
              glMatrixMode ( GL_TEXTURE );
              glPushMatrix();
                  glLoadMatrixf ( m2 );
                  glColor3f(1.0,0.0,0.0);
                  glutSolidSphere ( 0.5f, 64.0f, 64.0f );
              glPopMatrix();
              glMatrixMode ( GL_MODELVIEW );
          glPopMatrix();
          glDisable ( GL_TEXTURE_GEN_S );
          glDisable ( GL_TEXTURE_GEN_T );
          glDisable ( GL_TEXTURE_GEN_R );
          glDisable ( GL_TEXTURE_CUBE_MAP_EXT );
      }
       
      void Draw()
      {
          CreateCubemap();
       
          glViewport ( 0, 0, ViewWidth, ViewHeight );
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          gluPerspective ( 60.0, (double)ViewWidth/(double)ViewHeight, 1.0, 1000.0 );
          glMatrixMode (GL_MODELVIEW);
          glLoadIdentity();
       
          gluLookAt(viewer_params[0],viewer_params[1],viewer_params[2],
                viewer_params[3],viewer_params[4],viewer_params[5],
                viewer_params[6],viewer_params[7],viewer_params[8]);
       
          glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
       
          RenderSphere();
          RenderObjects();
       
          glFlush();
          glutSwapBuffers();
      }
    Сообщение отредактировано: Orlie -
      Скорей всего дело в том, что ты не генерируешь mipmap level, а при рисовании сферы должна использоваться текстура, которой у тебя нет. Поэтому либо сгенерируй все уровни (glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP, GL_TRUE ), либо поменяй в Init-е GL_LINEAR_MIPMAP_LINEAR на GL_LINEAR.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0245 ]   [ 15 queries used ]   [ Generated: 2.05.24, 13:29 GMT ]