Tring untuk menjawab komentar Natan yang tepat, saya melakukan beberapa pertimbangan yang dapat berguna untuk memahami apa yang sebenarnya terjadi ketika Anda menggunakan vektor di Ruang Affine untuk mewakili vektor 3D di Ruang Euclidean standar.
Pertama-tama saya akan memanggil vektor apa pun yang memiliki koordinat, jadi titik dan vektor adalah entitas yang sama; Anda dapat melihat vektor sebagai perbedaan dua titik: V = B - A ; V bergerak
A di B karena A + V = A + B - A = B . Masukkan A = 0 (asal) dan Anda akan mendapatkan bahwa V = B - 0 = B : titik B dan vektor yang bergerak 0ke B adalah hal yang sama.
Saya akan memanggil "vektor" - dalam arti yang digunakan di sebagian besar perpustakaan 3D - ketika vektor ruang affine memiliki w = 0.
Matriks tersebut digunakan karena memungkinkan Anda untuk merepresentasikan fungsi linier dalam bentuk yang ringkas / elegan / efisien, tetapi fungsi linier memiliki kelemahan utama yang tidak dapat mengubah asal: F ( 0 ) = 0 jika F ingin menjadi linier ( amog hal lain seperti F (λ X ) = λF ( X ) dan F ( A + B ) = F ( A ) + F ( B ))
Ini berarti Anda tidak dapat membuat matriks yang melakukan terjemahan karena Anda tidak akan pernah memindahkan vektor 0 . Inilah saatnya bermain Ruang Affine . Ruang affine menambahkan dimensi ke ruang euclidean sehingga traslantion dapat dilakukan dengan penskalaan dan rotasi.
Ruang Affine adalah ruang proyektif dalam arti bahwa Anda dapat membangun hubungan ekivalensi antara vektor Affine dan vektor Euclidean sehingga Anda dapat membingungkan mereka (seperti yang kami lakukan dengan poins dan vektor). Semua vektor affine yang memproyeksikan ke asal dengan arah yang sama dapat dilihat sebagai vektor euclidean yang sama.
Ini berarti bahwa semua vektor yang memiliki proporsi yang sama dalam koordinat dapat dianggap setara:
Secara matematis:
yaitu setiap vektor affine dapat direduksi menjadi versi kanon di mana w = 1 (kita memilih di antara setiap vektor ekivalen yang paling kita sukai).
Secara visual (2D euclidean - 3D affine):
karenanya rata-rata ruang "proyektif" ; Anda harus memperhatikan bahwa di sini ruang euclidean adalah 2D (wilayah cyan)
Ada seperangkat vektor affine tertentu yang tidak dapat dimasukkan ke dalam versi kanonik mereka (dengan mudah) yang terletak pada bidang (hyper) w = 0.
Kami dapat menunjukkannya secara visual:
apa yang Anda (harus) lihat adalah bahwa ketika w -> 0 maka vektor yang diproyeksikan ke dalam ruang Euclidean menuju ke infinite tetapi ke infinite dalam Arah tertentu .
Sekarang jelas bahwa menambahkan dua vektor dalam ruang proyektif dapat menyebabkan masalah ketika Anda mempertimbangkan jumlah vektor sebagai vektor yang diproyeksikan dalam ruang euclidean, ini menambahkan karena Anda akan menjumlahkan komponen W di ruang affine dan kemudian memproyeksikannya ke pesawat euclidean (hiper).
Inilah sebabnya mengapa Anda dapat menjumlahkan hanya "titik" menjadi "vektor" karena "vektor" tidak akan mengubah koordinat w dari "titik" ini benar hanya untuk "titik" di mana w = 1:
Seperti yang Anda lihat titik hijau adalah yang diperoleh dengan menambahkan dua vektor affine yang mewakili "titik" cyan dan V "vektor" , tetapi jika Anda menerapkan V ke setiap vektor affine dalam bentuk yang berbeda dengan kanon, Anda akan mendapatkan hasil yang salah ("" titik "" merah).
Anda melihat bahwa Affine Space tidak dapat digunakan secara transparan untuk menggambarkan operasi pada Euclidean Spaces dan penyalahgunaan istilah "vektor" memiliki arti di bawah batasan (ketat) jumlah perhitungan hanya pada vektor proyeksi kanon .
Mengatakan itu, cukup masuk akal untuk berpikir bahwa GPU mengasumsikan bahwa Vector4 harus memiliki w = 0 atau w = 1, kecuali Anda benar-benar tahu apa yang Anda lakukan.