Nochmals: Problem bei Genauigkeit von ' node facing camera'

  • Hallo, vor geraumer Zeit wollte ich wissen, wie man es hinbekommt, dass ein node in Irrlicht sich der Kamera zuwendet, bzw. sich dementsprechend rotiert .
    Dazu hab ich folgende Lösung mit dem atan2 erhalten:

    [autoit]

    Func ATan2(Const $ny, Const $nx)
    Local $nResult

    [/autoit][autoit][/autoit][autoit]

    If IsNumber($nY) = 0 Then
    SetError(1)
    Return 0
    ElseIf IsNumber($nX) = 0 Then
    SetError(1)
    Return 0
    EndIf
    If $nX = 0 Then
    If $nY > 0 Then
    $nResult = $PI / 2.0
    ElseIf $nY < 0 Then
    $nResult = 3.0 * $PI / 2.0
    Else
    SetError(2)
    Return 0
    EndIf
    ElseIf $nX < 0 Then
    $nResult = ATan($nY / $nX) + $PI
    Else
    $nResult = ATan($nY / $nX)
    EndIf
    While $nResult < 0
    $nResult += 2.0 * $PI
    WEnd
    Return $nResult
    EndFunc ;==>ATan2

    [/autoit]


    Eben hab ich ne Funktion von C++ in Autoit übersetzt:

    [autoit]

    func _facetarget()
    ;$x_s= $x_start
    ;$x_e=$x_ende
    ; Die zwei vektoriellen Position werden dadurch bezeichnet
    ; Die Funktion ist vorerst nur für die x_werte
    $myrotation_y= atan($z_s/$x_s)*180/$pi
    if atan($x_e-$x_s)>0 then
    $myrotation_y= 90 - $myrotation_y
    elseif atan($x_e-$x_s)<0 then
    $myrotation_y= -90 - $myrotation_y
    endif
    ;$myrotation_y-=90
    _irrsetnoderotation($triax_node, 0, $myrotation_y, 0)
    endfunc

    [/autoit]


    Die Funktionen scheinen mir nur Näherungswerte für die Rotationen zu liefern. Wie komm ich auf die exakten Werte?

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

    2 Mal editiert, zuletzt von Irrlicht (19. Mai 2012 um 19:54)

  • Kannst du mal bitte die originale C++ Funktion zeigen, dann wüsste man das besser ...

    €: Wie viele Stellen von PI hast du denn definiert ?
    Definiere PI mit 100 Nachkommastellen, dann sollte das genau sein, wahrscheinlich hast du PI so auf ka 5 - 10 nachkommastellen gesetzt

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Der binäre Rundungsfehler tritt schon etwa bei 10^-16 auf.
    Es bringt daher gar nix Pi als Float-Zahl auf 100 Stellen genau festzusetzen.

    Irrlicht
    Kurz: Ich versteh nichts von dem was du willst.

    • Was soll diese Funktion machen?
    • In welchem Kontext wird sie verwendet?
    • Wie soll sie verwendet werden?
    • Woher kommt dein Gedanke dass die Funktion nur genäherte Werte berechnet?

    Sag einfach mal ganz konkret: Was soll gemacht werden - woran hängt es.

  • @Aspirin oh ...
    Trotzdem kann es ja sein dass er z.B. nur auf 10^-5 hat, und wenn er es dann auf 10^-16 setzt passt das genauer

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Komischerweise gabs das Problem nur bei einem bestimmten node.Ich verwende jetzt ein anderes node, bzw. ich bin wieder bei meinem Hauptprojekt angelangt. Trotzdem danke für die hilfe.
    ... Irgendwo tief im Forum versteckt liegt mein alter Thread (ich glaub du, aspirinjunkie, hast mir sogar die Lösung mit atan2 damals gegeben.)

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble