[Kurs OpenGL, C++] II Pier

background image

Strona główna

Kursy

Artykuły

Forum

Pliki

Promuj Nas!

[Kurs OpenGL, C++] II. Pierwszy program

http://kursy.ddt.pl/?LessonId=176

1 z 4

2010-04-30 14:21

background image

Powrót

Historia odwiedzonych stron

Poprzednia lekcja

Kurs OpenGL, C++

Następna lekcja

Autor: Janusz Ganczarski

http://januszg.hg.pl/opengl/

II. Pierwszy program

Pierwszy program korzystajacy z biblioteki OpenGL jest oczywiscie bardzo prosty. Wyswietlimy w oknie o

rozmiarach 400 × 400 pikseli kwadrat o bokach jednostkowych. Program składa sie z trzech zasadniczych
elementów. Pierwszy to funkcja rysujaca scene 3D, drugim jest inicjacja okna renderingu a trzecim obsługa menu
podrecznego.

Poniższy rysunek przedstawia program, jaki zostanie napisany w oparciu o wiedzę zdobytą w niniejszym

rozdziale.

Rysunek 1. Okno początkowe programu K wadrat 1

2.1. Rysowanie sceny 3D

Rysowanie, czy tez jak przyjeło sie to nazywac, renderowanie sceny 3D, składa sie z kilku kroków. Z uwagi

na prostote programu etapy występujące w pierwszym programie nie przedstawiaja kompletnego schematu
tworzenia sceny 3D.

2.1.1. Kolor tła

Pierwszym etapem tworzenia sceny 3D, który realizuje funkcja Display, jest okreslenie koloru tła, czyli

wartosci jakimi zostanie wypełniony bufor koloru. Realizuje to funkcja:

void

glClearColor (GLclampf red, GLclampf green, GLclampf blue,GLclampf

alpha)

której parametry red, green, blue okreslaja wartosci składowych koloru, a parametr alpha wartosc

składowej kanału alfa (stopien przezroczystosci piksela). Wartosci wszystkich parametrów funkcji glClearColor
powinny zawierac sie w przedziale [0, 1]. Parametry przekraczajace powyzszy zakres zostana odpowiednio
przyciete: mniejsze od 0 przyjma wartosc 0, wieksze od 1 wartosc 1. Domyslne podczas czyszczenia bufora
koloru uzywa sie koloru (0, 0, 0, 0).

2.1.2. Czyszczenie bufora koloru

Po okresleniu koloru tła przystepujemy do wyczyszczenia tła, czyli wypełnienia zawartosci bufora koloru.

Wykonuje to funkcja:

void

glClear (GLbitfield mask)

której na razie jedynym parametrem jest stała GL COLOR BUFFER BIT okreslajaca jaki element bufora

ramki ma zostac wypełniony.

2.1.3. Kolor obiektu

Kolejnym etapem tworzenia naszej sceny 3D jest okreslenie koloru obiektu. Wykorzystamy do tego celu

jedna z funkcji z rodziny glColor:

void

glColor3f (GLfloat red, GLfloat green, GLfloat blue)

której parametry red, green, blue okreslaja wartosci składowych koloru. Zakres tych wartosci powinny

zawierac sie w przedziale [0, 1]. Wartosci znajdujące sie poza tym przedziałem zostana odpowiednio przyciete.

Uwazny Czytelnik zapyta zapewne dlaczego dla koloru obiektu nie określamy wartosci składowej alfa. Jest

to oczywiscie mozliwe - rodzina funkcji glColor zawiera takze funkcje okreslajace kolor na podstawie czterech
składowych. Jezeli jednak zdecydujemy sie na okreslanie tylko składowych RGB, składowa alfa przyjmuje
domyslna wartosc 1,0 (całkowita nieprzezroczystosc).

2.1.4. Definiowanie obiektu

P anel Logowania

dast19

Administracja

Twój profil

Wyloguj

Uż yt kowników

Obecnie aktywnych:

16

Zalogowanych:

2

Zarejestrowanych:

3855

Ostatnie 24h:

646

Non-cookie 24h:

2051

Wszystkich:

178944

O c z e kuj ąc e t e mat y

Lista jest pusta.

Pokaż wszystkie (0)

Os tatnia Aktualizacja

2010-04-29 22:01:07

(wczoraj)

O st atnio akt ywni

dast19

0 min

Piotr Szawdyński

3 min

Iname

