Народный учебник по OpenGL



Урок 4. Вращение полигонов - часть 3


        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(). Мы сделаем это для инициализации просмотра. Что будет если мы не сбросим просмотр? Если мы сдвинули объект после вращения, Вы получите очень неожиданные результаты. Поскольку оси вращаются, они будут указывать не в тех направлениях, о каких Вы думаете. Поэтому если мы сдвинулись влево по оси X (для установки треугольника), мы можем переместить квадрат в глубь экрана или вперед, в зависимости от того как много мы вращали по оси Y. Попробуйте убрать glLoadIdentity() и вы поймете о чем я говорю. Квадрат будет вращаться вокруг своей оси X, но и вокруг центра координат синхронно вращению треугольника.

Так как сцена сброшена, поэтому X идет слева направо, Y сверху вниз, Z от нас и далее. Теперь мы перемещаем. Как Вы видите мы сдвигаем на 1.5 вправо, вместо 3.0, как мы делали в последнем уроке. Когда мы сбрасываем экран, наш фокус перемещается в центр экрана, это означает, что мы находимся не 1.5 единицы слева, мы вернулись в 0.0. Поэтому мы не должны сдвигаться на 3.0 единицы вправо (если бы не было сброса), мы должны только сдвинуться от центра вправо на 1.5 единицы.

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

        glLoadIdentity();

        

glTranslatef(1.5f,0.0f,-6.0f);          // Сдвиг вправо на 1.5

        

glRotatef(rquad,1.0f,0.0f,0.0f);        // Вращение по оси X




Содержание  Назад  Вперед