Probleme mit Normalisierung von Vector.



  • Hallo zusammen. 🙂

    Ich habe folgendes Problem. 😕
    Ich brauche den Normalisierten Vector von einem Punkt(Camerafocus) zu KameraPos.

    Ich meine noch so wie ich das mal gelernte zu haben scheine müsste das folgendermasen funktionieren.

    //CamPos=(6.0,5.0,0.0) CamFocus=(2.0, 2.0, -5.0)
    	// Kameravector ermitteln Pos - Focus weill die Richtung von Focus zu Pos benötigt wird.
    	glm::vec3 CamDirection = (CamPos-CamFocus  );	
    
    	// Jetzt ist CamDirection=(4.0, 3.0, 5.0) 
    	float zErg = sqrt((CamDirection.x*CamDirection.x)+ (CamDirection.y*CamDirection.y) + (CamDirection.z*CamDirection.z));
    	// zErg=7.07106781
    
    	CamDirection /= zErg;
    	// CamDirection=(0.565685451, 0.424264073, 0.707106769)
    
    	// CamDirection muss normalisiert sein .Ist es aber nicht.
    

    Ich weis nicht, was ich da falsch mache.

    Vieleicht kann mir jemand auf die Sprünge helfen ?

    Danke ! 👍


  • Mod

    Wie stellst du fest, dass das Ergebnis nicht stimmt?



  • Weill die 3 Koordinaten in CamDirection miteinander addiert nicht 1 sondern >1

    Ist 1.697056293



  • Andi0310 schrieb:

    Weill die 3 Koordinaten in CamDirection miteinander addiert nicht 1 sondern >1

    Ist 1.697056293

    Das entspricht nicht der Definition eines normierten Vektors.
    Ein Vektor ist genau dann normiert, wenn seine Länge 1 ist, und das ist bei deinem Ergebnis der Fall:

    CamDirection=0.5656854512+0.4242640732+0.7071067692=1.000000007938621013989148198124954244404943956776452355953...\lvert CamDirection \rvert = \sqrt{0.565685451^2+0.424264073^2+0.707106769^2}=1.000000007938621013989148198124954244404943956776452355953...

    ... wenn man mal von den Rundungsfehlern absieht, die man im Umgang mit Fließkommazahlen immer mit drin hat.


Log in to reply