Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Не прорисовывется объект после glLoadIdentity


Автор: x_byte 7.9.2007, 21:50
Осваиваю уроки от Nehe по OpenGL (http://www.pmg.org.ru/nehe/).
Проблема в уроке #4 (http://www.pmg.org.ru/nehe/nehe04.htm).
Там отрисованные треугольник и квадрат должны вращаться одновременно. Вот кусок кода:
Код

GLfloat rtri;           // Угол для треугольник
GLfloat rquad;          // Угол для четырехугольника 

....


glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();
  glTranslatef(-1.5f,0.0f,-6.0f);
  glRotatef(rtri,0.0f,1.0f,0.0f);         // Вращение треугольника по оси Y
  glBegin(GL_TRIANGLES);
    glColor3f(1.0f,0.0f,0.0f);      // Красный цвет
    glVertex3f( 0.0f, 1.0f, 0.0f);
    glColor3f(0.0f,1.0f,0.0f);      // Зеленный цвет
    glVertex3f(-1.0f,-1.0f, 0.0f);
    glColor3f(0.0f,0.0f,1.0f);      // Синий цвет
    glVertex3f( 1.0f,-1.0f, 0.0f);
  glEnd();
  
  glLoadIdentity();

  glTranslatef(3.0f,0.0f,0.0f);
  glRotatef(rquad,0.0f,1.0f,0.0f);        // Вращение по оси X
  glColor3f(0.5f,0.5f,1.0f);      // Установим синий цвет только один раз
  glBegin(GL_QUADS);
    glVertex3f(-1.0f, 1.0f, 0.0f);
    glVertex3f( 1.0f, 1.0f, 0.0f);
    glVertex3f( 1.0f,-1.0f, 0.0f);
    glVertex3f(-1.0f,-1.0f, 0.0f);
  glEnd();
  
  rtri+=0.5f;             // Увеличение переменной вращения для треугольника
  rquad+=0.2f;           // Уменьшение переменной вращения для квадрата


Собственно проблема заключается в том, что квадрат в таком случае не отрисовывается. Но если удалить вторую glLoadIdentity(), то и треугольник и квадрат отрисовываются и вращаются, но как сами понимате в одной координатной сетке, т.е. не достигается нужный эффект.
Процедуры glRotatef убирал, но квадрат при этом всё равно не отрисовывался.
Компилятор Dev_C++, испытывал и на Borland C++ Builder, результат одинаков.
В чём может быть проблема?

Автор: sgi1981 7.9.2007, 23:37
А почему треугольник отрисовывается с обходом противоположным обходу вершин квадрата ?
Дело в том что в OpenGL задается направление обхода вершин для скрытых поверхностей.

Автор: x_byte 8.9.2007, 08:18
Спасибо за ответ.
Но не помогло, отрисовывал по часовой, против часовой, но результат не изменился.
Да и почему тогда без второй процедуры glLoadIdentity() (которая идёт перед отриссовкой квадрата) обе фигуры отрысовываются нормально?

Автор: sgi1981 8.9.2007, 12:38
Квадрат находится за пределами наблюдаемого объема.
Попробуй изменить операторы так:
после второго вызова функции glLoadIdentity(), оператор будет таким

glTranslatef(3.0f, 0.0f, -4.0f);

Автор: x_byte 10.9.2007, 17:59
Большое спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)