Создание текстуры из сохраненного изображения В OpenGL отсутствует поддержка чтения файла изображения и создания в памяти пиксельной карты. Метод readBMPFileO, приведенный в приложении В, предлагает простой способ чтения ВМР-нзображе-ния в пиксельную карту. Например, оператор

pi х[1].readBMPFi1е("mandri11.bmp"); читает файл mandrill .bmp и создает пиксельную карту в элементе pix[l].

После создания пиксельной карты метод pix[l].setTexture() используется для передачи этой карты в OpenGL для создания текстуры.

Кроме того, отображение текстур должно происходить посредством вызова glEnable(GL_TEXTURE_2D). В дополнение к этому подпрограмма gl Hint (GL_PERSPECTIVE_C0RRECTI0N_HINT. 6LNICEST) используется для запроса о том, правильно ли OpenGL визуализирует данную текстуру (с применением гиперболической интерполяции), чтобы она была хорошо прикреплена к граням даже в тех случаях, если грань при анимации поворачивается по отношению к наблюдателю.

Создание текстуры, ее запуск и связывание требуется выполнить только один раз, в подпрограмме инициализации. Затем эта текстура применяется всякий раз, когда вызывается подпрограмма отображения. В подпрограмме display О куб поворачивается на углы xAngle иуАпдТе, после чего рисуется шесть

1 Во избежание совпадения (целых) имен в тех приложениях, где используется много текстур, лучше всего позволить OpenGL присваивать текстурам уникальные имена с помощью функции glGenTexturesO. Если нам требуется шесть уникальных имен, мы можем создать массив GLuint name[6] для хранения этих имен и затем вызвать glGenTextures(6, name). OpenGL помещает шесть

не использованных ранее целых чисел в элементы массива name[0]..... name[5], после чего в дальнейшем можно ссылаться на i-ю текстуру по имени name[i].

Визуализация граней для усиления реалистичности

граней этого куба. Для этого требуется только, чтобы соответствующая текстура была прикреплена к грани и чтобы между операторными скобками glBeginO и glEndO были заданы текстурные координаты и трехмерные координаты вершин грани, как это показано в вышеприведенном коде.


⇐ Предыдущая| |Следующая ⇒