Apa vektor normal, singgung dan binormal dan bagaimana mereka digunakan?

47

Saya ingin mencari tahu informasi berikut:

  • Apakah mereka?
  • Contoh penggunaan dalam pengembangan game (area tempat mereka digunakan)

Tentang jenis vektor berikut:

  • Normal
  • Tangent
  • Binormal

Penjelasan sentris pengembangan game sederhana sudah cukup.

Jaanus Varus
sumber
1
Anda terlalu banyak bertanya. Yang terbaik Anda baru saja membaca tentang cara kerja vektor. Dari awal. Juga tambal trigonometri Anda di sepanjang jalan.
Sidar
3
Saya pikir ini mungkin banyak untuk ditanyakan, tetapi di sisi lain akan menyenangkan untuk memiliki informasi ini bersama dalam satu pertanyaan. Itu juga alasan saya secara khusus meminta penjelasan sederhana.
Jaanus Varus

Jawaban:

43

Secara umum, vektor Normal mewakili arah yang menunjuk langsung "keluar" dari suatu permukaan, yang berarti vektor itu ortogonal (pada sudut 90 derajat ke) vektor apa pun yang berkenaan dengan coplanar (dalam kasus permukaan datar) atau bersinggungan dengan (dalam kasus permukaan yang tidak rata) permukaan pada titik tertentu.

Vektor Tangent biasanya dianggap sebagai satu vektor yang ada di dalam bidang permukaan (untuk permukaan datar) atau yang bersinggungan dengan titik referensi pada permukaan melengkung (mis. Jika bidang datar dibangun dengan normal yang sama dari titik referensi , vektor singgung akan coplanar dengan pesawat itu).

Konsep vektor Binormal sedikit lebih kompleks; dalam grafik komputer, umumnya mengacu pada vektor Bitangent (rujukan di sini ), yang secara efektif merupakan vektor tangen "lain" untuk permukaan, yang ortogonal baik untuk vektor Normal maupun vektor Tangen yang dipilih.Normal, Tangent, Bitangent

Berkenaan dengan bagaimana mereka dihitung, ini bervariasi tergantung pada kompleksitas permukaan dan seberapa tepat Anda ingin menjadi normal (dalam beberapa kasus, seperti dengan shader halus, lebih diinginkan untuk menghitung normal untuk permukaan yang diperkirakan, ketika informasi aktual untuk permukaan tidak hadir), tetapi ada beberapa rumus umum yang diberikan di sini .

Dalam hal di mana mereka terjadi, jawabannya adalah DI MANA SAJA . Vektor normal digunakan untuk memposisikan kamera dan objek dalam ruang 3D, untuk menentukan lintasan, refleksi, dan sudut dalam perhitungan fisika, untuk memetakan kulit dan tekstur ke model 3D, untuk menentukan offset lintasan tujuan dalam pemrograman AI, untuk memberikan petunjuk kepada shader tentang bagaimana untuk cahaya, tempat teduh, dan titik warna pada permukaan relatif terhadap lampu, kamera, dan objek lainnya, dan sebagainya. Mereka mungkin salah satu bagian informasi yang paling berguna untuk dimiliki dalam lingkungan 3D, dan mereka bahkan sangat berguna dalam 2D.

Shotgun Ninja
sumber
2
Sial, aku seharusnya menambahkan gambar: p
RobCurr
Terima kasih atas penjelasannya! Ditandai sebagai jawaban.
Jaanus Varus
2
Mungkin membantu untuk membaca artikel ini tentang mengapa asumsi persegi-patch tidak valid dan mengapa semua orang mengatakan tentang garis singgung dan bitangen cukup banyak palsu. Ini menguraikan satu matematika yang tepat harus digunakan, tapi sayangnya aku tidak cukup untuk penulis yang kompeten benar jawaban dengan itu.
Lars Viklund
Vektor bitangent dan binormal adalah sama. Nama-nama itu dikaitkan dengan hal yang sama dan itu hanya tergantung pada "sudut pandang mental" Anda untuk nama mana yang digunakan.
Nikos
15

