procedure TFrmOpenGL.SetupGLInit(Sender: TObject);
Begin
...
glClearColor( 0, 0, 0, 1 );
glEnable( GL_DEPTH_TEST );
Sphere := glGenLists( 1 );
glNewList( Sphere, GL_COMPILE );
CreerSphere( 30, 30, 5.0 );
glEndList();
...
End;
Procedure TFrmOpenGL.CreerSphere( Const NbParalleles :GLint;
Const NbMeridiens :GLint;
Const Rayon :GLdouble );
Const
DOUBLE_PI = 2 * PI;
Var
I, J :Integer;
Theta,Theta2 :GLfloat;
Phi :GLfloat;
Vx, Vy, Vz :GLdouble;
begin
glPushMatrix();
For I := 0 To NbParalleles Do
Begin
glBegin( GL_TRIANGLE_STRIP );
Theta := I * DOUBLE_PI / NbParalleles;
Theta2 := (I + 1) * DOUBLE_PI / NbParalleles;
For J := 0 To NbMeridiens Do
Begin
Phi := J * DOUBLE_PI / NbMeridiens;
Vx := Cos(Theta) * Cos(Phi);
Vy := Cos(Theta) * Sin(Phi);
Vz := Sin(Theta);
glNormal3f( Vx, Vy, Vz );
glVertex3d( Rayon * Vx, Rayon * Vy, Rayon * Vz );
Vx := Cos(Theta2) * Cos(Phi);
Vy := Cos(Theta2) * Sin(Phi);
Vz := Sin(Theta2);
glNormal3f( Vx, Vy, Vz );
glVertex3d( Rayon * Vx, Rayon * Vy, Rayon * Vz );
End;
glEnd();
End;
glPopMatrix;
End;
procedure TFrmOpenGL.SetupGLDraw(Sender: TObject);
Begin
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT);
glClearColor( 0.0, 0.0, 0.0, 1.0 );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslated( 0.0, 0.0, -20.0 );
glCallList( Sphere );
SwapBuffers( Canvas.Handle );
End;
|