====== Blender-Code, Kameraführung ====== Aktueller Code: {{ :kurse:efcomputergrafik:firstspline.blend |firstspline.blend}}, {{ :kurse:efcomputergrafik:sunflowers_1k.hdr |HDRI-File}} ===== Simulation der Bewegung ===== **TODO**: Funktion, die aus * dem Index der Bezierkurve $i$ und * dem vorhergehenden Kurven-Parameter $t^-$ * der vorhergehenden Geschwindigkeit $v$ * dem nächsten Kurven-Paramter $t^+$ die neue Geschwindkeit berechnet. Damit kann Reibung, Bremsen und konstante Geschwindkeit auf einem Förderband implementiert werden. Diese Funktion wird zwei mal gebraucht: Einmal zur Bau der Bahn (Berechnung der Bahnneigung), einmal zur Simulation der Kamerafahrt. ==== Kräfte ==== Reibungskraft: Proportional zur Normalkraft, Faktor 0.001 bis 0.01 Luftwiderstand: $c_w$-Wert von ca. 0.5, $F_w = \frac{\rho c_w A v^2}{2}$ mit $\rho \approx 1$, $A \approx 1$. Energetisch: $W = F \cdot s.$ ==== Berechnung ==== 2 Varianten: * Zustand nach einer gegebenen Strecke (für den Schienenbau) (implementiert) * Zustand nach einer gegebenen Zeit (für die Kameraführung) (noch offen). Die zweite Variante könnte mit $s=v \cdot t$ (wobei $t=1/\text{fps}$) mit Hilfe der ersten berechnet werden. Da Problem ist, wenn $v=0$ (z.B. beim Anfahren am Anfang). Als Ausweg kann die Beschleunigung in Bewegungsrichtung herangezogen werden und so $s=\frac{1}{2}at^2$ approximiert werden. ===== Kamera-Führung ===== Zustand: $t$ (Ort auf der Bahn), $v_{\text{eff}}$ (aktueller Betrag der Geschwindigkeit) Schritt: Zeit um 1/framerate vorrücken, der Bahn folgen (z.B. um die Strecke, die mit $v_{\text{eff}}$ in dieser Zeit zurückgelegt würde, oder genauere schrittweise Simulation). Aus der Höhendifferenz und eventuell Reibung die neue Geschwindigkeit berechnen. Kamera entsprechend positionieren und Keyframe setzen: cam = bpy.data.objects['Camera'] frame = 0 cam.animation_data_clear() cam.matrix_world = ( (y.x,y.y,y.z,1), (-an.x, -an.y, -an.z, 1), (-vv.x,-vv.y,-vv.z,1), (pp.x, pp.y, pp.z, 0)) cam.keyframe_insert(data_path="rotation_euler", frame=frame) cam.keyframe_insert(data_path="location", frame=frame) frame+=1 Siehe auch https://blender.stackexchange.com/questions/108938/how-to-interpret-the-camera-world-matrix D.h. die erste Koordinatenrichtung ist rechts, die zweite oben und die dritte ist entgegen der Blickrichtung.