sphere spinnt openGL



  • Wie kann ich eine sphere unabhängig von der Kamera über eine Heightmap gleiten lassen?

    Mein Ansatz

    //Funktion holt die Höhenkoordinaten auf dem Dreieck
                float up = getHeight(triangleMap, xKugel, zKugel);
    
                glPushMatrix();
                glTranslatef(xKugel, up, zKugel);
                gluSphere(quadratic,0.22,32,32);
                glPopMatrix();
    

    Während meine Kamera mit der Funktion getHeight schön über die Landschaft gleitet, tut das (erstmal) auch die Sphere. Nur an manchen Stellen spinnt sie dann rum und springt auf und ab.
    Habe die Koordinaten überprüft und werde nicht draus schlau.

    Vielleiht muß man die Sphere anders animieren.


  • Mod

    ich vermute mal dass getHeight fehlerhaft ist und sie deswegen hüpft.
    hast du ne andere vermutung?

    rapso->greets();



  • WEnn ich die Kamera über die selben Koordinaten fahre geht alles sauber.
    Ich überlege, ob man die Sphere mit einer anderen Methode als glPushMatrix(); und glPopMatrix(); von der Kamera-Postion löst.

    Die Kugel zieht immer die selbe Bahn, und hüpft von ihren getHeight()-Koordinaten und (meiner Kameraposition hin und her). Also die Höhenschwankung der Sphere ist abhängig von der Kamerahöhenposition.

    Hier nochmal meine getHeight(). Habe ich vor ein paar Tagen hier gepostet

    Auf einem Dreieck liegt ein Punkt mit den bekannten Koordinaten x_pos, z_pos.
    Die Höhe y_pos ist unbekannt.
    Das Dreieck hat die Eckpunkte (x1,y1,y2), (x2,y2,z2), (x3,y3,z3).

    float ypos, lambda1, lambda2; 
    
         if (x2 != x1){ 
             lambda2 = ( (zpos-z1) - (xpos-x1)*(z2-z1)/(x2-x1) )/( (z3-z1) - (x3-x1)*(z2-z1)/(x2-x1) ); 
             ypos = y1 +  (y2-y1)/(x2-x1)*(xpos-x1)  +( (y3-y1)-(x3-x1)*(y2-y1)/(x2-x1) )*lambda2; 
         }else{ 
             lambda2 = (xpos-x1)/(x3-x2); 
             lambda1 = ( (zpos-z1) - (z3-z1)*lambda2 )/(z2-z1); 
             ypos = y1 + (y2-y1) * lambda1 + (y3-y1)*lambda2; 
         } 
    
             return ypos;
    


  • Muß ich die Kugel in einer anderen Funktion zeichnen als die, in der ich meine gesamte Scene schreibe?(ist Blödsinn, aber wie?)


  • Mod

    wie wäre es, wenn du nach dem pushmatrix einmal glLoadIdentity machst um die matrix zu resetten, dann würde die kugel unabhängig von vorherigen transformationen bewegt werden.

    so könntest du wenigstens ausschliessen, dass da schon mißt drinne steht.

    rapso->greets();



  • Wenn ich nicht falsch liege müsste ich dann die Kugelkoordinaten ausschließlich relativ von der Kameraposition aus berechnen und nicht relativ zu meiner Geländematrix.

    Hab es trotzdem mal spasshalber ausprobiert. Die Kugel ist nicht mehr auffindbar.

    Wie gesagt bei der Kamerafahrt funktioniert mein getHeight(), weshalb ich nicht weiß wonach ich suchen soll.

    Hab mir mal die Kugelkoordianten auf ihrem Weg ausgeben lassen.

    X               Y Höhe           Z
                    (wird berechnet)
    
    -2,735 :         2,418 :         -2,462
    -2,77 :         2,389 :         -2,484
    -2,805 :         2,36 :         -2,506
    -2,84 :         2,33 :         -2,528
    -2,875 :         2,301 :         -2,55
    -2,91 :         -18,99 :         -2,572    <- Hier springt die Kugel
    -2,945 :         -19,02 :         -2,594      Nach -18,99 ergibt keinen Sinn
    -2,98 :         -19,05 :         -2,616
    -3,015 :         -19,07 :         -2,638
    -3,05 :         -19,1 :         -2,66
    -3,085 :         -19,13 :         -2,682
    -3,12 :         -19,15 :         -2,704
    -3,155 :         -19,18 :         -2,726
    -3,19 :         -19,21 :         -2,748
    -3,225 :         -19,23 :         -2,77
    -3,26 :         -19,26 :         -2,792
    -3,295 :         -19,29 :         -2,814
    -3,33 :         -19,31 :         -2,836
    -3,365 :         -19,34 :         -2,858
    -3,4 :         -19,37 :         -2,88
    -3,435 :         1,708 :         -2,902    <- Hier kommt sie wieder auf den
    -3,47 :         1,697 :         -2,924        Teppich
    -3,505 :         1,686 :         -2,946
    -3,54 :         1,675 :         -2,968
    -3,575 :         1,664 :         -2,99
    -3,61 :         1,653 :         -3,012
    

Anmelden zum Antworten