Узнать стоимость написания работы
Оставьте заявку, и в течение 5 минут на почту вам станут поступать предложения!
Реферат

Реферат по предмету "Информатика, программирование"


Управление элементами поверхности

КУРСОВОЙ ПРОЕКТ
на тему:
«Управление элементамиповерхности»
Орел, 2010

/>Введение
Понятие «компьютернаяграфика» существует уже давно. Трудно определить, когда именно и кем были разработаныпервые понятия компьютерной графики. В настоящее время компьютерная графика – этоогромный мир, такой же, как мир операционных систем, или программирования, этонечто большее, чем просто графика. Вообще, все, что на компьютере рисуетпользователь – это и есть компьютерная графика.
Компьютернаяграфика применяется в самых разнообразных сферах деятельности человека: в кино,в сфере рекламы, в полиграфии, в информационных сферах (телевидение, интернет),в сфере игростроения и многих других.
Исходя из этого,давайте подробно рассмотрим значимость компьютерной графики на сегодняшнийдень. Киноиндустрия получает ежегодную многомиллионную прибыль от фильмов, вкоторых использованы современные спецэффекты. Вспомнить хотя бы такие известныефантастические фильмы, как Люди в черном, Матрица и тому подобные. Во всех нихиспользовалась компьютерная графика, создающая эффект максимальнойреалистичности происходящего. Смотря на все происходящее в фильме, создаетсявпечатление, что все это было на самом деле.
Компьютернаяграфика широко используется на телевидении. Все больше и больше последнее времякомпьютерная графика используется при создании красивых телевизионных заставок,которые вещают на телеканалах. Красивые заставки – это залог успеха телеканала.Последнее время проводятся даже соревнования между телеканалами, у кого лучшезаставка. Компьютерная графика стала самым основный ресурсом, которыйзатрачивается при создании компьютерных игр. Любая компьютерная графикапредставляется в играх в так называемом трехмерном виде, или 3d. Даннымподразделением компьютерной графики занимаются специализированные графическиередакторы, например Maya, 3d-Studio Max.
Целью даннойкурсовой работы является получение практических знаний по курсу компьютернаяграфика.
Задачами являетсяизучение основных возможностей создания трехмерных объектов в OpenGL, наложения текстур.
1.        Постановказадачи
Целью даннойкурсовой работы является получение практических знаний по курсу компьютернаяграфика. С помощью возможностей OpenGL будет создана модель управления элементамиповерхности.
Задачамиявляется изучение основных возможностей создания трехмерных объектов, наложениятекстур, работа с координатами.
2.        Описаниеалгоритма решения задачи
Для упрощенияописания работы программы, алгоритм выполнения
был разбит начасти: подключение библиотек, создание поверхности ландшафта, изменениеповерхности ландшафта, реализация ориентирования на поверхности.2.1     Подключениебиблиотек
Сначаланеобходимо инициализировать библиотеки и установить
общиесвойства сцены. Для этого создадим обработчик события onCreate формы и занесем в негоследующий код:
InitOpenGL(Handle);
glViewport(0, 0, ClientWidth-Panel1. Width, ClientHeight);
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
gluPerspective(30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity;
Первыйоператор инициализирует библиотеку OpenGL и устанавливает связь с окном приложения, вкотором будет производиться вывод. После получения контекста воспроизведениясообщаем системе OpenGL о том, что необходимо корректировать построения всоответствии с глубиной командой glEnable (GL_DEPTH_TEST). Команда glClearColor определяет величину,которой будет заполняться буфер цвета при его очистке, т.е. это будет цвет фона– черный.
2.2     Созданиеповерхности ландшафта
Для тогочтобы создать ландшафт, было принято решение использовать массив, в котором будетхраниться высота координат:
Var

height:array[-11..11, -11..11] of single;

При созданииформы происходит вызов процедуры initmas, которая инициализируетмассив высот:

procedureinitmas;
vari, j:integer;
begin
fori:= -11 to 11 do
forj:=-11 to 11 do
begin
height[i, j]:=-1;
end;
end;

Рисованиеповерхности производится вызовом процедуры Draw в обработчике события OnPaint:
procedureDraw;

fori:=-10 to 10 do
forj:=-10 to 10 do
begin
x:=i*zoom;
z:=j*zoom;
glBindTexture(GL_TEXTURE_2D, MyTextureTex);
glBegin(GL_QUADS);
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);
glEnd;
end;
end;
В этойпроцедуре по каждому значению массива height строится ландшафт.2.3Реализация ориентирования на поверхности
Для тогочтобы наглядно продемонстрировать ландшафт, было принято решение датьнаблюдателю возможность перемещаться по поверхности. Для того, чтобы этореализовать в обработчик события OnFormKeyDown формы занесем следующий код:
casekey of
27:Form1. Close;
65:begin
Human.Position.z:=Human. Position.z+
sin(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x+
cos(DegToRad(Human. Rotation.y))*SPEED;
end;
87:begin
Human.Position.z:=Human. Position.z+
cos(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x-
sin(DegToRad(Human. Rotation.y))*SPEED;
end;
68:begin
Human.Position.z:=Human. Position.z-
sin(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x-
cos(DegToRad(Human. Rotation.y))*SPEED;
end;
83:begin
Human.Position.z:=Human. Position.z-
cos(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x+
sin(DegToRad(Human. Rotation.y))*SPEED;
end;
end;
При нажатииклавиши изменяется позиция наблюдателя в пространстве.2.4Изменениеповерхности ландшафта
Чтобыизменить поверхность мы сначала должны получить координаты изменяемойповерхности. Получение координат реализуется процедурой GetCoordinate. Далее происходитизменение массива высот:

i:=Trunc(wx);
j:=Trunc(wz);
height [i, j]:=vis;

В переменной vis содержится значение,определенное пользователем, на которое изменится высота.
Заключение
В результатевыполнения курсовой работы были выполнены все поставленные цели, изучены основныевозможности создания трехмерных объектов, наложения текстур и перемещения впространстве. 
Список литературы
1.        МихаилКраснов, OpenGL в Delphi, электронный вариант.
2.        Эйнджел,Эдвард, Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2 изд.: Пер. с англ. – М.:Издательский дом «Вильяме», 2001. – 592 с: ил. – Парал. тит. Англ.
3.        Райт,OpenGL. Суперкнига, 3-е издание[Электронныйресурс] / Райт, Ричард С.-мл., Липчак, Бенджамин // Книги попрограммированию. [Режим доступа: www.pmg.org.ru/nehe/nehe07.htm
ПриложениеА
unit Unit1;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,OpenGL, ExtCtrls, Math, StdCtrls, ComCtrls, TEXTURES;
type
TForm1= class(TForm)
Timer1:TTimer;
Panel1:TPanel;
Button1:TButton;
Button2:TButton;
Button3:TButton;
Button4:TButton;
TrackBar1:TTrackBar;
Label1:TLabel;
Label2:TLabel;
Label3:TLabel;
Button5:TButton;
Button6:TButton;
procedureFormKeyDown (Sender: TObject; var Key: Word;
Shift:TShiftState);
procedureFormCreate (Sender: TObject);
procedureFormDestroy (Sender: TObject);
procedureTimer1Timer (Sender: TObject);
procedureFormResize (Sender: TObject);
procedureFormPaint (Sender: TObject);
procedureFormMouseMove (Sender: TObject; Shift: TShiftState; X,
Y:Integer);
procedureFormMouseDown (Sender: TObject; Button: TMouseButton;
Shift:TShiftState; X, Y: Integer);
procedureButton3Click (Sender: TObject);
procedureButton4Click (Sender: TObject);
procedureButton1Click (Sender: TObject);
procedureButton2Click (Sender: TObject);
procedureTrackBar1Change (Sender: TObject);
procedureButton5Click (Sender: TObject);
procedureButton6Click (Sender: TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
type
User=record
Position:record
x,y, z: Single;
end;
Rotation:record
y,zx: Single;
end;
end;
var
vis:single;
Form1:TForm1;
DC:HDC;
HRC:HGLRC;
Human:User;
MyTextureTex:glUint;
wx,wy, wz: GLdouble; // возвращаемые мировые x, у, z координаты
height:array[-11..11, -11..11] of single;
implementation
procedureglBindTexture (target: GLenum; texture: GLuint); stdcall; external opengl32;
{$R*.dfm}
procedureGetCoordinate (const x, y:integer);
var
Viewport:Array [0..3] of GLInt; // область вывода
mvMatrix, //матрица модели
ProjMatrix:Array [0..15] of GLDouble; // матрица проекций
RealY:GLint; // OpenGL у – координата
Zval:GLfloat; // оконная z – координата
Begin
glGetIntegerv(GL_VIEWPORT, @Viewport); // матрица области вывода
 //заполняем массивы матриц
glGetDoublev(GL_MODELVIEW_MATRIX, @mvMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, @ProjMatrix); // viewport[3] – высота окна впикселах, соответствует Height
RealY:=viewport[3] – Y – 1;
FloatToStr(RealY);
glReadPixels(X, RealY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Zval);
gluUnProject(X, RealY, Zval,
@mvMatrix,@ProjMatrix, @Viewport, wx, wy, wz);
end;
procedureinitmas;
vari, j:integer;
begin
fori:= -11 to 11 do
forj:=-11 to 11 do
begin
height[i, j]:=-1;
end;
end;
procedurechangemas;
vari, j:integer;
begin
i:=Trunc(wx);
j:=Trunc(wz);
height[i, j]:=vis;
end;
procedureDraw;
vari, j:integer;
x,z:integer;
zoom:integer;
begin
glColor3f(1,0,0);
glPointSize(5);
glBegin(GL_POINTS);
glVertex3f(wx, wy, wz);
glEnd;
zoom:=1;
glColor3f(0. 7,1. 0,0.7);
fori:=-10 to 10 do
forj:=-10 to 10 do
begin
x:=i*zoom;
z:=j*zoom;
glPointSize(1);
glBindTexture(GL_TEXTURE_2D, MyTextureTex);
glBegin(GL_QUADS);
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);
glEnd;
end;
end;
procedureTForm1. FormKeyDown (Sender: TObject; var Key: Word;
Shift:TShiftState);
const
SPEED=0.2;
begin
casekey of
27:Form1. Close;
65:begin
Human.Position.z:=Human. Position.z+
sin(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x+
cos(DegToRad(Human. Rotation.y))*SPEED;
end;
87:begin
Human.Position.z:=Human. Position.z+
cos(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x-
sin(DegToRad(Human. Rotation.y))*SPEED;
end;
68:begin
Human.Position.z:=Human. Position.z-
sin(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x-
cos(DegToRad(Human. Rotation.y))*SPEED;
end;
83:begin
Human.Position.z:=Human. Position.z-
cos(DegToRad(Human. Rotation.y))*SPEED;
Human.Position.x:=Human. Position.x+
sin(DegToRad(Human. Rotation.y))*SPEED;
end;
end;
end;
procedureSetDCPixelFormat;
var
pfd:TPixelFormatDescriptor;
nPixelFormat:Integer;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags:=PFD_DRAW_TO_WINDOWor
PFD_DOUBLEBUFFERor
PFD_SUPPORT_OPENGL;
nPixelFormat:=ChoosePixelFormat(DC,@pfd);
SetPixelFormat(DC, nPixelFormat,@pfd);
end;
procedureTForm1. Button1Click (Sender: TObject);
begin
Human.Rotation.y:=Human. Rotation.y-4;
ifHuman. Rotation.y>=360 then Human. Rotation.y:=0;
ifHuman. Rotation.y
end;
procedureTForm1. Button2Click (Sender: TObject);
begin
Human.Rotation.y:=Human. Rotation.y+4;
ifHuman. Rotation.y>=360 then Human. Rotation.y:=0;
ifHuman. Rotation.y
end;
procedureTForm1. Button3Click (Sender: TObject);
begin
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
end;
procedureTForm1. Button4Click (Sender: TObject);
begin
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
end;
procedureTForm1. Button5Click (Sender: TObject);
begin
Human.Rotation.zx:=Human. Rotation.zx+0.2;
end;
procedureTForm1. Button6Click (Sender: TObject);
begin
Human.Rotation.zx:=Human. Rotation.zx-0.2;
end;
procedureTForm1. FormCreate (Sender: TObject);
begin
vis:=0;
initmas;
DC:=GetDC(Handle);
SetDCPixelFormat;
HRC:=wglCreateContext(DC);
wglMakeCurrent(DC, HRC);
glViewport(0, 0, ClientWidth-Panel1. Width, ClientHeight);
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
LoadTexture('texture.bmp', MyTextureTex, FALSE);
withHuman do
begin
withPosition do
begin
x:=6.4;
y:=0;
z:=-0.3878;
end;
withRotation do
begin
y:=91;
zx:=10;
end;
end;
end;
procedureTForm1. FormDestroy (Sender: TObject);
begin
wglMakeCurrent(0,0);
wglDeleteContext(HRC);
ReleaseDC(Handle, DC);
DeleteDC(DC);
end;
procedureTForm1. Timer1Timer (Sender: TObject);
begin
InvalidateRect(Handle, nil, false);
end;
procedureTForm1. TrackBar1Change (Sender: TObject);
begin
Label2.Caption:=floattostr (TrackBar1. Position);
vis:=TrackBar1.Position;
end;
procedureTForm1. FormResize (Sender: TObject);
begin
glViewport(0, 0, ClientWidth-Panel1. Width, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(30.0, ClientWidth / ClientHeight, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;
procedureTForm1. FormPaint (Sender: TObject);
var
ps:TPaintStruct;
Const
LPos:Array [0..3] of GLFloat = (3.0, 10, -100.0, 1.0);
begin
BeginPaint(Handle, ps);
glClear(GL_COLOR_BUFFER_BIT or
GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glRotatef(Human. Rotation.zx, Abs (cos(DegToRad (Human. Rotation.y))), 0,0);
glRotatef(Human. Rotation.y, 0,1,0);
glTranslatef(Human. Position.x,
Human.Position.y,
Human.Position.z);
Draw;
EndPaint(Handle, ps);
SwapBuffers(DC);
end;
procedureTForm1. FormMouseDown (Sender: TObject; Button: TMouseButton;
Shift:TShiftState; X, Y: Integer);
begin
changemas;
end;
procedureTForm1. FormMouseMove (Sender: TObject; Shift: TShiftState; X,
Y:Integer);
begin
GetCoordinate(x, y);
end;
end.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Технология производства декоративных культур 2
Реферат Типология семьи и личности
Реферат Диагностика и самодиагностика организма
Реферат Система отопления в зданиях и сооружениях
Реферат Педагогические взгляды Белинского и их связь с задачами литературы
Реферат Теория экономического анализа (Шпаргалки)
Реферат Длинноногая петроика
Реферат «Патриотизм состоит не в пышных возгласах...» В Г.Белинский
Реферат Особенности размещения и расселения населения России
Реферат «Дистанционное образование: области применения, проблемы и перспективы развития»
Реферат Психолого-педагогические основы математического мышления
Реферат Инфляция как многофакторный процесс, особенности ее проявления в России
Реферат Аналіз управління в період правління Юлія Цезаря
Реферат Unjust Censorship Essay Research Paper Benninger James
Реферат Blind Nation Essay Research Paper Blind NationThe