Problem bei Kugeldarstellung mittels gluQuadric

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

Problem bei Kugeldarstellung mittels gluQuadric

Beitragvon wegnera » 27. Jan 2017, 11:21 Problem bei Kugeldarstellung mittels gluQuadric

Ich bekomme immer nur ein schwarzes Fenster :cry:
Nachdem ich mich an den normalen 2D und 3D Objekten mittels GL versucht habe, wollte ich mich nun mal an eine Kugel wagen und diese mittels gluQuadric darstellen. Der Compiler zeigt auch keinen Fehler an, dennoch sehe ich nur einen schwarzen Bildschirm. Ich habe schon probiert die Perspektive anzupassen usw. Vielleicht hat jemand noch einen Idee.

danke euch
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
wegnera
 
Beiträge: 14
Registriert: 21. Jan 2017, 16:21

Beitragvon wp_xyz » 27. Jan 2017, 14:08 Re: Problem bei Kugeldarstellung mittels gluQuadric

Ich sehe hier nirgendwo ein glTranslate. Ich denke, du sitzt mitten in der Kugel...

Der Radius der Kugel ist 30 (der 2.Parameter von gluSphere. Daher schiebe mal die Kugel das doppelte, also etwa 60 Einheiten von dir weg: glTranslate(0, 0, -60) (die 3.Koordinaten ist in den Bildschirm hinein, ich bin aber nicht sicher, ob das Vorzeichen stimmt, probier's auch mit +60), statt den beiden glRotate (ohne die Translation wird nur die Kugel gedreht, in der du sitzt - da ändert sich nichts).
wp_xyz
 
Beiträge: 2533
Registriert: 8. Apr 2011, 08:01

Beitragvon wp_xyz » 27. Jan 2017, 15:20 Re: Problem bei Kugeldarstellung mittels gluQuadric

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;
wp_xyz
 
Beiträge: 2533
Registriert: 8. Apr 2011, 08:01

Beitragvon wegnera » 27. Jan 2017, 18:29 Re: Problem bei Kugeldarstellung mittels gluQuadric

danke, jetzt sehe auch ich die Kugel. Zwei Verständnisfragen:

1. habe die Kugel als Gitternetz rendern lassen. Es sieht so aus als wenn ich von oben auf die Kugel schaue. Wenn ich die Kugel nun rotieren lasse, verändert sich die Sicht auf das Gitternetz oder bleibt die Polsicht erhalten? Ich sehe nämlich ersteinmal keine Veränderung bei rotate .

2. wo muss ich die transformationsbefehle hinpacken, vor oder nach dem erzeugen des Objektes?

gruß
Andreas
wegnera
 
Beiträge: 14
Registriert: 21. Jan 2017, 16:21

Beitragvon Mathias » 27. Jan 2017, 18:35 Re: Problem bei Kugeldarstellung mittels gluQuadric

Ich sehe nämlich ersteinmal keine Veränderung bei rotate .

Hast du auch mal versucht, um eine andere Achse zu rotieren ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3993
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 27. Jan 2017, 19:12 Re: Problem bei Kugeldarstellung mittels gluQuadric

Bei gluLookAt(0,0,60, 0,0,0, ...) liegt die Kamera 60 Einheiten vor dem Objekt (die z-Achse ragt aus dem Bildschirm) und sieht auf die Kugel (im Ursprung). Ich weiß nicht, wie gluSphere die Kugel konstruiert, aber ich könnte mir durchaus vorstellen, dass die Breitenkreise entlang der z-Achse verlaufen, das wäre in unserem Beispiel die Blickrichtung, so dass du direkt auf den Pol blickst.

Setze einfach die Kamera etwas höher (y=30) und nach links (x=-20) um einen anderen Blickwinkel zu haben. --> gluLookAt(-20, 30, 60, 0, 0, 0, ...).

Darüber hinaus kannst du natürlich auch spezielle Rotate und Translate-Befehle einsetzen. Ich meine, das muss alles vor der Objekterzeugung stehen, weil alle Operationen in der ModellView-Matrix zusammenmultipliziert werden, die dann auf die Vertices des Objects angewendet werden. Würden sie nach der Objekterzeugung stehen, wären sie wirkungslos, weil das Objekt schon behandelt worden ist, aber die nachfolgend erzeugten Objekte betreffen. Ich habe mir damals das so versucht zu merken, dass man den Quellcode praktisch von hinten nach vorne lesen muss.

Diese Befehlssquenz
- glRotate (um y)
- glTranslate (in x-Richtung)
- Gegenstand erzeugen
erzeugt demnach einen Gegenstand im Ursprung, verschiebt ihn horizontal z.B. nach rechts und führt dann eine Drehung um die nach oben weisende y-Achse aus. Wenn du mit einem Timer den Drehwinkel immer weiter vergrößerst würdest du eine Planetenbewegung des Gegenstands um den Ursprung sehen. (Ich hoffe das stimmt...)
wp_xyz
 
Beiträge: 2533
Registriert: 8. Apr 2011, 08:01

Beitragvon wegnera » 28. Jan 2017, 22:32 Re: Problem bei Kugeldarstellung mittels gluQuadric

Danke dir für die ausführliche Erklärung. Es hat soweit alles geklappt. Gibt es hinsichtlich der Matrizen, Perspektiven, usw. auch gut erklärende Literatur bei der man nicht ein Mathegenie sein muss.

Meine nächsten Schritte wären, die kugeln mit Oberflächen zu erzeugen und dann würde ich diese gerne auf einer Art Kreisbahn sich bewegen lassen.
wegnera
 
Beiträge: 14
Registriert: 21. Jan 2017, 16:21

Beitragvon pluto » 29. Jan 2017, 20:00 Re: Problem bei Kugeldarstellung mittels gluQuadric

Eine gute Anlauf stelle ist immer
www.delphigl.com

Dort gibt es gute und Ausführliche Tutorials. Das meiste sollte auch unter Lazarus laufen.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6534
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.1 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 29. Jan 2017, 20:11 Re: Problem bei Kugeldarstellung mittels gluQuadric

Eine gute Anlauf stelle ist immer
http://www.delphigl.com


Da ist der TE schon registriert.
Das stimmt für OpenGL spezifische Sachen, ist dies ein sehr gute Seite.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3993
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried