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


Урок 10. Загрузка и перемещение в трехмерном мире - часть 4


            // Считать данные в соответствующие переменные вершин

            sscanf(oneline, "%f %f %f %f %f", &x, &y, &z, &u, &v);

            // Сохранить эти данные

            sector1.triangle[triloop].vertex[vertloop].x = x;

        // Сектор 1, Треугольник  triloop, Вершина vertloop, Значение x = x

            sector1.triangle[triloop].vertex[vertloop].y = y;

       // Сектор 1, Треугольник  triloop, Вершина vertloop, Значение y = y

            sector1.triangle[triloop].vertex[vertloop].z = z;

        // Сектор 1, Треугольник  triloop, Вершина vertloop, Значение z = z

            sector1.triangle[triloop].vertex[vertloop].u = u;

        // Сектор 1, Треугольник  triloop, Вершина vertloop, Значение u = u

            sector1.triangle[triloop].vertex[vertloop].v = v;

        // Сектор 1, Треугольник  triloop, Вершина vertloop, Значение y = v

      }

}

 

Каждый треугольник в нашем файле данных имеет следующую структуру:

 

X1 Y1 Z1 U1 V1

X2 Y2 Z2 U2 V2

X3 Y3 Z3 U3 V3

Отображение миров

Теперь, когда мы можем загружать наш сектор в память, нам нужно вывести его на экран. Итак, мы уже умеем делать немного простых вращений и проекций, но наша камера всегда находилась в начальном положении (0, 0, 0). Любой хороший 3D движок должен предоставлять пользователю возможность ходить и исследовать мир, так мы и сделаем. Одна из возможностей сделать это – перемещать камеру и перерисовывать 3D среду относительно её положения. Это медленно выполняется и тяжело запрограммировать. Поэтому мы будем делать так:

 

1)      Вращать и проецировать позицию камеры следуя командам пользователя.

2)      Вращать мир вокруг начала координат противоположно вращению камеры (это даёт иллюзию того, что повернулась камера).

3)      Переместить мир способом, противоположным перемещению камеры (опять-таки, это даёт иллюзию того, что переместилась камера).




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



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