OpenGL: Kugeln darstellen



  • Da ich noch blutiger Anfänger im Bereich der "visuellen" Programmierung bin, brauche ich mal ein wenig Starthilfe: Ich habe bisher mit OpenGL 2-dimensionale Objekte gezeichnet und das lief ganz gut. Beim Erstellen 3-dimensionaler Objekte habe ich jetzt aber ein paar Schwierigkeiten, evt. sind diese auch allein im Verständnis begründet:
    Ich möchte eine Kugel zeichnen, leider scheint das nicht mit den zuvor benutzen Funktionen zu gehen (GL_TRIANGLE_FAN war das glaub' ich). Ich bin nun nach einigem Suchen immer wieder auf glutSolidSphere() gestoßen, allerdings scheint das ja kein Teil vom eigentlichen OpenGL mehr zu sein. Zudem werden Kugeln angeblich stets im Zentrum des Koordinatensystems erzeugt, das kann ich aber gar nicht gebrauchen.

    Es wäre ganz nett, wenn mir jemand grob sagen könnte, was ich tun muss, wenn ich beliebige Kugeln im Raum darstellen will. Es wäre übrigens auch sehr nützlich, wenn ich nur Zentrum und Radius dieser Kugeln angeben müsste und alle weiteren Punkte automatisch berechnet werden. Ansonsten muss ich mir dafür noch eine Funktion schreiben (ich vermute, dass das mit Drehmatrizen ziemlich aufwändig würde).



  • Hallo

    Das ist eine recht häufig gestellte Frage, darum gibt es dafür ganze Tutorials im Internet, du musst nur wissen, wo du suchen musst. Auch gibt es viele verschiedene Ansätze, um ans Ziel zu kommen. Benutz doch einfach mal den Code hier.

    Stiefel2000 schrieb:

    Zudem werden Kugeln angeblich stets im Zentrum des Koordinatensystems erzeugt, das kann ich aber gar nicht gebrauchen.

    Du musst dich mit den OpenGL Transformationen beschäftigen, also glTranslate und Konsorten. Diese Dinge sind so zentral, wenn du sie nicht verstehst, kannst du mit OpenGL nicht weiterarbeiten.

    MfG



  • Vielen Dank, das Codebeispiel ist äußerst nützlich. So scheine ich ja auch erstmal bei OpenGL bleiben zu können.
    Das Verstehen der Techniken sollte nicht das Problem sein, aber ich muss sie ja erstmal kennen.



  • Vielleicht hilft Dir glutSolidSphere.



  • Die Funktion hatte ich oben schonmal erwähnt ;).

    Ich schaffe es jetzt, eine einzelne Kugel zu zeichnen, evt. sind es auch mehr (dann wären aber alle überlagert).
    Wann muss ich denn die Translationsmatrix anwenden? Nach dem Zeichnen des Objektes? Eigentlich ist es doch dort schon zu spät - vorher geht es allerdings auch nicht, weil das Objekt dort ja noch gar nicht existiert 😕.
    Oder muss ich vorher noch eine zu verwendende Matrix festlegen?

    EDIT: Habe gerade ein Code-Beispiel dazu gefunden, das wäre also geklärt. Jetzt muss ich ein wenig weitercoden, evt. kommen dann noch Fragen auf.
    Schonmal vielen Dank für eure Hilfe! 🙂



  • glTranslate legt den Ursprung für eine Fläche oder einen Körper fest.
    Von diesem Ursprung aus werden dann die einzelnen Eckpunkte abgetragen.

    Also im Prinzip hast du ein Großes Koordinaten system in diesem legst du damit nur den Nullpunkt Fest.

    Also wenn du eine Kugel in de Mitte des Monitors zeichnest, würde der Kern der Kugel zb bei 0 X liegen hast du sie gezeichnet kannst du denn Ursprung zb nach Links verschieben indem du mit Translate x auf - 5 setzt nun weiss OGL das der Ursprung der nächsten Figur -5 längen auf der X Achse liegt also links von der Kugel. Und dann zeichnest du wieder eine Kugel. Und so kannst du das in alle richtungen machen. Praktisch wäre das wenn du eine Figur hast die sich in einer Umgebung bewegen kann so musst du nur den Ursprung der Figur verändern und nicht jeden einzelnen Punkt der Figur da diese sich nähmlich wiederum vom Ursprung zeichnen und so immer gleich bleiben.



  • ich persönlich mag glut gar nicht, aber gluSphere sollte eigentlich fast das selbe leisten, habs aber grad nicht ausprobiert, kann sein dass das nur ein wireframe modell ist?

    vielleicht verbessert mich ja einer ^^


Anmelden zum Antworten