freeman |
Administrator |
|
|
Dołączył: 20 Paź 2005 |
Posty: 9 |
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
|
|
|
|
|
|
|
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) |
|