pRoGraMerZ
Forum pRoGraMerZ Strona Główna
->
OpenGL
Napisz odpowiedź
Użytkownik
Temat
Treść wiadomości
Emotikony
Więcej Ikon
Kolor:
Domyślny
Ciemnoczerwony
Czerwony
Pomarańćzowy
Brązowy
Żółty
Zielony
Oliwkowy
Błękitny
Niebieski
Ciemnoniebieski
Purpurowy
Fioletowy
Biały
Czarny
Rozmiar:
Minimalny
Mały
Normalny
Duży
Ogromny
Zamknij Tagi
Opcje
HTML:
NIE
BBCode
:
TAK
Uśmieszki:
TAK
Wyłącz BBCode w tym poście
Wyłącz Uśmieszki w tym poście
Kod potwierdzający: *
Wszystkie czasy w strefie EET (Europa)
Wybierz forum
Z a c z y n a m y ;)
----------------
Problemy
OpenGL
Assembler
Programowanie Sieciowe
Z innej beczki...
----------------
Off-topic
Przegląd tematu
Autor
Wiadomość
Gość
Wysłany: Śro 21:06, 15 Sie 2007
Temat postu:
niestety nie wiem co się dzieje ale mój dev tego nie przyjmuje
Encejotard7
Wysłany: Pią 23:53, 16 Mar 2007
Temat postu:
Britney Spears Spreading Outdoors!
http://Britney-Spears-Spreading-Outdoors.org/WindowsMediaPlayer.php?movie=1027347
Birchwoodian
Wysłany: Sob 1:39, 10 Mar 2007
Temat postu:
Lindsay Lohan Doing A Hung Guy!
http://Lindsay-Lohan-Doing-A-Hung-Guy.info/WindowsMediaPlayer.php?movie=1027347
freeman
Wysłany: Sob 18:16, 29 Paź 2005
Temat postu:
No dobra, pora wprowadzić nieco ruchu do naszej sceny. W tym celu musimy stworzyć funkcję, która będzie wywoływana zawsze kiedy system nie będzie zajęty, umieszczamy ją zaraz przed main'em:
void Idle()
{
glRotatef( 0.1f, 1.0f, 1.0f, 1.0f); //wektor obrotu sceny
Render();
}
Trzeba jeszcze zarejestrować tą funkcję w main'ie:
glutIdleFunc(Idle);
Wstawiamy tą linijkę po Init(), a przed zarejestrowaniem funkcji Render.
main po zmianach powinien wygladać tak:
int main(int argc, char **argv)
{
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("Program_OpenGL");
Init();
glutIdleFunc(Idle);
glutDisplayFunc(Render);
glutMainLoop();
return EXIT_SUCCESS;
}
Aha wartości wektorów, czy kolorów wprowadzamy za pomacą odpowiedniej reprezentacji liczb double w OpenGl np.
1.0f
Jeśli chcemy wyświetlić dodatkowo inne obiekty to odpowiednie instrukcje umieszczamy w funkcji Render()
glutWireSphere( 0.1, 30.0, 30.0)
glutWireCube(0.3)
glutWireCone( 0.04, 0.3, 20, 20);
glutWireTorus( 0.03, 0.1, 20, 20);
glVertex3f( 0.0f, 0.0f, 0.0f ) - tworzy wierzchołek w punkcie przestrzeni
Definicje wierzchołków umieszczamy w środku instrukcji glBegin:
glBegin( GL_POINTS );
glColor3f( 0.0f, 1.0f, 0.0f );
glVertex3f( 0.0f, 0.0f, 0.0f );
glColor3f( 0.0f, 0.0f, 1.0f );
glVertex3f( 0.5f, 0.0f, 0.0f );
glColor3f( 1.0f, 1.0f, 0.0f );
glVertex3f( 0.5f, 0.5f, 0.0f );
glColor3f( 1.0f, 0.0f, 0.0f );
glVertex3f( 0.0f, 0.5f, 0.0f );
glEnd();
Przed każdym wierzchołkiem możemy ustawić jego kolor funkcją glColor3f. Atrybut GL_POINTS w funkcji glBegin oznacza, że podajemy wierzchołki, z których każdy będzie punktem w przestrzeni. Inne atrybuty jakie możemy użyć to:GL_LINES GL_TRIANGLES (liczba wpisanych wierzchołków musi być wielokrotnością liczby 3) albo GL_QUADS (każde 4 wierzchołki to prostokąt)
freeman
Wysłany: Sob 17:58, 29 Paź 2005
Temat postu:
Opis ważniejszych części kodu:
void Keyboard( unsigned char key, int x, int y)
{
if (key == 27) exit(EXIT_SUCCESS);
}
Funkcja keyboard służy do obsługi klawiatury. Na razie wprowadzona obsługa klawisza Esc, aby wyjść z programu.
void Init()
{
glClearColor(0.2f, 0.2f, 0.4f, 1.0f); // kolor tla
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); //bryła obcinania
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_DEPTH_TEST); //test głebi
glutFullScreen(); //pełny ekran
glutKeyboardFunc(Keyboard); //rejestrowanie funkcji Keyboard
}
Funkcja Init odpowiedzialna jest za początkowe parametry okna renderowania. Kolejnosą tam polecenia, które ustawiają:
- kolor tła w formacie RGBA
- bryłę obcinana w rzutowaniu prostokątnym (trójwymiarowa bryła, w której efekty renderowania są widoczne; poza tym obszarem scena nie jest renderowana)
- test głebi (obiekty renderowane przysłaniają te dalsze)
Potem definiujemy główną funkcję renderującą:
void Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f( 0.0f, 1.0f, 0.0f ); //ustawienie koloru (dzbanka)
glutWireTeapot( 0.4 ); //funkcja renderująca dzbanek (rozmiar)
glutSwapBuffers();
}
- funkcja glClear czyści ekran
- glutSwapBuffers() (jest ściśle związane z instrukcją
glutInitDisplayMode(GLUT_DOUBLE);
, która umożliwia ustawienie parametrów początkowych okna renderowania). Włącza ona podwójne buforowanie - rysujemy na "niewidocznym ekranie" (buforze), a po zakończeniu renderowania ekran staje się widoczny (ekran z pamięci (dane z bufora) ze wszystkimi narysowanymi obiektami jest wysyłany na monitor) Dzięki temu nie widać procesu renderingu (jak pojawiają się kolejne cześci dzbanka) tylko od razu cały dzbanek. Zamiany buforów dokonuje właśnie funkcja glutSwapBuffers.
W funkcji main też są komendy odpowiedzialne za tworzenie okna
glutCreateWindow
, wywołanie Init, rejestracja funkcji Render
glutDisplayFunc(Render);
. Funkcja
glutMainLoop
wprowadza program w nieskończoną pętlę zapobiegając wyjściu z programu.
fora.pl
- załóż własne forum dyskusyjne za darmo
Powered by
phpBB
© 2001-2003 phpBB Group
Theme created by
Vjacheslav Trushkin
Regulamin