- •Введение
- •Глава 1. Основы.
- •Int main()
- •1.2. Методика создания программ в Microsoft Visual Studio.
- •Void main(){
- •1.3. Ввод-вывод.
- •1.4. Переменные и константы.
- •Int I; // объявление целочисленной переменной
- •42 // Десятичная константа
- •0X42 // шестнадцатеричная константа, начинается с 0х
- •042 // Восьмеричная константа, начинается с 0
- •1.5. Арифметические операции.
- •Void main()
- •1.6. Встроенные функции. Математические функции. Состав math.H.
- •Void main()
- •Int rand(void); // функция используется без аргумента
- •Глава 2. Операторы и выражения.
- •2.1. Логические выражения и операторы
- •2.1.1. Оператор if else
- •If (условие)
- •If (условие)
- •2.1.2. Конструкция if else if
- •Int number;
- •Int number;
- •2.1.3. Условный оператор.
- •2.1.4. Оператор switch.
- •Int dvalue;
- •2.2. Операторы цикла.
- •2.2.1. Оператор for
- •Void main()
- •Int I; // создаем переменную цикла
- •Void main()
- •Int I; // переменную цикла можно определить и вне цикла
- •2.2.2. Изменение шага цикла
- •Void main()
- •2.2.3. Цикл while.
- •2.2.4. Цикл do while
- •Void main()
- •2.3. Операторы break и continue
- •Void main()
- •Void main()
- •2.4. Типичные ошибки при использовании операторов цикла
- •Глава 3. Производные типы данных.
- •3.1. Ссылки и указатели.
- •Int test; // объявили целочисленную переменную
- •Int & s_test; // ошибка! ссылка не связана с переменной
- •Int *p1; // объявлен указатель на целое с именем p1
- •3.2. Массивы и строки.
- •Int z[10]; //массив из 10 целых чисел
- •Int ar[3]; // объявлен целочисленный массив из 3 элементов
- •Int varr[4]; // объявление массива
- •3.2.2. Многомерные массивы.
- •Int z[3][4]; //массив из 12 целых чисел
- •3.2.3. Строки
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •If(strstr(st,st2)) //если подстрока встречается, выводим
- •3.1.5. Динамическое определение одномерных массивов.
- •3.1.6. Динамические двумерные массивы.
- •3.1.7. Указатели, массивы и арифметика указателей.
- •Int tacs[3];
- •Void main()
- •3.2. Структуры
- •Int age; // элементы структуры
- •Int hours;
- •Int mins;
- •Void main()
- •Int hours;
- •Int mins;
- •Void main()
- •4. Функции, определяемые пользователем
- •4.1. Объявление и определение функции
- •Int max(int , int ); // в прототипе достаточно указать только тип и
- •Void main() {
- •Int MyRand(){
- •Int func(){ return 1;} // правильное выражение
- •Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с
- •Void swap(int p, int q)
- •Int bigger(int a,int b)
- •4.2. Передача параметров функций
- •5. Заголовочные файлы.
- •6. Работа с файлами
- •6.1 Простой файловый ввод/вывод
- •6.2 Тонкости работы с файлами
- •7.1. Определение классов.
- •Void main()
- •7.2. Как объявлять функции класса?
- •7.3. Конструкторы и деструкторы классов.
- •8. Графика OpenGl.
- •Void callback Draw()
- •Void main()
- •8.1. Создание анимации с помощью библиотеки xgl
- •Приложения Управление выводом
- •Управление шириной вывода
8. Графика OpenGl.
Для работы с графикой в программах, написанных под ОС Windows можно использовать несколько готовых библиотек. В нашем пособии мы обращаемся к библиотеке OpenGL-Open Graphics Library (открытая графическая библиотека). Термин "открытый" - означает независимый от производителей. Библиотеку OpenGL может производить кто угодно, главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Стандарт OpenGL развивается с 1992 года фирмой Silicon Graphics. С тех пор библиотека завоевала огромную популярность и была интегрирована с множеством языков программирования и систем разработки приложений. Несомненными достоинствами OpenGL являются его простота и стандартность – программный код можно легко перенести на другую платформу или под другую операционную систему. Основное предназначение OpenGL - программирование трехмерной графики, хотя в нашем пособие мы ограничимся примерами использования только двумерных графических объектов средствами OpenGL.
В составе операционной системы Windows OpenGL поставляется в виде двух DLL -файлов - opengl32.dll и glu32.dll. Для облегчения использования графических примитивов OpenGL в нашем курсе используется заголовочный файл xgl.h, написанный С.А. Юзвовичем.
Для подключения библиотек OpenGL, необходимо настроить проект. Пользователям Microsoft Visual C++ 6.0 следует зайти в настройки проекта, пункты меню Project->Settings (или сочетание клавиш Alt+F7) .
На закладке Link в графе Object/library modules указать несколько “линкуемых” (т.е. подключаемых на стадии редактирования) библиотек через пробел: opengl32.lib glu32.lib glaux.lib (данные библиотеки входят в состав Visual C++).
После этого можно непосредственно приступать к написанию программы. Создадим новый исходный файл и добавим в него следующий текст:
#include "xgl.h" // подключаем заголовочный файл для работы с библиотекой OpenGL.
// Функция рисования.
Void callback Draw()
{
glColor3f(1.0f, 1.0f, 1.0f); // цвет рисования
xglDrawRect(10, 10, 100, 100); // рисуем квадрат
}
// Главная функция
Void main()
{
if( !xglInitWindow(0, 0, 300, 300, "Test XGL") ) // создаем окно вывода графики
{
auxQuit(); // выход в случаи неудачи
}
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // цвет заливки окна
xglMainLoop(Draw); // запускаем цикл обработки сообщений
}
Выше приведенная программа cоздает окно для вывода графики, заливает его черным цветом и рисует на нем белый квадрат.
Для работы с графикой используется функция Draw. Функция Draw объявлена как CALLBACK (возвращаемая). Это специальный тип функций, который используется для вывода изображений в окно Windows. Данная функция вызывается всякий раз, когда необходимо перерисовать данные в области окна. В этой функции мы определяем что и как должно рисоваться. Причем в внутри функции не рекомендуется использовать какие-либо сложные и длительные вычисления, так как это будет сказываться на скорости рисования ( эта функция может вызываться достаточно часто). Если нужно провести какие-то трудоемкие вычисления то их следует произвести заранее, например, в функции main(). Если необходимо передавать какие либо данные в функцию Draw, то это можно делать через глобальные переменные.
После этого описываем функцию void main(). В этой функции создается окно для вывода графики, задается цвет заливки и запускается цикл обработки сообщений для окна.
Функция bool xglInitWindow(int x, int y, int sx, int sy, char* name) создает окно для вывода графики, принимает следующие параметры:
x, y – положение окна,
sx, sy – размеры окна,
name – название окна, выводится вверху на синей полоске.
Функция void auxQuit() параметров не имеет и производит выход из программы. Вызывается в случаи если неудалось создать окно.
Функция void glClearColor(float red, float green, float blue, float alpha) задает цвет заливки окна, принимает следующие параметры:
red – красная компонента цвета, в диапозоне от 0.0 до 1.0,
green – зеленая компонента цвета, в диапозоне от 0.0 до 1.0,
blue – синяя компонента цвета, в диапозоне от 0.0 до 1.0.
alpha – компонента прозрачности, в нашем случае всегда задается 1.0.
Функция bool xglMainLoop(AUXMAINPROC pfDraw) запускает цикл обработки сообщений. В качестве параметра передается имя функции, которая будет вызываться при перерисовке окна:
pfDraw – указатель на функцию отрисовки окна (в нашем случае это функция Draw).
Для рисования можно использовать следующие функции, вызываемые внутри функции Draw() :
glColor3f(float red, float green, float blue) – устанавливает цвет рисования.
xglDrawLine(Float x1, Float y1, Float x2, Float y2) – рисует линию
xglDrawPoint(Float x, Float y) – рисует точку
xglDrawTriangle(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3) – рисует треугольник
xglDrawRect(Float x1, Float y1, Float x2, Float y2) – рисует прямоугольник.
xglDrawQuad(Float x1, Float y1, Float x2, Float y2, Float x3, Float y3, Float x4, Float y4) - четырехугольник.
Следует учитывать, что начало системы отсчета находится в левом нижнем углу окна.