Mengapa Koordinat Homogen digunakan dalam Grafik Komputer?


Jawaban:


12

Mereka menyederhanakan dan menyatukan matematika yang digunakan dalam grafik:

  • Mereka memungkinkan Anda untuk mewakili terjemahan dengan matriks.

  • Mereka memungkinkan Anda untuk mewakili divisi dengan kedalaman dalam proyeksi perspektif.

Yang pertama terkait dengan geometri affine. Yang kedua terkait dengan geometri projektif.


Contoh apa yang Anda cari? Matriks terjemahan dan apa pun yang terkait dengan proyeksi perspektif harus cukup mudah dilihat?
Bart

@ Bart, Analogi diperlukan.

2
Maafkan aku @anonymous, tapi itu tidak benar-benar memberitahuku apa-apa. Anda harus menggunakan lebih banyak kata untuk menjelaskan apa yang sebenarnya Anda cari.
Bart

Saya pikir jawaban ini tidak terlalu tinggi karena terlalu teknis bagi kita pemula. Mungkin contoh sederhana dengan kata-kata sederhana akan menggambarkan prinsip-prinsip yang lebih baik
Nathan

5

Ada dalam nama: Koordinat homogen baik ... homogen. Menjadi homogen berarti representasi seragam dari rotasi, terjemahan, penskalaan, dan transformasi lainnya.

Representasi yang seragam memungkinkan untuk optimasi. Perangkat keras grafis 3D dapat dikhususkan untuk melakukan perkalian matriks pada matriks 4x4. Bahkan dapat dikhususkan untuk mengenali dan menghemat perkalian dengan 0 atau 1, karena itu sering digunakan.

Tidak menggunakan koordinat homogen mungkin menyulitkan untuk menggunakan perangkat keras yang sangat optimal secara maksimal. Program apa pun mengakui bahwa instruksi yang dioptimalkan dari perangkat keras dapat digunakan (biasanya kompiler tetapi kadang-kadang hal-hal lebih rumit) untuk koordinat homogen akan mengalami kesulitan dengan mengoptimalkan untuk representasi lain. Ini akan memilih instruksi yang kurang dioptimalkan dan karenanya tidak menggunakan potensi perangkat keras.

Karena ada panggilan untuk contoh: Sony PS4 dapat melakukan perkalian matriks besar-besaran. Itu sangat bagus sehingga terjual habis untuk beberapa waktu, karena kelompok-kelompok itu digunakan alih-alih komputer super yang lebih mahal. Sony kemudian menuntut agar perangkat keras mereka tidak boleh digunakan untuk keperluan militer. Ya, komputer super adalah peralatan militer.

Sudah menjadi hal biasa bagi para peneliti untuk menggunakan kartu grafis untuk menghitung perkalian matriks mereka walaupun tidak ada grafik yang terlibat. Hanya karena besarnya lebih baik di dalamnya daripada CPU untuk tujuan umum. Sebagai perbandingan, CPU multi-core modern memiliki urutan 16 pipa (x0.5 atau x2 tidak terlalu penting) sementara GPU memiliki urutan 1024 pipa.

Ini bukan inti daripada pipa yang memungkinkan untuk pemrosesan paralel yang sebenarnya. Core bekerja pada utas. Utas harus diprogram secara eksplisit. Pipa bekerja pada level instruksi. Chip dapat memparalelkan instruksi secara lebih kurang dengan sendirinya.


"Sony PS4 dapat melakukan perkalian matriks besar-besaran." Maksud Anda prosesor sel dari PS3, kan? PS4 memiliki prosesor x86 yang agak biasa.
Wumpf

Walaupun ini adalah jawaban yang bagus, saya tidak berpikir itu menjawab pertanyaan OP dan jenis menyarankan bahwa coogen homogen digunakan karena perangkat keras dioptimalkan untuk itu, coogen yang lebih homogen lebih berguna dan akhirnya perangkat keras dikembangkan sekitar itu. Argumen lain untuk vec4s adalah 128bit yang sejajar yang membuatnya lebih efisien untuk membaca di bus memori lebar (GPU)
PaulHK

4

melengkapi:

koordinat homogen juga memungkinkan untuk merepresentasikan tak terhingga: dalam 3D, yaitu titik pada tak terhingga dalam arahx,y,z. Biasanya, sumber cahaya pada posisi terbatas atau tak terbatas dapat direpresentasikan dengan cara yang sama.(x,y,z,0)=x,y,z0x,y,z

Tentang transformasi perspektif, bahkan memungkinkan untuk melakukan interpolasi dengan benar tanpa distorsi perspektif (bertentangan dengan perangkat keras grafis awal pada PC).


