Курсовая работа: Управление элементами поверхности

Курсовая работа: Управление элементами поверхности




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































«Управление элементами поверхности»
Понятие «компьютерная графика» существует уже давно. Трудно определить, когда именно и кем были разработаны первые понятия компьютерной графики. В настоящее время компьютерная графика – это огромный мир, такой же, как мир операционных систем, или программирования, это нечто большее, чем просто графика. Вообще, все, что на компьютере рисует пользователь – это и есть компьютерная графика.
Компьютерная графика применяется в самых разнообразных сферах деятельности человека: в кино, в сфере рекламы, в полиграфии, в информационных сферах (телевидение, интернет), в сфере игростроения и многих других.
Исходя из этого, давайте подробно рассмотрим значимость компьютерной графики на сегодняшний день. Киноиндустрия получает ежегодную многомиллионную прибыль от фильмов, в которых использованы современные спецэффекты. Вспомнить хотя бы такие известные фантастические фильмы, как Люди в черном, Матрица и тому подобные. Во всех них использовалась компьютерная графика, создающая эффект максимальной реалистичности происходящего. Смотря на все происходящее в фильме, создается впечатление, что все это было на самом деле.
Компьютерная графика широко используется на телевидении. Все больше и больше последнее время компьютерная графика используется при создании красивых телевизионных заставок, которые вещают на телеканалах. Красивые заставки – это залог успеха телеканала. Последнее время проводятся даже соревнования между телеканалами, у кого лучше заставка. Компьютерная графика стала самым основный ресурсом, который затрачивается при создании компьютерных игр. Любая компьютерная графика представляется в играх в так называемом трехмерном виде, или 3d. Данным подразделением компьютерной графики занимаются специализированные графические редакторы, например Maya, 3d-Studio Max.
Целью данной курсовой работы является получение практических знаний по курсу компьютерная графика.
Задачами является изучение основных возможностей создания трехмерных объектов в OpenGL, наложения текстур.
Целью данной курсовой работы является получение практических знаний по курсу компьютерная графика. С помощью возможностей OpenGL будет создана модель управления элементами поверхности.
Задачами является изучение основных возможностей создания трехмерных объектов, наложения текстур, работа с координатами.
Для упрощения описания работы программы, алгоритм выполнения
был разбит на части: подключение библиотек, создание поверхности ландшафта, изменение поверхности ландшафта, реализация ориентирования на поверхности.
Сначала необходимо инициализировать библиотеки и установить
общие свойства сцены. Для этого создадим обработчик события onCreate формы и занесем в него следующий код:
glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);
gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
Первый оператор инициализирует библиотеку OpenGL и устанавливает связь с окном приложения, в котором будет производиться вывод. После получения контекста воспроизведения сообщаем системе OpenGL о том, что необходимо корректировать построения в соответствии с глубиной командой glEnable (GL_DEPTH_TEST). Команда glClearColor определяет величину, которой будет заполняться буфер цвета при его очистке, т.е. это будет цвет фона – черный.
Для того чтобы создать ландшафт, было принято решение использовать массив, в котором будет храниться высота координат:
height:array [-11..11, -11..11] of single;
При создании формы происходит вызов процедуры initmas, которая инициализирует массив высот:
Рисование поверхности производится вызовом процедуры Draw в обработчике события OnPaint:
glBindTexture (GL_TEXTURE_2D, MyTextureTex);
glTexCoord2f (0.0, 0.0); glVertex3f (x, height [i, j], z);
glTexCoord2f (1.0, 0.0); glVertex3f (x, height [i, j+1], z+zoom);
glTexCoord2f (1.0, 1.0); glVertex3f (x+Zoom, height [i+1, j+1], z+zoom);
glTexCoord2f (0.0, 1.0); glVertex3f (x+Zoom, height [i+1, j], z);
В этой процедуре по каждому значению массива height строится ландшафт.
Для того чтобы наглядно продемонстрировать ландшафт, было принято решение дать наблюдателю возможность перемещаться по поверхности. Для того, чтобы это реализовать в обработчик события OnFormKeyDown формы занесем следующий код:
Human. Position.z:=Human. Position.z+
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x+
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z+
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x-
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z-
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x-
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z-
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x+
sin (DegToRad(Human. Rotation.y))*SPEED;
При нажатии клавиши изменяется позиция наблюдателя в пространстве.
Чтобы изменить поверхность мы сначала должны получить координаты изменяемой поверхности. Получение координат реализуется процедурой GetCoordinate. Далее происходит изменение массива высот:
В переменной vis содержится значение, определенное пользователем, на которое изменится высота.
В результате выполнения курсовой работы были выполнены все поставленные цели, изучены основные возможности создания трехмерных объектов, наложения текстур и перемещения в пространстве.
1. Михаил Краснов, OpenGL в Delphi, электронный вариант.
2. Эйнджел, Эдвард, Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2 изд.: Пер. с англ. – М.: Издательский дом «Вильяме», 2001. – 592 с: ил. – Парал. тит. Англ.
3. Райт, OpenGL. Суперкнига, 3-е издание [Электронный ресурс] / Райт, Ричард С.-мл., Липчак, Бенджамин // Книги по программированию. [Режим доступа: http://www.pmg.org.ru/nehe/nehe07.htm
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OpenGL, ExtCtrls, Math, StdCtrls, ComCtrls, TEXTURES;
procedure FormKeyDown (Sender: TObject; var Key: Word;
procedure FormCreate (Sender: TObject);
procedure FormDestroy (Sender: TObject);
procedure Timer1Timer (Sender: TObject);
procedure FormResize (Sender: TObject);
procedure FormPaint (Sender: TObject);
procedure FormMouseMove (Sender: TObject; Shift: TShiftState; X,
procedure FormMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button3Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure TrackBar1Change (Sender: TObject);
procedure Button5Click (Sender: TObject);
procedure Button6Click (Sender: TObject);
wx, wy, wz: GLdouble; // возвращаемые мировые x, у, z координаты
height:array [-11..11, -11..11] of single;
procedure glBindTexture (target: GLenum; texture: GLuint); stdcall; external opengl32;
procedure GetCoordinate (const x, y:integer);
Viewport: Array [0..3] of GLInt; // область вывода
ProjMatrix: Array [0..15] of GLDouble; // матрица проекций
RealY: GLint; // OpenGL у – координата
Zval: GLfloat; // оконная z – координата
glGetIntegerv (GL_VIEWPORT, @Viewport); // матрица области вывода
glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix);
glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix); // viewport[3] – высота окна в пикселах, соответствует Height
glReadPixels (X, RealY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Zval);
@mvMatrix, @ProjMatrix, @Viewport, wx, wy, wz);
glBindTexture (GL_TEXTURE_2D, MyTextureTex);
glTexCoord2f (0.0, 0.0); glVertex3f (x, height [i, j], z);
glTexCoord2f (1.0, 0.0); glVertex3f (x, height [i, j+1], z+zoom);
glTexCoord2f (1.0, 1.0); glVertex3f (x+Zoom, height [i+1, j+1], z+zoom);
glTexCoord2f (0.0, 1.0); glVertex3f (x+Zoom, height [i+1, j], z);
procedure TForm1. FormKeyDown (Sender: TObject; var Key: Word;
Human. Position.z:=Human. Position.z+
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x+
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z+
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x-
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z-
sin (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x-
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.z:=Human. Position.z-
cos (DegToRad(Human. Rotation.y))*SPEED;
Human. Position.x:=Human. Position.x+
sin (DegToRad(Human. Rotation.y))*SPEED;
nPixelFormat:=ChoosePixelFormat (DC,@pfd);
SetPixelFormat (DC, nPixelFormat,@pfd);
procedure TForm1. Button1Click (Sender: TObject);
Human. Rotation.y:=Human. Rotation.y-4;
if Human. Rotation.y>=360 then Human. Rotation.y:=0;
if Human. Rotation.y<0 then Human. Rotation.y:=360;
procedure TForm1. Button2Click (Sender: TObject);
Human. Rotation.y:=Human. Rotation.y+4;
if Human. Rotation.y>=360 then Human. Rotation.y:=0;
if Human. Rotation.y<0 then Human. Rotation.y:=360;
procedure TForm1. Button3Click (Sender: TObject);
glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
procedure TForm1. Button4Click (Sender: TObject);
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
procedure TForm1. Button5Click (Sender: TObject);
Human. Rotation.zx:=Human. Rotation.zx+0.2;
procedure TForm1. Button6Click (Sender: TObject);
Human. Rotation.zx:=Human. Rotation.zx-0.2;
procedure TForm1. FormCreate (Sender: TObject);
glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);
gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
glEnable (GL_TEXTURE_2D); // Enable Texture Mapping
LoadTexture ('texture.bmp', MyTextureTex, FALSE);
procedure TForm1. FormDestroy (Sender: TObject);
procedure TForm1. Timer1Timer (Sender: TObject);
InvalidateRect (Handle, nil, false);
procedure TForm1. TrackBar1Change (Sender: TObject);
Label2. Caption:=floattostr (TrackBar1. Position);
procedure TForm1. FormResize (Sender: TObject);
glViewport (0, 0, ClientWidth-Panel1. Width, ClientHeight);
gluPerspective (30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
procedure TForm1. FormPaint (Sender: TObject);
LPos: Array [0..3] of GLFloat = (3.0, 10, -100.0, 1.0);
glRotatef (Human. Rotation.zx, Abs (cos(DegToRad (Human. Rotation.y))), 0,0);
glRotatef (Human. Rotation.y, 0,1,0);
procedure TForm1. FormMouseDown (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TForm1. FormMouseMove (Sender: TObject; Shift: TShiftState; X,

Название: Управление элементами поверхности
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Добавлен 17:40:58 28 ноября 2010 Похожие работы
Просмотров: 32
Комментариев: 15
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Курсовая работа: Управление элементами поверхности
Доклад: Сегюр, Луи-Филипп
Сочинение: Смысл заглавия романа Ф.М. Достоевского "Преступление и наказание"
Контрольная работа по теме Вскрытие и подготовка месторождений полезных ископаемых
Габриелян Контрольная Работа 8 Класс
Лесные Ресурсы Мира Эссе
Реферат: Шуберт
Контрольная работа по теме Германские государства в период абсолютной монархии
Прочие Доходы И Расходы Курсовая
Дипломная работа по теме Маркетинг в сфере услуг
Реферат: Общая характеристика экономики Италии. Скачать бесплатно и без регистрации
Дипломная работа по теме Изучение проблем подбора и найма сотрудников на примере предприятия НГЧ-13
Дипломная работа: Проектирование тяговой подстанции переменного тока
Суд Над Карлом 1 Реферат
Реферат: Площадь треугольника
Сочинение По Произведению Барышня Крестьянка
Геометрия 7 9 Класс Погорелов Контрольные Работы
Реферат по теме Формирование государства
Литосфера 6 Класс География Контрольная Работа
Контрольная Работа По Теме Величины
Контрольная работа: Защита прав налогоплательщиков
Реферат: Планирование проекта
Реферат: Этапы развития отечественных региональных исследований и формирование современной региональной науки
Реферат: Товарные биржи РФ

Report Page