| Украина, Киев |
Опубликован: 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
-
Запустите
приложение и получите результат




