ВУЗ:
Составители:
Основы компьютерной графики для программистов 89
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE,
GL_LUMINANCE_ALPHA.
Предпоследний, восьмой параметр определяет значение
типа данных для каждой пиксельной компоненты:
GL_UNSIGNED_BYTE, GL_BYTE,
GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT,
GL_FLOAT
. Последний параметр представляет собой указатель на начало области
данных текстуры. В нашем случае это переменная
bits, описана как указатель на массив
байт. Возможно, вас смутил тип данных
TBits = Array [0..0] of GLUbyte;
Действительно, такое описание выглядит как ошибка в программе. Однако, это сделано
специально. Данная функция должна компилироваться с выключенной опцией на
проверку допустимых диапазонов {$R-}. Тогда блок памяти
bits в программе мы можем
рассматривать как массив байт произвольной длины, и использовать обычный
синтаксис Object Pascal для доступа к его элементам. Конечно, контроль выхода за
пределы области памяти такого массива мы должны полностью брать на себя.
После загрузки образа текстуры в память следует указать грань или грани трехмерных
объектов, на которые будет
осуществляться наложение текстуры. Здесь мы подходим к
определению
координат текстуры. Необходимо установить соответствие между
вершинами граней трехмерного объекта и местом на текстуре, которое каждой вершине
соответствует. Начало системы координат текстуры расположено в левом нижнем углу
прямоугольного рисунка текстуры. Ось s, подобно оси абсцисс направлена слева
направо по нижней кромке рисунка, а ось t, аналогично оси ординат направлена снизу
вверх. Границы прямоугольника изображения
текстуры задают диапазон изменения
значений координат
s и t от 0 до 1.
Рассмотрим пример создания прямоугольника в трехмерном пространстве и наложение
на него изображения корабля из файла
Ship.bmp размером 64х64 пиксела. Здесь
используется возможность создания так называемых
дисплейных списков OpenGL,
которые позволяют объединить длинные последовательности команд OpenGL под
одним названием и запускать их на выполнение. Дисплейные списки позволяют между
командами OpenGL выполнять и другие операторы, но, в отличие от обычных
процедур и функций, запоминаются в списке только команды OpenGL. При
последующем выполнении команд дисплейного списка обычные операторы не
выполняются.
Const
Quad: GLInt=1;//идентификатор дисплейного списка
Ship: pointer;
. . .
glNewList(Quad,GL_COMPILE);//создаем новый дисплейный список
Ship:= LoadBmpTexture(64,64,'Ship.bmp');//загружаем текстуру в
//память
glBegin (GL_QUADS);//задаем тип примитива - четырехугольники
glTexCoord2d (0.0, 0.0);//левый нижний угол текстуры
glVertex3f (-8.0, -8.0, 15.0);
glTexCoord2d (1.0, 0.0); //правый нижний угол текстуры
glVertex3f (8.0, -8.0, 22.0);
glTexCoord2d (1.0,0.8);//верхняя часть изображения будет слегка
//приплюснута
Основы компьютерной графики для программистов 89 ____________________________________________________________________________________________________________________ GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, GL_LUMINANCE_ALPHA. Предпоследний, восьмой параметр определяет значение типа данных для каждой пиксельной компоненты: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT. Последний параметр представляет собой указатель на начало области данных текстуры. В нашем случае это переменная bits, описана как указатель на массив байт. Возможно, вас смутил тип данных TBits = Array [0..0] of GLUbyte; Действительно, такое описание выглядит как ошибка в программе. Однако, это сделано специально. Данная функция должна компилироваться с выключенной опцией на проверку допустимых диапазонов {$R-}. Тогда блок памяти bits в программе мы можем рассматривать как массив байт произвольной длины, и использовать обычный синтаксис Object Pascal для доступа к его элементам. Конечно, контроль выхода за пределы области памяти такого массива мы должны полностью брать на себя. После загрузки образа текстуры в память следует указать грань или грани трехмерных объектов, на которые будет осуществляться наложение текстуры. Здесь мы подходим к определению координат текстуры. Необходимо установить соответствие между вершинами граней трехмерного объекта и местом на текстуре, которое каждой вершине соответствует. Начало системы координат текстуры расположено в левом нижнем углу прямоугольного рисунка текстуры. Ось s, подобно оси абсцисс направлена слева направо по нижней кромке рисунка, а ось t, аналогично оси ординат направлена снизу вверх. Границы прямоугольника изображения текстуры задают диапазон изменения значений координат s и t от 0 до 1. Рассмотрим пример создания прямоугольника в трехмерном пространстве и наложение на него изображения корабля из файла Ship.bmp размером 64х64 пиксела. Здесь используется возможность создания так называемых дисплейных списков OpenGL, которые позволяют объединить длинные последовательности команд OpenGL под одним названием и запускать их на выполнение. Дисплейные списки позволяют между командами OpenGL выполнять и другие операторы, но, в отличие от обычных процедур и функций, запоминаются в списке только команды OpenGL. При последующем выполнении команд дисплейного списка обычные операторы не выполняются. Const Quad: GLInt=1;//идентификатор дисплейного списка Ship: pointer; . . . glNewList(Quad,GL_COMPILE);//создаем новый дисплейный список Ship:= LoadBmpTexture(64,64,'Ship.bmp');//загружаем текстуру в //память glBegin (GL_QUADS);//задаем тип примитива - четырехугольники glTexCoord2d (0.0, 0.0);//левый нижний угол текстуры glVertex3f (-8.0, -8.0, 15.0); glTexCoord2d (1.0, 0.0); //правый нижний угол текстуры glVertex3f (8.0, -8.0, 22.0); glTexCoord2d (1.0,0.8);//верхняя часть изображения будет слегка //приплюснута http://www.ksu.ru/persons/9134.ru.html
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »