Saya cukup baru untuk C ++ dan DirectX9 dan saya ingin Menerapkan Kamera Orang Ketiga. Setelah beberapa membaca tentang Kamera berbasis Quaternion saya memutuskan untuk mencoba Menerapkannya. Tapi itu benar-benar membuat saya berpikir, jadi saya bertanya di sini apa cara termudah untuk Menerapkan Kamera-TP?
Berikut adalah hal-hal yang harus dilakukan Kamera:
Ikuti koordinat yang disimpan dalam 3DVector (x, y, z)
Putar di sekitar Objek (Halus)
Mungkin beberapa jenis 'pegas' = Perlahan-lahan bergerak kembali ke Pos normal di belakang Objek setelah Memutar
Minta maaf untuk bahasa Inggris saya yang buruk: Saya orang Jerman dan masih di sekolah!
Terima kasih sebelumnya!
EDIT:
Setelah mencoba, saya mengerti.
Masalah terbesar yang saya pertimbangkan adalah penggalian kanan vektor "arah" dari Matriks-Dunia.
Selama penelitian saya, saya menemukan sebagian besar hal seperti ini:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Itu TIDAK bekerja untuk saya! Sebaliknya saya melakukan ini:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Untuk penskalaan:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Mengatur Posisi:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Untuk Rotasi, Anda harus membuat Matriks dunia sementara (dari posisi target) dan memutarnya sesuai keinginan dan mengekstrak arahnya.
Smoothing of the Rotation sangat tergantung pada game ANDA!
Kamera 3rd Person jenis ini sangat mudah dibuat dan berfungsi dengan baik!
SANGAT BESAR terima kasih kepada "jheriko" yang memberi saya jawaban yang benar!
Jawaban:
Apa yang akan membantu Anda adalah memiliki matriks transformasi untuk objek yang ingin Anda ikuti. Anda dapat mengekstrak vektor foward dari matriks ini - tergantung pada sistem koordinat Anda dan penguasaan matriks ini akan menjadi salah satu baris atau kolom dengan komponen ke-4 dihapus (dengan asumsi Anda menggunakan matriks transformasi 4x4, tanpa faktor skala - faktor skala mengerikan untuk banyak alasan ... tetapi jika Anda memiliki faktor skala Anda dapat menormalkan baris / kolom setelah menghapus komponen ke-4.)
Setelah Anda memiliki ini, Anda dapat memposisikan kamera langsung di belakang objek dengan mengurangi ini dari posisi objek. Untuk memindahkan kamera ke dalam dan ke luar, Anda dapat skala vektor, dan untuk memutar di sekitar objek Anda dapat membuat rotasi x dan y (atau xz / zy dll, tergantung pada wenangan dll) yang Anda terapkan ke salinan matriks objek sebelum mengekstraksi arah maju.
Akhirnya untuk memuluskan pergerakan, solusi paling sederhana adalah melacak offset dan sudut sebelumnya dan lerp ke arah mereka dengan sejumlah framerate dependen yang dijelaskan oleh a (b.dt) di mana dt adalah waktu delta dan a, b adalah parameter yang Anda pilih. a = 0,9 dan b = 30 memberi Anda efek bergerak 90% ke arah posisi seolah-olah Anda melakukannya setiap frame pada 30 fps. ini disebut filter 'respon impuls tak terbatas' dan merupakan retasan klasik untuk jenis perataan ini.
ini mungkin tidak ideal, Anda mungkin ingin memilih jarak minimum dan membatasi sudut juga, jika tidak kamera dapat melewati objek. jika Anda berada di dalam dunia padat yang guntingan atau memudar objek intervensi akan menjadi penting juga.
maaf ini lama, tapi itu bukan masalah sepele, seperti yang tampaknya telah Anda temukan.
semoga ini membantu. saya dapat memberikan detail yang lebih dalam jika perlu.
(ps tidak ada angka empat yang diperlukan - mereka benar-benar tidak membantu untuk masalah ini)
sumber