winkel zwischen vektor und koordinatensystem für cam



  • Ich bau grad nen radiosity renderer zusammen und komm bei einem Problem einfach nicht weiter, egal wie ichs versuche:
    Ich brauche die xy Winkel um die Welt um die Kamera zu rotieren, abgeleitet von einem Vector. (um die kamera entlang den normalen der dreiecke auszurichten)

    am logischsten wäre für mich den vektor auf die xz bzw yz Plane zu projezieren und dann über atan2 den winkel zu erhalten.
    alternative wäre (ich brauche für die rotation sin und cos von den winkeln) übers dotproduct den cosinus zu erhalten und mit acos(-a) den negativ winkel (positiver winkel um die clipping planes zu rotieren, negativer um die welt zu rotieren). da bekomm ich aber keinen sinus...

    die erste möglichkeit ist denk ich mal die richtige, komischerweise kommen da aber auch nicht die richtigen ergebnisse raus...

    rx = atan2(y,z)
    ry = atan2(x,z)

    wenn nicht so, wie dann... und warum bekomm ich da keine richtigen ergebnisse ?
    die normalen stimmen garantiert.

    ps. ich arbeite nicht mit matrizen und kenn mich mit denen nicht aus, sollte also eine lösung sein die ohne matrizen auskommt.


  • Mod

    wozu brauchst du sowas? das ist doch nichts radiosity spezifisches, oder? kann es sein dass du gerade an der grundlage haengst wie du einen strahl verschiesst? hast du schonmal versucht dir ein tutorial dazu anzusehen? man rotiert die welt naemlich nicht beim raidiosty rendern...normalerweise.



  • ich machs nicht mit raytracing sondern mit nem normalen texturemapper. den fischaugeneffekt erreicht man da mit ner anderen projektion als 1/z (1/sqrt(x*x+y*y+z*z))
    bin soweit mit allem fertig mit schönen ergebnissen (wenn ich die winkel manuell eintrag) aber damit ich models laden kann brauch ich halt nen gescheiten algo um die winkel zu berechnen.


  • Mod

    du hast ja die normale eines faces/triangles. dazu kannst du eine tangente bestimmen und eine bitangente errechnen (kreuzprodukt) danach mittels normale und bitangente die normale tangente wieder errechnen (braucht man damit du eine orthogonale basis hast).
    das ist dann deine matrix fuer das face, du kannst nun immer die selben rays nutzen die du im ursprung machst und durch multiplikation mit dieser matrix in die orientierung des faces bringen.

    (wenn du mehr infos zur matrix brauchst, such nach view-matrix, die generiert man genau so, nur dass man am ende noch die inverse errechnet, das musst du ja nicht).



  • damit kann ich leider nicht allzuviel anfangen.
    die tangente wäre dann [1/x;1/y;1/z] wenn der Vektor ein Einheitsvektor ist ?
    wäre die face matrix dann :
    [normal.x;tan.x;tan2.x]
    [normal.y;tan.y;tan2.y]
    [normal.z;tan.z;tan2.z]
    ?

    dann einfach meine vertices mit [facematrix] multiplizieren um die rotierten vertices zu bekommen?

    Ich habe null Matrix erfahrung, hab die gesamte engine ohne matrizen aufgebaut..(auch ohne opengl,d3d .. trianglemapper auch selbstgeschrieben) daher hab ich keine ahnung wie ich aus view/face matrix
    winkel samt gegenwinkel (viewcone, worldrotation)
    ableiten kann.

    ich brauch auch die inverse, wenn das dann -rx,-ry repräsentiert. ich muss ja nicht nur viewcone, sondern auch die welt rotieren



  • Du hast keine Ahnung von Matrizen und willst ernsthafte 3d-Programmierung machen? Dann würde ich da erst mal krass nachholen!



  • den winkel zwischen deinem koordinatensystem oder einer beliebigen anderen ebene und einem vektor rechnest du über den normalenvektor der ebene (xz-ebene (0,1,0) und yz-ebene (1,0,0)) und deinem anderen vektor aus. dann gehst du über das skalarprodukt, bekommst darüber den cosinus des winkels (aufpassen: 90° verschiebung beachten) raus. dann schaust du nach, in welchem halbraum du bist und passt den winkel entsprechend an.

    was deine projektionsidee angeht: wie hast du denn da projeziert?



  • für leute die keine ahnung der mathematik habn in cg (wie ich 😉 ) ...
    http://www-lehre.inf.uos.de/~cg/2004/Real/index.html
    ich find persöhnlich die 2004 er vorlesungen besser aber hier die von 2006:
    http://www-lehre.inf.uos.de/~cg/2006/camtasia/uebersicht.html
    😋


Anmelden zum Antworten