Vektor normal biasanya digunakan untuk perhitungan pencahayaan. Ini adalah vektor yang seharusnya tegak lurus ke permukaan yang didekati oleh simpul dari sebuah jaring. Normalnya didefinisikan pada setiap posisi simpul tetapi dapat dihitung secara berbeda tergantung pada bagaimana Anda ingin cahaya untuk direfeksi pada simpul itu atau apa yang ingin Anda lakukan dengan perhitungan cahaya Anda di shader.

Vektor Tangent dan Binormal adalah vektor yang saling tegak lurus dan vektor normal yang pada dasarnya menggambarkan arah koordinat tekstur u, v sehubungan dengan permukaan yang ingin Anda render. Biasanya mereka dapat digunakan di samping peta normal yang memungkinkan Anda untuk membuat detail pencahayaan sub permukaan untuk model Anda (bumpiness).

Jelas ada cara lain untuk memanfaatkan vektor-vektor ini dan saya baru saja menggambarkan rata-rata penggunaannya. Untuk informasi teknis lebih lanjut, saya sarankan Anda mengambil buku tentang grafik komputer atau menjelajahi beberapa artikel di internet. Ada banyak informasi di luar sana tentang ini.

RobCurr
sumber
4
+1 - Namun lain kali; tambahkan gambar.
Pieter Geerkens
9

Perbedaan antara garis singgung dan binormal kurang segera jelas pada permukaan, tapi itu seharusnya tidak terlalu mengejutkan - binormal awalnya didefinisikan bukan untuk permukaan tetapi untuk kurva , di mana konsepnya jauh lebih masuk akal (dan di mana ia benar-benar hidup) sebagai 'normal' dalam arti itu ortogonal dengan arah gerakan, demikian namanya). Untuk lebih spesifik, diberikan kurva spasi berupa p = V (t) = (V x (t), V y (t), V z (t)), kemudian garis singgung - yang merupakan vektor yang menunjuk pada arah gerak - diberikan oleh T u = dp / dt = (dV x / dt, dV z / dt, dV z/ dt). (Saya menggunakan subscript di sini untuk membedakan 'unnormalized' karena saya tidak memiliki MathJax saya di sini.) Lalu (seketika) kecepatan sepanjang kurva hanya s = | T u |, panjang vektor tangen, dan vektor singgung 'dinormalisasi' hanyalah T = T u / s.

Kemudian vektor normal kurva adalah turunan dari vektor singgung dinormalisasi dari waktu ke waktu, N u = dT / dt; alasan bahwa garis singgung dinormalisasi digunakan di sini adalah untuk menjaga kecepatan sepanjang kurva dari memiringkan vektor normal - Anda dapat menunjukkan bahwa dengan definisi ini, kami selalu memiliki TN u = 0. Perhatikan bahwa Nu tidak selalu merupakan satuan vektor , lebih dari Tu adalah; pada kenyataannya, besarnya k = | N u | adalah kelengkungan (sesaat) dari kurva pada titik yang diberikan, dan titik p + Nu adalah pusat dari apa yang disebut lingkaran osculating (pada titik yang diberikan). Normal yang dinormalisasi kemudian hanya N = N u/ k, dan bitangent B adalah produk silang B = TxN; karena T dan N keduanya vektor satuan dan keduanya ortogonal satu sama lain, maka B juga merupakan vektor satuan, dan (T, N, B) adalah kerangka ortogonal.

Perhatikan bahwa dengan definisi ini 'binormal' ke kurva lebih dekat dengan apa yang kita anggap sebagai normal ke permukaan (itu normal ke bidang 'lokal' kurva), dan normal ke kurva lebih dekat dengan apa kita anggap sebagai bitangent ke permukaan.

(Gambar ini, sayangnya, tidak benar-benar melakukan keadilan konsep, tapi itu yang terbaik yang bisa saya temukan di web dan saya tidak bisa dengan mudah membuat sendiri ...)

masukkan deskripsi gambar di sini

Steven Stadnicki
sumber