Saya seorang programmer pemula dan saya sedang membuat proyek yang memungkinkan saya berjalan di sekitar ruangan melalui kamera orang pertama. Sejauh ini, saya punya bangunan yang digambar dan terus, tapi sekarang saya macet dan tidak tahu bagaimana membuat kamera orang pertama untuk memungkinkan saya berjalan-jalan.
Adakah yang bisa mengarahkan saya ke kelas kamera yang bisa saya gunakan, atau kode yang berguna?
Jawaban:
Berikut adalah beberapa tips tentang rotasi kamera (mouselook). Setelah secara naif menerapkan kelas kamera dari awal, saya menemukan saya harus melakukan beberapa penyesuaian tambahan untuk perilaku rotasi yang baik:
Atur ulang koordinat mouse ke tengah layar pada setiap frame, sehingga mouse tidak pernah terjebak pada batas layar
Pertahankan vektor "atas" kamera (disallow roll) dan hitung ulang vektor "ke samping"
Larang melihat ke atas melewati sumbu vertikal + y, atau turun melewati sumbu -y (terlalu jauh ke atas / ke bawah)
Dapatkan urutan rotasi dengan benar (atas / bawah terlebih dahulu, lalu kiri / kanan)
Renormalkan kembali vektor "atas", "bidik", dan "ke samping" setiap bingkai
Semoga Anda dapat menggunakan beberapa kode ini untuk keuntungan Anda:
Perhatikan bahwa:
mouseAxisX dan mouseAxisY didefinisikan sebagai +/- 1, tergantung pada apakah Anda ingin sumbu x atau y harus dibalik. Biasanya game menawarkan opsi ini setidaknya untuk sumbu vertikal.
MIN_UPWARDS_TILT_DEG didefinisikan sebagai 1,0 derajat (sehingga pemirsa diperbolehkan untuk melihat dari -89 derajat ke bawah hingga +89 derajat ke atas, yang terlihat cukup meyakinkan seperti rentang vertikal 180 derajat penuh - hilangnya 2 derajat pada bagian ekstrem dapat diabaikan) .
camera.aim_, camera.right_, dan camera.up_ tentu saja adalah vektor 3D, dan metode rotateAboutAxis () yang dapat Anda gunakan bersama-sama dari wikipedia dan sejumlah sumber daring. Y_AXIS adalah vektor tetap konstan (0,1,0).
ASSERT_ORTHONORMAL () adalah pemeriksaan kewarasan mode debug saja, yang tidak pernah dikompilasi dalam mode dioptimalkan / rilis.
Mohon maaf sebelumnya untuk kode C-style ... sekali lagi, di sini Anda menerima saran dari seorang pria bernama Mediocritus! ; ^)
sumber
Ada beberapa cara untuk melakukan ini (lihat tutorial di sini , di sini dan di sini misalnya, dengan lebih banyak tersedia di Internet melalui Google). Teknologi yang digunakan dalam sumber daya yang Anda temukan online mungkin sedikit berbeda (dalam hal D3D, XNA, OpenGL, dan lain-lain), tetapi prinsip-prinsip yang mendasarinya akan sama:
Anda dapat memilih untuk menyimpan vektor secara langsung, atau menghitung ulang matriks tampilan yang mendasarinya setiap saat, sesuai kebutuhan dan keinginan Anda. Ada banyak fleksibilitas dalam teknik ini, jadi jika Anda memerlukan bantuan di luar langkah-langkah umum tersebut, Anda mungkin ingin memposting pertanyaan baru dengan permintaan yang lebih spesifik.
sumber
Untuk referensi khusus untuk implementasi sistem kamera menggunakan Direct3D, saya merekomendasikan artikel ini: http://www.toymaker.info/Games/html/camera.html . Penulis juga menjelaskan metode dan fitur lain yang dapat digunakan untuk memperluas implementasi.
sumber