Основы компьютерной графики для программистов. Казанцев А.В. - 66 стр.

UptoLike

Составители: 

Основы компьютерной графики для программистов 66
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
Контекст воспроизведения
Рассмотрим процедуру FormCreate, которая выполняет подготовительные действия для
работы с OpenGL. Главное, что здесь требуетсясоздание
контекста воспроизведения
OpenGL и установка его текущим. OpenGL недостаточно просто ссылки на окно
Windows или контекст устройства. Контекст воспроизведения связывает окно с так
называемым конвейером OpenGL с учетом установленного формата пикселов.
procedure TfrmGL.FormCreate(Sender: TObject);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : integer;
begin
hdc := GetDC (Panel1.Handle);
FillChar(pfd,SizeOf(pfd),0);
pfd.nSize:= SizeOf(pfd);
pfd.dwFlags:=PFD_DOUBLEBUFFER;
nPixelFormat:= ChoosePixelFormat(hdc,@pfd);
if nPixelFormat = 0 then
begin
ShowMessage(‘Ошибка OpenGL’);
Halt;
end;
SetPixelFormat(hdc,nPixelFormat,@pfd);
RContext := wglCreateContext(hdc);
WglMakeCurrent(hrc,RContext);
glClearColor (0.0, 0.0, 0.0,1.0); // цвет фона
glEnable(GL_DEPTH_TEST);
SphereObj:=gluNewQuadric;
CylObj :=gluNewQuadric;
LightObj :=gluNewQuadric;
end;
Первый оператор в этой процедуреполучение оконного контекста устройства с
помощью вызова функции GetDC. На основе полученного значения выбираем и
устанавливаем формат пиксела. Формат пикселаэто структура на С или, как в данном
случае, запись на ObjectPascal типа
TPixelFormatDescriptor. В документации эта
структура содержит следующие поля:
typedef struct tagPIXELFORMATDESCRIPTOR { // pfd
WORD nSize;//размер структуры данных
WORD nVersion;//версия структуры данныхвсегда 1.
DWORD dwFlags;//битовые флаги, например: PFD_SUPPORT_GDI
BYTE iPixelType;//тип пиксела: PFD_TYPE_RGBA или
//PFD_TYPE_COLORINDEX
BYTE cColorBits;//битов для описания цвета пиксела, кроме Alpha
BYTE cRedBits;//битов красной компоненты пиксела
BYTE cRedShift;
BYTE cGreenBits; //битов зеленой компоненты пиксела
BYTE cGreenShift;
BYTE cBlueBits; //битов синей компоненты пиксела
Основы компьютерной графики для программистов                                                                  66
____________________________________________________________________________________________________________________



Контекст воспроизведения
Рассмотрим процедуру FormCreate, которая выполняет подготовительные действия для
работы с OpenGL. Главное, что здесь требуется – создание контекста воспроизведения
OpenGL и установка его текущим. OpenGL недостаточно просто ссылки на окно
Windows или контекст устройства. Контекст воспроизведения связывает окно с так
называемым конвейером OpenGL с учетом установленного формата пикселов.
procedure TfrmGL.FormCreate(Sender: TObject);
  var
    pfd          : TPixelFormatDescriptor;
    nPixelFormat : integer;
begin
  hdc := GetDC (Panel1.Handle);
  FillChar(pfd,SizeOf(pfd),0);
  pfd.nSize:= SizeOf(pfd);
  pfd.dwFlags:=PFD_DOUBLEBUFFER;
  nPixelFormat:= ChoosePixelFormat(hdc,@pfd);
    if nPixelFormat = 0 then
    begin
       ShowMessage(‘Ошибка OpenGL’);
       Halt;
    end;

     SetPixelFormat(hdc,nPixelFormat,@pfd);
     RContext := wglCreateContext(hdc);
     WglMakeCurrent(hrc,RContext);

   glClearColor (0.0, 0.0, 0.0,1.0); // цвет фона
   glEnable(GL_DEPTH_TEST);
   SphereObj:=gluNewQuadric;
   CylObj     :=gluNewQuadric;
   LightObj :=gluNewQuadric;
end;
Первый оператор в этой процедуре – получение оконного контекста устройства с
помощью вызова функции GetDC. На основе полученного значения выбираем и
устанавливаем формат пиксела. Формат пиксела – это структура на С или, как в данном
случае, запись на ObjectPascal типа TPixelFormatDescriptor. В документации эта
структура содержит следующие поля:
typedef struct tagPIXELFORMATDESCRIPTOR { // pfd
    WORD nSize;//размер структуры данных
    WORD nVersion;//версия структуры данных – всегда 1.
    DWORD dwFlags;//битовые флаги, например: PFD_SUPPORT_GDI
     BYTE iPixelType;//тип пиксела: PFD_TYPE_RGBA или
   //PFD_TYPE_COLORINDEX
    BYTE cColorBits;//битов для описания цвета пиксела, кроме Alpha
    BYTE cRedBits;//битов красной компоненты пиксела
    BYTE cRedShift;
    BYTE cGreenBits; //битов зеленой компоненты пиксела
    BYTE cGreenShift;
    BYTE cBlueBits; //битов синей компоненты пиксела

http://www.ksu.ru/persons/9134.ru.html