Saya ingin kamera orang pertama saya mengubah arah tampilan dengan lancar dari arah d1 ke arah d2. Arah terakhir ditunjukkan oleh posisi target t2.
Sejauh ini saya telah menerapkan rotasi yang berfungsi dengan baik tetapi kecepatan rotasi melambat semakin dekat ke arah saat ini ke yang diinginkan. Inilah yang ingin saya hindari.
Berikut adalah dua metode yang sangat sederhana yang saya tulis sejauh ini:
// this method initiates the direction change and sets the parameter
public void LookAt(Vector3 target) {
_desiredDirection = target - _cameraPosition;
_desiredDirection.Normalize();
_rotation = new Matrix();
_rotationAxis = Vector3.Cross(Direction, _desiredDirection);
_isLooking = true;
}
// this method gets execute by the Update()-method if _isLooking flag is up.
private void _lookingAt() {
dist = Vector3.Distance(Direction, _desiredDirection);
// check whether the current direction has reached the desired one.
if (dist >= 0.00001f) {
_rotationAxis = Vector3.Cross(Direction, _desiredDirection);
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(1));
Direction = Vector3.TransformNormal(Direction, _rotation);
} else {
_onDirectionReached();
_isLooking = false;
}
}
Sekali lagi, rotasi berfungsi dengan baik; kamera mencapai arah yang diinginkan. Tetapi kecepatannya tidak sama selama gerakan -> itu melambat.
Bagaimana cara mencapai rotasi dengan kecepatan konstan?
Quaternion.Slerp
Apakah hanya saya, atau apakah itu terdengar seperti nama dalam novel fantasi yang benar-benar buruk atau sangat bagus? Mengurangi titik, tentu saja.