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


Урок 9. Передвижение изображений в 3D - часть 7


{

        

// Очищаем буфер цвета и глубины

        

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        

// Выбираем нашу текстуру

        

glBindTexture(GL_TEXTURE_2D, texture[0]);


        

for (loop=0; loop<num; loop++)               // Цикл по всем звездам

        

{

                

// Обнуляем видовую матрицу (Model Matrix) перед каждой звездой

                

glLoadIdentity();

                

// Переносим по оси z на 'zoom'

                

glTranslatef(0.0f,0.0f,zoom);

                

// Вращаем вокруг оси x на угол 'tilt'

                

glRotatef(tilt,1.0f,0.0f,0.0f);

Теперь мы двигаем звезды! :) Звезда появляется в середине экрана. Первым делом мы вращаем сцену вокруг оси y. Если угол 90 градусов, то ось x будет лежать не слева направо, а наоборот и выходить за пределы экрана. В качестве примера: представьте, что вы стоите в центре комнаты. Теперь представьте, что слева на стене написано -x, впереди на стене написано -z, справа написано +x, в сзади написано +z. Если повернуться налево на 90 градусов, но не двигаться с места, то на стене впереди будет не -z, а -x. Все стены поменяются. -z будет справа, +z будет слева, -x впереди, и +x сзади. Проясняется? Вращая сцену, мы изменяем направления осей x и z.

Во второй строчке мы сдвигаем позицию по плоскости x. Обычно положительное значение по x двигает нас вправую сторону экрана (где обычно +x), но так как мы повернулись вокруг оси y, +x может быть хоть где. Если мы повернём на 180 градусов, +x будет с левой стороны экрана вместо правой. И так, когда мы двигаемся вперед по оси x, мы можем подвинуться влево, вправо, вперед и даже назад.

                // Поворачиваем на угол звезды вокруг оси y

                

glRotatef(star[loop].angle,0.0f,1.0f,0.0f);

                

// Двигаемся вперед по оси x

                

glTranslatef(star[loop].dist,0.0f,0.0f);

Теперь немного хитрого кода. Звезда это всего лишь плоская текстура. И если мы нарисовали плоский квадрат в середине экрана с наложенной текстурой - это будет выглядеть отлично. Он будет, повернут к вам, как и должен быть. Но если повернёте его вокруг оси y на 90 градусов, текстура будет направлена вправо или влево экрана. Всё что вы увидите это тонкую линию. Нам не нужно чтобы это случилось. Мы хотим, чтобы звезды были направлены на наблюдателя всё время, не важно как они вращаются и двигаются по экрану.




Начало  Назад  Вперед



Книжный магазин