Kugel zeichnen (OpenGL)



  • Hi
    kann mir jemand sagen, wie ich eine kugel zeichnen kann?
    (ohne verwendung von GLU-hilfsfunktionen)
    danke wenn mir jemand antwortet



  • HellKnight schrieb:

    Hi
    kann mir jemand sagen, wie ich eine kugel zeichnen kann?
    (ohne verwendung von GLU-hilfsfunktionen)
    danke wenn mir jemand antwortet

    mit sin/cos und einer menge punkten. lauf für x segmente in der höhe jeweils y schritte im kreis und verbinde die punkte nach lust und laune als einzelne dreiecke, strips, quads oder was immer. und bitte bedenken, daß die segmente nicht gleichmäßig sondern ebenfalls über sin oder cos verteil sein sollten, weil man an den polen höhere dichte haben will.



  • 'ne Kugel kannst du garnicht zeichnen, nur aus Dreiecken zusammengesetzte Körper. Also versucht die Kugel durch viele Dreiecke zu nähren.

    Bye, TGGC (Der Held lebt!)



  • klar mit dreiecken aber wie genau berechne ich die vertex-punkte für diese kugel.
    Was ich 2d so machen kann:

    glBegin(GL_LINE_LOOP);
    for(f = 0; f < 2*M_PI; f += 0.01)
    {
       glVertex2f(sin(f), cos(f));
    }
    glEnd();
    

    Will ich sozusagen 3d machen.
    aber wie gehe ich da alle punkte durch???

    EDIT: ahh hab wohl Trienco's beitrag übersehen sry ich schau mal



  • Ein Punkt P im R3, dessen Koordinaten (x,y,z) die Bedingung x²+y²+z² = r erfüllen, befindet sich auf der Oberfläche einer Kugel mit Mittelpunkt (0,0,0) und Radius r.

    Bye, TGGC (Der Held lebt!)



  • Stell dir vor du hast eine Weltkarte vor dir. Diese kannst du um eine Erde legen. Zum rendern benutzt man die selben Indizes. Nur ihre Koordinaten der Vertices ändern sich.

    Für die Berechnung der Kugel.

    x = Radius*sin(vertikalwinkel)*sin(horizontalwinkel)
    y =-Radius*sin(vertikalwinkel)*cos(horizontalwinkel)
    z = Radius*sin(Vertikalwinkel)*cos(horizontalwinkel)

    Horizontalwinkel und Vertikalwinkel berechnen

    horizontalwinkel = spalteNrSegmentTeilwinkel(Längengrad)
    vertikalwinkel = zeileNr
    RingTeilwinkel(Breitengrad)

    Alles andere währe zu viel für mich. Also schau wie weit du mit diesen Informationen kommst.



  • Also ich habs jetzt so gemacht (hab nicht nachgelesen 😉 )

    glColor3f(1,1,1);
       for(w1 = -1.0; w1 < 1.0; w1 += 0.02)
       {
          glBegin(GL_LINE_LOOP);
          for(w2 = 0.0; w2 < M_PI*2; w2 += 0.2)
          {
             X = w1;
             Y = sin(w2) * sin(acos(w1));
             Z = cos(w2) * sin(acos(w1));
             glVertex3f(X, Y, Z);
          }
          glEnd();
       }
    

    EDIT: @Gleiter: Deins geht irgendwie nich ... aber genausowas bräuchte ich eigentlich, weil mein wirkliches ziel nicht das zeichnen einer kugel war sondern das berechnen eines punktes auf einer kugel mit den 2 winkeln. Warscheinlich is es auch ganz einfach bin jetzt wohl einfach zu müde um mir weitere gedanken zu machen 😉



  • Such nach Polarkoordinaten im Internet.



  • HellKnight schrieb:

    mein wirkliches ziel nicht das zeichnen einer kugel war sondern das berechnen eines punktes auf einer kugel mit den 2 winkeln.

    Und warum sagste das nicht gleich?

    Auch Helden sind keine Hellseher.

    Bye, TGGC (Dem beste BdT)



  • Ich dachte mir wenn ich rausfinde wie ich nen kreis zeichen kann ich das auch einfach dazu verwenden, die 3 TO-parameter von gluLookAt nach der position der maus im fenster zu bestimmen (also dass man mit der maus drehen kann...)

    ...
       w1 = ((GLfloat)x*2-x) / ((GLfloat)wnd_w) * M_PI;
       w2 = ((GLfloat)y*2-y) / ((GLfloat)wnd_h) * (M_PI*2);
    
       direction_x = r * cos(w1);
       direction_y = r * sin(w2) * sin(w1);
       direction_z = r * cos(w2) * sin(w1);
       ...
    

    Das war aus mouse_motion func und das in das in der display func:

    ...
       glMatrixMode(GL_MODELVIEW);
       glLoadIdentity();
       gluLookAt(position_x, position_y, position_z, position_x+direction_x, position_y+direction_y, position_z+direction_z,  0.0, 1.0, 0.0);
       ...
    

    Hat jemand ne idee warum des nich geht? ich hab echt alles ausprobiert und sogar mit google nach polarcoordinaten gesucht. kann mir jemand weiterhelfen???



  • Jetzt willst du ja schonwieder was anderes tun! Wenn du dich einfach nur mit der Maus umschauen willst, dann reicht es doch einfach die entsprechende Matrix zu setzen. Die baust du aus Position(Translation) sowie yaw und pitch-Rotationen zusammen. Eine Lookat Funktion brauchst du dazu nicht.

    Bye, TGGC (Der Held lebt!)



  • doch eben schon.
    weil die reihenfolge der beiden rotation-funcs die richtige drehung zerstört.
    ist aber auch egal. ich will quasi nur wissen warum das gepostete nicht richtig geht...



  • antwortet noch jemand?
    es muss doch möglich sein ein einfaches drehen per maus zu verwirklichen (bzw. fortbewegen mit pfeiltasten)
    das mit den pfeiltasten ist übrigens auch ein grund wofür ich das mit der kugel brauche. ich muss ja wissen in welche richtug ich die position versetze.
    ich will doch einfach nur einen beobachter-modus 😞


Anmelden zum Antworten