(√ιק)

15 min

szywro5

27 min

Saiph

32 min

markon

55 min

imandre

73 min

WunM

91 min

kuba1817

2 godz

killersft

2 godz

fish13

2 godz

kizia

2 godz

[Kurs OpenGL, C++] II. Pierwszy program

http://kursy.ddt.pl/?LessonId=176

2 z 4

2010-04-30 14:21

background image

Definiowanie obiektów w OpenGL rozpoczyna wywołanie funkcji:

void

glBegin (GLenum mode)

która okresla rodzaj generowanego prymitywu lub prymitywów. W pierwszym programie traktujemy

kwadrat jako szczególny przypadek wielokata, stad stała GL POLYGON. Kolejne wierzchołki kwadratu
okreslamy przy pomocy funkcji:

void

glVertex3f (GLfloat x, GLfloat y, GLfloat z)

która nalezy do rodziny obszernej funkcji glVertex. Jezeli uwaznie popatrzymy na współrzedne

wierzchołków rysowanego kwadratu, to zauwazymy, ze zawiera sie on w płaszczyznie o równaniu Z = 0. W takim
przypadku do definiowania współrzednych wierzchołków obiektów mozna takze zastosowac funkcje glVertex2,
która pozwala okreslic dwie pierwsze współrzędne wierzchołków, trzeciej nadajac wartosc 0.

Definiowane współrzednych wierzchołków obiektu obowiazkowo konczy wywołanie funkcji:

void

glEnd (

void

)

Specyfikacja biblioteki nie pozwala na uruchamianie wszystkich polecen OpenGL pomiedzy para wywołan

funkcji glBegin i glEnd. Co do zasady moga sie tam znalezc polecenia generujace obiekty sceny. Wywołanie
niedozwolonej funkcji powoduje zgłoszenie błedu, ale nie przerywa działania programu.

2.1.5. Wykonanie polecen OpenGL i zamiana buforów koloru

To w jaki sposób biblioteka utworzy scene 3D, po wywołaniu wszystkich funkcji tworzacych jej elementy,

zalezy oczywiscie od konkretnej implementacji. Jednak wywołujac funkcje:

void

glFlush (

void

)

mozemy wymusic wykonanie wszystkich dotychczasowych polecen. Ma to szczególne znaczenie, gdy dana

implementacja stosuje bufory polecen, a zalezy nam na wykonaniu czesci zadan. Koncowym elementem
tworzenia sceny 3D jest zamiana buforów koloru, co w przypadku stosowania biblioteki GLUT realizuje funkcja:

void

glutSwapBuffers (

void

)

2.2. Tworzenie okna renderingu

Okno renderingu tworzone jest funkcji main programu. Inicjalizacje bufora ramki wykonuje funkcja:

void

glutInitDisplayMode (

unsigned

int

mode)

W przykładowym programie wartosc parametru mode decyduje, ze bufor ramki zawiera dwa bufory koloru

(stała GLUT DOUBLE), które pracuja w trybie RGB (stała GLUT RGB).

Rozmiar okna renderingu, w którym bedzie rysowana scena 3D okresla funkcja:

void

glutInitWindowSize (

int

width,

int

height)

której parametry width i height oznaczaja odpowiednio szerokosc i wysokość obszaru dostepnego do

renderingu. Warto zauwazyc, ze wielkosc okna jakie zostanie utworzone po wywołaniu funkcji:

int

glutCreateWindow (

char

*name)

jest zalezna od systemu operacyjnego i jest tak dobrane aby obszar dostępny do renderingu miał wczesniej

okreslone rozmiary. W przykładowym programie obszar renderingu jest stały - zmiana rozmiaru okna (funkcja
Reshape) nie modyfikuje jego rozmiarów. Zmiana rozmiaru okna nie powoduje zmiany wielkosci ani
przemieszczenia rysowanego kwadratu.

Ostatnim etapem tworzenia okna renderingu jest dołaczenie funkcji generującej scene 3D (Display) oraz

funkcji wywoływanej przy zmianie rozmiarów okna (Reshape). Realizuja to funkcje:

void

glutDisplayFunc (

void

(*func)(

void

));

void

glutReshapeFunc (

void

(*func)(

int

width,

int

height));

2.3. Obsługa menu podręcznego

Menu podreczne tworzy funkcja:

int

glutCreateMenu (

void

(*func)(

int

value))

