Sternfeld, rollen um Z-Achse



  • Hi zusammen,

    ich habe ein "3d"-Sternenfeld programmiert welches auch den Betrachter zufliegt. Aehnlich dem Windows-Bildschirmschoner.

    FOV = 180
    posX = random( [-50|50] )
    posY = random( [-50|50] )
    posZ = random(256)+256
    
    berechnung der Screen-Coordinaten:
    ----------------------------------
    
    posZ -= speed;
    scrX = FOV * posX / posZ + screenCenterWidth;
    scrY = FOV * posY / posZ + screenCenterHeight;
    

    Das sieht gut aus und wirkt 3D.
    meine Fragen:
    a) Ich habe beim FOV einfach eine Zahl eingetragen. Ich weiss was Field-of-View bedeutet von 3D-Programmen, aber ist das richtig einfach eine Zahle zu definieren und fertig?

    b) Wie kriege ich in die Formeln von oben die Rotation um die Z-Achse mit hineinberechnet? Ich hab schon alles probiert was mir eingefallen ist, aber die Ergebnisse waren für die Katz. Wenn der User z.B. nach rechts drückt sollen sich die Sterne mitdrehen... also so als würde sich der Monitor drehen.

    c) Ich will das ganze noch mehr erweitern und dem Betrachter das Gefühl geben dass man sich auch in Schlangenlinie durch das Sternenfeld bewegt. Ich weiss nicht wie ich diesen Effekt beschreiben soll, aber in Filmen sieht man das oft. Eine Kurve nach unten verschiebt nicht das Zentrum sondern lässt die Sterne irgendwie verbogen auf den Betrachter zufliegen. hat dazu jemand Tips?

    Vielen, vielen Dank!



  • Einfach deine XY Koordinaten mit der 2d Rotationsmatrix multiplizieren:

    /x'\   /x\ /cos(a)  -sin(a)\
    \y'/ = \y/ \sin(a)   cos(a)/
    

    a (alpha) ist der Drehwinkel.

    BTW: Der der Latexrenderer iss Mist.



  • Okay, vielen Dank!
    Scheint so als komme ich nicht mehr um Matrizen rum. Ich werde mir jetzt mal Literatur dazu suchen und lernen was das genau ist und wie man das für den PC umsetzt...



  • Für den zweidimensionalen Fall benötigst du noch nicht wirklich Matrizen, da kannst du Hirsch's Gleichung auch von Hand auflösen:

    xn = x*coc(a) - y*sin(a);
    yn = x*sin(a) + y*cos(a);
    


  • hi,

    HIRSCH_H schrieb:

    /x'\   /x\ /cos(a)  -sin(a)\
    \y'/ = \y/ \sin(a)   cos(a)/
    

    der vektor und die matrix rechts gehören vertauscht :xmas1:


Anmelden zum Antworten