Chapter 2
Быстрый старт
2.2 Давайте что-нибудь изобразим
Самым простым объектом, с помощью которого можно увидеть всю мощь OpenGL,
является сфера. Давайте попытаемся ее изобразить. Для этого надо создать
новый проект в VisualC++, выполните следующие действия:
- Запустите MSVisualC++6.0
- Щелкните меню File->New->Win32 Console Application.
- Выберете каталог и имя проекта, впишите - sphere, щелкните OK.
Я все свои проекты держу на диске D в каталоге Projects. Projects
ветвится дальше на подкатологи с базами данных, утилитами, графикой
и Java-приложениями. В общем, старайтесь присваивать разумные имена
и вести разумную структуру каталогов. Это очень серьезная проблема.
- Выберете An Empty Project, щелкните Finish.
- Cкопируйте в каталог вашего проекта мой шаблон glaux.c и переименуйте
его в sphere.c
- Присоедините его к проекту. Project->Add To Project->Files
- Щелкните Build->Set Active Configuration и установите тип проекта
sphere - Win32 Release
- Далее, щелкайте Project->Settings->Link->Object/library modules
и добавьте туда opengl32.lib, glu32.lib и glaux.lib
- Вставьте в функцию display следующий код:
glColor3d(1,0,0);
auxSolidSphere(1);
- Теперь откомпилируйте и запустите Вашу программу.
Меню Build->Execute Sphere.exe
Исходный файл смотрите здесь.
Исполняемый файл здесь.
Тперь поясню назначение тех двух функций, что вы вставили в пункте 9.
Функция glColor3d устанавливает текущий цвет, которым будут рисоваться фигуры. Тут
нужно пояснить, как устанавливается цвет, и общую философию в названии функций
OpenGL. Цвет устанавливается четырьмя параметрами: красный, синий, зеленый
и прозрачность. Эти параметры вариируются в диапозоне от нуля до единицы.
Четвертый параметр нам пока не нужен, поэтому мы вызвали glColor с тремя параметрами. В этом случае, значение четвертого параметра,
прозрачности, по умолчанию считается равным единице, т.е. абсолютно непрозрачным,
ноль - будет абсолютно прозрачным. Так как в языке Си нет перегрузки функций,
то применяется следующий синтаксис вызова функций - FuncionName[n=число
параметров][тип параметров]. Доступны следующие типы:
- b - GLbyte байт
- s - GLshort короткое целое
- i - GLint целое
- f - GLfloat дробное
- d - GLdouble дробное с двойной точностью
- ub - GLubyte беззнаковый байт
- us - GLushort беззнаковое короткое целое
- ui - GLuint беззнаковое целое
- v - массив из n параметров указанного типа
В нашем случае, glColor3d означает, что в функцию передаются три параметра
типа GLdouble. Также можно было вызвать glColor3i, т.е. три параметра
типа GLint. Если тип параметров короткое целое, целое, байт или длинное, то компонент
цвета приводится к диапазону [0,1]. Приведение к этому диапазону осуществляется
следующим образом. В случае беззнакового типа наибольшее возможное значение
приводится к единице, ноль к нулю. В случае знакового типа максимальное значение приводится
к единице или к минус единице, а минус единица будет приведена к единице. Мудрено, сразу и не поймешь.
На практике вы будете пользоваться одним из трех случаев, рассмотренных в качестве примера
ниже.
Например, для беззнакового байта приведение будет
осуществлено по следующей формуле: значение_переменной_хранимой_в_байте/255,
т.к. 255 максимальное число, хранимое в одном байте.
Функция glColor3dv означает, что в
качестве параметров передается массив из трех элементов типа GLdouble.
Например:
double array[] = {0.5, 0.75, 0.3, 0.7};
...
glColor3dv(array);
glColor3ub(200,100,0); // приводится к 200/256, 100/256, 0,256
glColor3d(0.25,0.25,0); // темно-желтый
glColot3ub(0,100,0); // темно-зеленый
glColor3ub(0,0,255); // синий
Функция auxSolidSphere - рисует сферу в начале координат
и единичным радиусом. Осещение, создание ламп и установку положения камеры
мы рассмотрим чуть позже, а пока давайте по-лучше освоимся и почувствуем, насколько
здесь все просто. Первую программу под моим руководством вы уже написали.
Теперь выполните самостоятельные упражнения.
|