której parametrem jest wskaznik do funkcji obsługi komunikatów menu (w programie funkcja Menu) a

zwracana wartosc to unikatowy numer menu.

Dodanie kolejnych pozycji do menu podrecznego umozliwia funkcja:

void

glutAddMenuEntry (

char

*name,

int

value)

której parametry to nazwa pozycji menu i numer (unikatowy) przekazywany w przypadku wybrania tej

pozycji do funkcji obsługujacej komunikaty menu. W tym i dalszych programach unikatowosc numerów menu
zapewnia zastosowanie typu wyliczeniowego. W pierwszym programie menu ma minimalna zawartosc -
umozliwia jedynie wyjscie z programu. Z uwagi na róznice w kodowaniu polskich znaków w róznych systemach
operacyjnych wywołanie tej funkcji ujete zostało w bloku instrukcji warunkowych preprocesora:

#ifdef WIN32
#else
#endif

Ostatnia operacja przy tworzeniu menu podrecznego jest wywołanie funkcji okreslajacej, który przycisk

myszki aktywuje menu:

void

glutAttachMenu (

int

button)

Mozliwe sa nastepujace wartosci parametru button:

GLUT LEFT BUTTON - lewy przycisk myszki,
GLUT MIDDLE BUTTON - srodkowy przycisk myszki,
GLUT RIGHT BUTTON - prawy przycisk myszki.

[Kurs OpenGL, C++] II. Pierwszy program

http://kursy.ddt.pl/?LessonId=176

3 z 4

2010-04-30 14:21

background image

2.4. Plik kwadrat1.cpp

Rysunek 1. Okno początkowe programu K wadrat 1

Początkowe okno programu kwadrat1.cpp, którego tekst zródłowy znajduje sie ponizej, przedstawia rysunek

1.

/*
(c) Janusz Ganczarski (Power)
http://www.januszg.hg.pl
JanuszG(małpeczka)enter.net.pl
*/

#include <GL/glut.h>
#include <stdlib.h>

// funkcja generująca scenę 3D

void

Display ()

{

// kolor tła - zawartość bufora koloru

glClearColor (1.0,1.0,1.0,1.0);

// czyszczenie bufora koloru

glClear (GL_COLOR_BUFFER_BIT);

// kolor kwadratu

glColor3f (1.0,0.0,0.0);

// początek definicji wielokąta

glBegin (GL_POLYGON);

2.5. Źródło materiału

Materiał został pobrany ze strony

http://januszg.hg.pl/opengl/

, za uprzednim otrzymaniem zgody od jego

autora. Podziekowania dla

Janusza Ganczarskiego

za udostępnienie materiałów

Poprzednia lekcja

Kurs OpenGL, C++

Następna lekcja

Wsz e lkie prawa z ast rz e ż one . Aut or: ź ródło z e wnę t rz ne

Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub
rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.

Powrót

Historia odwiedzonych stron

O portalu

Archiwum

Historia

Indeks

Regulamin

Wyszukiwarka

Linki

© Wszelkie prawa zastrzeżone 2005-2010

Czas wygenerowania strony: 0.357s

Autor: Piotr Szawdyński

[Kurs OpenGL, C++] II. Pierwszy program

http://kursy.ddt.pl/?LessonId=176

4 z 4

2010-04-30 14:21


Wyszukiwarka

Podobne podstrony:
C Praktyczny kurs Wydanie II cshpk2
cdvdk2 7 nagrywanie plyt cd i dvd kurs wyd ii ebook promocyjny helion pl KITBJ4T5RRGTF67ZZFKX5K5G7OG
Wirtualny Kurs Huny II, ZDROWIE, UZDRAWIANIE, HUNA, Huna kurs
Krótki kurs C Część II
Internet Kurs Wydanie II
Internet Kurs Wydanie II inkur2
[Kurs OpenGL, C++] VII Wie
[Kurs OpenGL, C++] VIII Ko
[Kurs OpenGL, C++] IV Prze
PHP 5 Praktyczny kurs Wydanie II
PHP 5 Praktyczny kurs Wydanie II 2
[Kurs OpenGL, C++] III Def
[Kurs OpenGL, C++] VI Elem
Kurs szydełkowania II
[Kurs OpenGL, C++] V Okraw
informatyka php 5 praktyczny kurs wydanie ii marcin lis ebook
[Kurs OpenGL, C++] I Podstawy

więcej podobnych podstron