strahl richtung kamera



  • hi!
    wie kann ich einen strahl in richtung kamera schicken, und das dann mit einer linie darstellen, also die erste koordinate von der line muss ja die kamera position sein, aber wie kann ich den zweiten punkt der linie bestimmen, wie kann man da die rotation der kamera miteinbeziehen??

    danke im vorraus!



  • Du musst doch wissen wohin die kamera guckt?



  • ja sicher, ich weiß die rotation der kamera und die position der kamera, aber das nützt mir nichts:

    \       /
       \     /
        \   /
          K
    

    ist die blickrichtung der kamera,
    jetzt habe ich 2 punkte für eine linie:

    \   .   /
       \     /
        \ . /
          K
    

    aber wenn ich die kamera jetzt drehe

    . 
    
          .
          K
        /   \
       /     \
      /       \
    

    sind die punkte immer noch gleich,
    natürlich könnte ich auch einfach nicht immer die Einheitsmatrix neuladen (dann würden, wenn ich eine linie zeichne die 2 pkts nicht verschoben werden.
    aber ich möchte ja prktisch andere objekte abschießen und die koordinaten wären dann nicht mehr die richtigen ... ahhh! naja ich hoffe ihr versteht mich 😃



  • Also du hast die Koordinaten der Kamera?
    Und die richtung in die die Kamera guckt?
    Dann musst du die Richtung einfach in einen Einheits-Vektor umwandeln, dafür wirst du wahrscheinlich die Trigonometrischen Funktionen (sinus und cosinus) benötigen, kommt halt drauf an, wie du die richtung der Kamera vorliegen hast.



  • @ freddy

    Du kannst den Punkt natürlich mit sin/cos berrechnen, allerdings brauchen trigonometrische Funktionen viel Leistung...

    Wenn du DXCAMERA verwendest kannst du die Blickrichtung der Kamera einfach mit der Eigenschaft .vDir auslesen.

    Sieh dir auch in der DirectX SDK das Beispiel "PickPoly" an. Dort wird mit Hilfe einer Matrizenrechnung eine gedachte Linie zwischen Kamera und einem Punkt erzeugt.



  • ich verwende opengl ... kann man irgendwie aus der rotation und der position einen richtungsvektor berechnen?

    thx



  • Ja, kann man. Aber wie erzeugst Du denn überhaupt Deine Kameramatrix? Dort muss man doch sowieso schon einen Look-At-Punkt angeben und wenn Du den kennst, dann fehlt Dir doch eigentlich gar nichts mehr.



  • *g* ich mag die dummen gluLookAt(..) befehle nicht, deswegen hab ichs mit glTranslate(camx,camy,camz)
    und
    glRotate(camangle,0,1,0)

    gemacht [...] es muss doch irgendwie gehn oder?



  • Also, in D3D klappt folgendes:

    vCameraDir.x = sinf(fCameraRotY) * cosf(fCameraRotX);
    vCameraDir.y = sinf(fCameraRotX);
    vCameraDir.z = cosf(fCameraRotY) * cosf(fCameraRotX);
    

    Für zwei Rotationsvariablen...
    Mit dreien sähe es wahrscheinlich so aus:

    vCameraDir.x = sinf(fCameraRotY) * cosf(fCameraRotX) * sinf(fCameraRotZ);
    vCameraDir.y = sinf(fCameraRotX) * cosf(fCameraRotZ);
    vCameraDir.z = cosf(fCameraRotY) * cosf(fCameraRotX);
    

    Der zweite Code ist nicht getestet, der erste funktioniert 100%ig. Für OpenGL müsstest Du wohl noch vCameraDir.z negieren, da ja dort die z-Achse auf den Betrachter zu verläuft und nicht von ihm weg.

    EDIT: Du schreibst, Du würdest glTranslate(vCamPos.x, vCamPos.y, vCamPos.z) verwenden. Aber müsstest Du da nicht ein Minuszeichen vorsetzen? Man möchte die Umgebung ja entgegen der Kamera bewegen! Oder invertierst Du die Matrix am Ende?

    [ Dieser Beitrag wurde am 25.01.2003 um 13:43 Uhr von TomasRiker editiert. ]



  • ich hab das nur schnell als bsp code geschrieben ... danke für den code! werds mal ein bisschen probiern.


Anmelden zum Antworten