2

Sebagai selera pribadi saya selalu abstain (bila mungkin) menggunakan koordinat homogen dan lebih suka formulasi Cartesian biasa.

Alasan utama adalah kenyataan bahwa koordinat homogen menggunakan 4 entri sepele dalam matriks transformasi (0, 0, 0, 1), yang melibatkan penyimpanan dan perhitungan yang tidak berguna (juga overhead rutinitas perhitungan matriks tujuan umum yang "secara default" digunakan dalam kasus ini).

Kelemahannya adalah Anda perlu lebih berhati-hati saat menulis persamaan dan kehilangan dukungan teori matriks, tetapi sejauh ini saya masih bertahan.


1
Pada prinsipnya, tipe data dapat diimplementasikan yang tidak benar-benar menyimpan entri tersebut meskipun mereka bertindak seperti itu.

1
@Hurkyl Jelas. Ini jarang dilakukan, karena kotak alat matriks tujuan umum ada di tangan.
Yves Daoust

@YvesDaoust Bisakah Anda memberikan contoh plain Cartesian formulationatau tautan ke sumber daya yang menjelaskan penggunaannya dalam grafik 3D?
Dan

@Dan: gunakan y = Ax + b di mana A adalah matriks 3x3 dan vektor ba 3x1, alih-alih y '= Ax' di mana y ', x' adalah vektor yang ditambah dan matriks A a 4x4.
Yves Daoust

@YvesDaoust Jadi Anda melewatkan matriks 3x3 dan vektor 3x1 ke shader Anda alih-alih matriks 4x4? Di mana Anda menghitung dan menyimpan w?
Dan

2

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]

Biarkan R dan S menjadi rotasi dan matriks penskalaan dan T menjadi vektor terjemahan. Dalam grafik komputer, Anda mungkin perlu melakukan serangkaian terjemahan ke suatu titik. Anda bisa membayangkan betapa rumitnya hal ini.

Skala, terjemahkan, lalu putar dan ukur, kemudian terjemahkan lagi:

hal=SR(Shal+T)+T
Tidak terlalu buruk tetapi bayangkan Anda telah melakukan perhitungan ini pada jutaan poin. Yang kami inginkan adalah merepresentasikan rotasi, penskalaan, dan terjemahan semua sebagai perkalian matriks. Kemudian matriks tersebut dapat dikalikan bersama untuk matriks transformasi tunggal yang mudah untuk dikomputasi.

Skala, terjemahkan, lalu putar dan ukur, kemudian terjemahkan lagi:

M.=TSRTS
hal=M.hal

Kami dapat mencapai ini dengan menambahkan koordinat lain ke poin kami. Saya akan menunjukkan semua ini untuk grafik 2D (poin 3D) tetapi Anda bisa memperluas semua ini ke grafik 3D (poin 4D).

p=[xy1]
Rotation matrix:
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
Scale matrix:
S=[k1000k20001]
Translation matrix:
T=[10t101t2001]
You should work out some examples to convince yourself that these do in fact give you the desired transformation and that you can compose a series of transformations by multiplying multiple matrices together.

You could go further and allow the extra coordinate to take on any value.

p=[xyw]
and say this this homogeneous (x, y, w) coordinate represents the euclidean (x, y) coordinate at (x/w, y/w). Normally you cannot do division using matrix transformations, however by allowing w to be a divisor, you can set w to some value (through a matrix multiplication) and allow it to represent division. This is useful for doing projection because (in 3D) you will need to divide the x and y coordinates by -z (in a right handed coordinate system). You can achieve this by simply setting w to -z using the following projection matrix:
Q=[1000010000100010]

1

Calculations in affine coordinates often require divisions, which are expensive as compared to additions or multiplications. One usually does not need to divide when using projective coordinates.

Using projective coordinates (and more generally, projective geometry) tends to eliminate special cases too, making everything simpler and more uniform.


"Calculations in affine coordinates often require divisions": I don't see why. In fact you compute exactly the same expressions.
Yves Daoust

@Yves: I'm responding to the more general "use in computer graphics" topic, not the specific "computing matrix transformations" question.

@Hurkyl: so do I. When rendering a scene, you compute exactly the same expressions, with the same amount of divisions (the difference lies in dummy terms with a 0 factor).
Yves Daoust

@Yves: Hrm. I'm used to doing calculations where the conversion back to affine can be deferred to some extent; I'll cede to your expertise if you say that doesn't come up often.

-1
  • simpler formulas
  • Fewer special cases
  • Unification and
  • Duality

2
The answer is very unclear. You should elaborate on each point.
Rotem
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.