Украина, Киев |
Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 19:
Простая программа на OpenGL
Упражнение 2. Рисование прямоугольника внутри окна (GLRect)
Усложним нашу программу, добавив возможность рисования прямоугольника в центре окна. Добавьте к проекту новый файл. Для этого:
- В панели Solution Explorer щелкните правой кнопкой мыши на узле проекта и через контекстное меню выполните команду Add/New Item
- В открывшемся окне задайте имя файла GLRect, а тип и размещение выберите в соответствии со снимком
- Нажмите кнопку Add и к проекту добавится новый пустой файл C++
- Исключите из проекта прежний файл Simple.cpp. Для этого в панели Solution Explorer щелкните правой кнопкой мыши на этом файле и через контекстное меню выполните команду Remove
Файл можно исключить из проекта и клавишей Del. В этом случае оболочка выдаст диалоговое окно
Кнопка Delete удалит файл физически, а кнопка Remove только исключит файл из проекта. Физически на диске он останется, но в проекте участвовать не будет. В последующем его всегда можно будет вновь добавить к проекту.
- Щелкните на пиктограмме Show All Files панели Solution Explorer и убедитесь, что файл Simple.cpp действительно существует
- Заполните файл GLRect.cpp следующим кодом
#include "stdafx.h" // Прототипы функций void RenderScene(void); void SetupRC(void); void ChangeSize(int, int); //********************************************************** // Точка входа приложения void main() { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(800, 600); glutCreateWindow("GLRect"); glutDisplayFunc(RenderScene); glutReshapeFunc(ChangeSize); SetupRC(); glutMainLoop(); } //********************************************************** // Вызывается для рисования сцены void RenderScene(void) { // Очищаем окно текущим цветом очистки glClear(GL_COLOR_BUFFER_BIT); // Устанавливаем текущим цветом рисования красный // в модели R G B glColor3f(1.0f, 0.0f, 0.0f); // Рисуем прямоугольник, заполненный текущим цветом glRectf(-50.0f, 50.0f, 50.0f, -50.0f); // Выполняет всю очередь текущих команд glFlush(); } //********************************************************** // Устанавливаем состояние визуализации void SetupRC(void) { // Устанавливаем цвет очистки синий непрозрачный glClearColor(0.0f, 0.0f, 1.0f, 1.0f); } //********************************************************** // Вызывается библиотекой GLUT при изменении размеров окна void ChangeSize(int width, int height) { GLfloat aspectRatio; // Предотвращаем деление на нуль if(height == 0) height = 1; // Устанавливаем поле просмотра с размерами окна glViewport(0, 0, width, height); // Устанавливает матрицу преобразования в режим проецирования glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Устанавливаем размеры перспективы (отсекающего объема) // (left, right, bottom, top, near, far) aspectRatio = (GLfloat)width / (GLfloat)height; if (width <= height) glOrtho (-100.0, 100.0, -100 / aspectRatio, 100.0 / aspectRatio, 1.0, -1.0); else glOrtho (-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 1.0, -1.0); // Восстановливает матрицу преобразования в исходный режим вида glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }Листинг 19.16. Усложненный файл реализации GLRect.cpp
- Запустите приложение и получите результат