background image

Grafika komputerowa

background image

Czym jest OpenGL ?

OpenGL(Open  Graphics  Library)  jest  biblioteką  graficzną 
służącą  do  generowania  w  czasie  rzeczywistym  grafiki 
trójwymiarowej. 
W  skład  biblioteki  wchodzi  kilkaset  funkcji  udostępniających 
możliwość 

wykorzystania 

sprzętu 

do 

generowania 

trójwymiarowych obrazów.

background image

Materiały o OpenGL

http://nehe.gamedev.net/

Andrzej 

Orłowski

background image

OpenGL działa w architekturze klient – serwer. 

Klientem  jest  aplikacja  wykorzystująca  OpenGL,  która  zleca 
operacje graficzne do wykonania, a serwerem aktualnie używana 
implementacja OpenGL (np. w sterowniku karty graficznej).

Opis działania

Budowa  sceny  odbywa  się  przez  zapisywanie  kolejnych  kroków 
koniecznych  do  jej  odtworzenia.  Każdy  krok  to  wywołanie 
odpowiedniej funkcji biblioteki.

background image

GLU (GL Utility library) : umożliwia łatwe tworzenie często używanych 
brył  –  kula, stożek, widoków perspektywicznych, kamery

Biblioteki pomocnicze

GLUT (GL Utility Toolkit) : umożliwia tworzenie i zarządzanie 
oknami, monitorowanie myszy i klawiatury, rysowanie 
podstawowych brył geometrycznych

background image

Tworzenie  pierwotnych  obiektów  graficznych  (tzw.  prymitywów) 
na  scenie  graficznej  odbywa  się  w  standardzie  OpenGL  za 
pomocą  poleceń  o  ujednoliconej  strukturze.  Rodzaj  tworzonego 
obiektu  określa  się  za  pomocą  parametrów  wywołania  funkcji 
glBegin().  Wraz  ze  swoim  odpowiednikiem,  glEnd(),  tworzy  ona 
swoiste  „nawiasy”  obejmujące  całość  procedury  rysowania 
obiektu.

Struktura polecenia OpenGL:

 

Większość  poleceń  OpenGL  jest  ponadto  niezależna  od  rodzaju 
obiektu  docelowego,  co  oznacza,  że  efekt  ich  użycia  względem 
dowolnego obiektu będzie zawsze taki sam.

Przykład:      glColor3f(0.5, 0.5, 0.5)

background image

Etapy tworzenia grafiki

  Inicjalizacja podsystemu OpenGL

  Przygotowanie środowiska do utworzenia obiektów 

  Zdefiniowanie procesów transformacji obiektów 

pierwotnych 

  Generowanie obiektów pierwotnych 

  Wymiana powierzchni -  tylko dla operacji 

wykorzystujących podwójne buforowanie

background image

przygotowania środowiska operacyjnego do wywołań funkcji OpenGL

Inicjalizacja podsystemu 
OpenGL

procedure setupPixelFormat(DC:HDC);

const

   pfd:TPIXELFORMATDESCRIPTOR = (

      …

   );

var pixelFormat:integer;

begin

   pixelFormat := ChoosePixelFormat(DC, @pfd);

   if (pixelFormat = 0) then begin

      exit;

   end;

   if (SetPixelFormat(DC, pixelFormat, @pfd) <> TRUE) 
then begin

      exit;

   end;

end; 

background image

określenie widoków

Inicjalizacja podsystemu 
OpenGL

glViewport(x, y, w, h : 
integer); 

x i y- definiuje położenie lewego 
dolnego 

wierzchołka okna widoku

w - definiuje szerokość okna 

h - definiuje wysokość okna

background image

rzutowanie

Inicjalizacja podsystemu 
OpenGL

glOrtho(left, right, bottom, top, near, 
far : GLfloat); 

left - określa współrzędne x lewej płaszczyzny 
obcinania

right - określa współrzędne x prawej płaszczyzny 
obcinania, 

bottom - określa współrzędne y dolnej płaszczyzny 
obcinania, 

top - określa współrzędne y górnej płaszczyzny 
obcinania, 

near - określa współrzędne przedniej płaszczyzny 
obcinania, 

far - określa współrzędne tylnej płaszczyzny 
obcinania, 

background image

rzutowanie

Inicjalizacja podsystemu 
OpenGL

gluPerspective (fov, aspect, near, far : 
GLfloat);

 

