OK, ich hab's jetzt selbst ausprobiert, mein Vorschlag oben hat nichts gebracht.
In dem Code unten sieht man die Kugel. Das sind die Änderungen:
- mit gluLookAt (im Wirkungsbereich der ModelViewMatrix) wird festgelegt, wo die Kamera sitzt (die ersten drei Parameter, hier 60 Einheiten vor dem Bildschirm in Höhe der Bildschirmmitte), wo sie hinblickt (zum Ursprung 0,0,0), und wie die Vertikale verläuft (in y-Richtung nach oben)
- die Translate und Rotate-Aufrufe sind entfernt
- die rote Farbe wird mit glColor3f(1,0,0) gesetzt, nicht mit glColor3b(1,0,0) - letzteres will bytes, 1,0,0 ist also nahezu schwarz.
Versuche, ausgehend von diesem Beispiel, zu verstehen, was passiert, wenn du glTranslate und glRotate einführst. Mache nur kleine Schritte, sonst wandert die Kugel leicht aus dem Blickfeld. Achte auf die Reihenfolge: zuerst Translate, dann Rotate ist nicht dasselbe wie zuerst Rotate, dann Translate. Und die Reihenfolge spielt auch bei den verschiednen Rotationen um die verschiedenen Achsen eine Rolle. Das musst du unbedingt verstehen, vorher ist OpenGL eine heillose Raterei! Mache dir immer klar, wo die Kamera sitzt und wo sie hinschaut, und wo die Objekte der Szene sind. Kann die Kamera die Objekte sehen? Ich finde: eine phantastische Übung für räumliches Vorstellungsvermögen.
Code: Alles auswählen
procedure TForm1.OpenGLControl1Paint(Sender: TObject);
var
quadric : PGLuquadric;
begin
// Screen- und Tiefenbuffer bereinigen
glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT ); // Clear the Screen and the Depth
// Width & Height existieren bereits in der Unit CONTROLS
glMatrixMode(GL_PROJECTION); // Zvolí projekèní matici
glLoadIdentity(); // Reset matice
gluPerspective(65.0,Width/Height,0.1,100.0); // Výpoèet perspektivy
glViewport(0, 0, Width, Height); // Resetuje aktuální nastavení
glMatrixMode(GL_MODELVIEW); // Zvolí matici Modelview
glLoadIdentity; // Reset the Current ModelView Matrix
gluLookAt(0,0,60, 0,0,0, 0,1,0);
glEnable(gl_normalize);
//glPushMatrix(); // Startsystem wird gespeichert
glLineWidth(1);
glColor3f(1,0,0);
quadric:=gluNewQuadric();
gluQuadricOrientation(quadric,glu_outside);
gluQuadricTexture(quadric,gl_false);
gluQuadricDrawStyle(quadric, GLU_FILL);
glShademodel(gl_flat);
gluQuadricTexture(quadric, gl_false);
gluSphere(quadric, 30, 40, 40);
gluDeleteQuadric(quadric);
//glPopMatrix();
OpenGLControl1.SwapBuffers;
end;