Академический Документы
Профессиональный Документы
Культура Документы
Исполнитель
студент, 8960 _________ Е. И. Блеч
(подпись)
_____________________
(дата)
Руководитель
доцент, к.т.н _________ О.С. Токарева
(подпись)
_____________________
(дата)
Вариант 12
Томск –2009
Цель работы: Изучить и освоить библиотеку OpenGL.
#include <vcl.h>
#include <GL/gl.h> // Заголовочные файлы для библиотеки OpenGL32
#include <GL/glu.h> // Заголовочные файлы для библиотеки GLu32
#pragma hdrstop
#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
ppfd = &pfd;
ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR);
ppfd->nVersion = 1;
ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
ppfd->dwLayerMask = PFD_MAIN_PLANE;
ppfd->iPixelType = PFD_TYPE_RGBA; ;// iPixelType – формат указания цвета -
цвет
ppfd->cColorBits = 16; // cColorBits – глубина цвета
ppfd->cDepthBits = 16; // cDepthBits – размер буфера глубины (Z-Buffer)
ppfd->cAccumBits = 0;
ppfd->cStencilBits = 0; // cStencilBits – размер буфера трафарета
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
ghDC = GetDC(Handle); //ghDC – дескриптор устройства , просто указатель на
окно)
rtri = 0.0;
if (!bSetupPixelFormat(ghDC)) Close();
ghRC = wglCreateContext(ghDC);
wglMakeCurrent(ghDC, ghRC);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormResize(TObject *Sender)
{
glViewport(0, 0, Width, Height); // Сброс текущей области вывода
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
if(ghRC)
{
wglMakeCurrent(ghDC,0); // освободить контекст,
wglDeleteContext(ghRC); // разрушить
}
if(ghDC) ReleaseDC(Handle, ghDC);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Draw()
{
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // Очистить экран и буфер
глубины
glColor3f(0,1,0);
glVertex2f(3,-2);
glColor3f(0,0,1);
glVertex2f(1,2);
glEnd(); // заканчиваем рисование треугольников
SwapBuffers(ghDC);
}
//---------------------------------------------------------------------------
case VK_SPACE:
glPopMatrix(); // вернуться к исходным координатам
break;
default:
bWork = false;
}
}
//---------------------------------------------------------------------------