fov - określa kąt widzenia, czyli rozwartość ostrosłupa 
ograniczającego widoczny wycinek sceny, 
aspect - wyznacza proporcję szerokości przekroju 
ostrosłupa do jego wysokości,
near - określa współrzędne z przedniej płaszczyzny 
obcinania, 
far - określa współrzędne z tylnej płaszczyzny obcinania, 

background image

Inicjalizacja podsystemu 
OpenGL

procedure GLInit;

begin

   glViewport(0,0,400,400);

   
glMatrixMode(GL_PROJECTION);

   glLoadIdentity;

   glOrtho(-200,200,-200,200,-
200,200);

   
glMatrixMode(GL_MODELVIEW);

   glLoadIdentity;

end;

procedure TForm1.FormCreate(Sender: 
TObject);

var 

    DC:HDC;

    RC:HGLRC;

    i:integer;

begin

   DC:=GetDC(Panel1.Handle);

   SetupPixelFormat(DC);

   RC:=wglCreateContext(DC);

   wglMakeCurrent(DC, RC);

   GLInit;

end; 

background image

światło

Przygotowanie 
środowiska ...

background image

Przygotowanie środowiska ...

glLight*(Numer_Lampy, Właściwość : enum, Wsk_Kolorów : 
GLfloat); 

Wartości parametru Właściwość:

GL_AMBIENT – światło rozproszone

GL_POSITION – pozycja źródła światła

GL_SPECULAR – światło odbite

W celu utworzenia efektu światła 
należy: 

  wywołać procedurę glEnable(GL_LIGHTING) 

    włączyć  jedną  z  kilku  lamp  przy  pomocy  procedury 
glEnable(GL_LIGHT0).          Parametrem  procedury  może  być  jedna      z 
wartości GL_LIGHT0 do GL_LIGHT7

  wywołać  procedury  odpowiedzialne  za  poszczególne  typy 
oświetlenia 

światło

background image

Przygotowanie 
środowiska ...

 
var
   amb : TGLArrayf4 = (0.2,0.3,0.0,0.0);
   pos : TGLArrayf4 = (-100,100,0.0,0.0);

procedure TForm1.FormCreate(Sender: TObject);
var 
    DC:HDC;
    RC:HGLRC;
    i:integer;
begin
   DC:=GetDC(Panel1.Handle);
   SetupPixelFormat(DC);
   RC:=wglCreateContext(DC);
   wglMakeCurrent(DC, RC);
   GLInit;

   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glLightfv(GL_LIGHT0,GL_Ambient, @amb);
   glLightfv(GL_LIGHT0,GL_Position, @pos);
end;

światło

background image

materiał

Przygotowanie środowiska ...

GlMaterialfv(Strona, Właściwość : Glenum, Wskaźnik_Kolorów 
: PGLInt);

GlMaterialf(Strona, Właściwość : Glenum, Wskaźnik_Kolorów : 
GLFloat); Wartości parametru Właściwość:

GL_AMBIENT – kolor w świetle 
otoczenia

GL_DIFFUSE – kolor w świetle 
rozproszonym

GL_SHININESS – współczynnik odbicia

Wartości parametru 
Strona:
GL_FRONT
GL_BACK
GL_FRONT_AND_BACK

Var
   mat_ambient     : array [0..3] of GLfloat = ( 1.0, 
1.0, 1.0, 1.0 ); 
...
glMaterialfv(GL_FRONT, GL_AMBIENT, 
@mat_ambient); 

background image

Transformacje ...

Przesunięcie:

glTranslatef (x, y, z : gldouble); 

x, y z określają współrzędne wektora 
przesunięcia 

Obrót:

Skalowanie:

glRotatef(kąt, x, y, z : glfloat); 
x, y, z określają współrzędne wektora osi  

glScalef(x, y, z : glfloat);

 

xy z określają wartości powiększenia wzdłuż 
poszczególnych osi

 

background image

Generowanie obiektów

Zestaw instrukcji rysujących 
prostokąt:

glBegin( GL_QUADS);

          

      glVertex3f( -30, 0, 0.0);

          

      glVertex3f( 0, -30, 0.0);

          

      glVertex3f( 30, 0, 0.0);

          

      glVertex3f( 0, 30, 0.0);

glEnd();

background image

Generowanie obiektów

background image

Generowanie obiektów

background image

Generowanie obiektów

background image

Generowanie obiektów

background image

Wymiana powierzchni

Ostatni etap składa się tylko z jednej funkcji SwapBuffers() i dotyczy 
tylko operacji wykorzystujących podwójne buforowanie.

background image

Przykłady programów ...


Document Outline