Saya belajar render pipa yang dapat diprogram dengan menerapkan renderer perangkat lunak kecil. Saya mencoba menerapkannya dalam gaya 'perangkat keras'. Namun, saya tidak terbiasa dengan pipa GPU dan mendapat beberapa masalah kliping yang homogen.
Ruang kliping homogen berisi variabel w yang bervariasi di setiap titik. Apakah setiap koordinat objek homogen (antara matriks proyeksi dan pembagian homogen oleh w) pada ruang klipingnya sendiri? Jika demikian, bagaimana cara memotong garis dan segitiga lebih dekat daripada Frustum atau bahkan meregangkan di belakang kamera (yaitu w <= frustum_znear)?
Pembaruan : utas ini mengatakan bahwa kliping di ruang homogen secara langsung merupakan masalah persimpangan di ruang homogen 4D. Yang berarti titik persimpangan adalah p_vec4 = t * point1_vec4 + (1 - t) * point2_vec4
. Katakanlah saya memiliki P0(-70, -70, 118, 120)
dan P1(-32, -99, -13, -11)
dalam ruang homogen 4D, dan titik persimpangan dengan plane w = -z
(yang dalam NDC adalah z = -1) adalah (-35, -96, -1, 0.9) t = 0.99
, bagaimana cara mendapatkan objek vertex yang sesuai dalam ruang NDC?
Dan begitu saya mendapatkan titik persimpangan yang benar, haruskah saya melakukan interpolasi antara objek vertex yang dihasilkan oleh vertex shader untuk mendapatkan objek vertex baru?
sumber
Jawaban:
Kliping dilakukan dalam ruang 3D sebelum pembagian 'w', bukan dalam ruang 4D.
GPU menemukan hanya pesawat dekat dan jauh, atau semua 6 pesawat 3D dari tampilan frustum dan klip Geo untuk ini.
Jika pembagian dilakukan sebelum tanda koordinat akan membalik untuk simpul di belakang mata / kamera.
Jika hanya pesawat jarak dekat yang digunakan untuk klip 3D sebelum pembagian, maka mungkin hanya mengandalkan kliping 2D pada tahap rasterisasi untuk pesawat x & y.
W hanyalah pembagi proyeksi yang terkait langsung dengan Z, bukan sebenarnya dimensi ke-4. Matriks 4x4 adalah "retas" untuk memasukkan divisi terjemahan dan proyeksi dalam format yang sesuai. Ini berfungsi hanya karena posisi tersirat menjadi (x, y, z, 1) dan normals dinyatakan menjadi (x, y, z, 0).
Tapi sebenarnya bukan 4 dimensi independen.
Nilai lain untuk "W" yang bukan 1 atau 0 tidak masuk akal untuk geometri, itu adalah saklar on / off yang nyaman untuk mematikan terjemahan.
sumber
Jika Anda bertanya tentang mengonversi koordinat ruang klip homogen ke koordinat koordinat perangkat dinormalisasi (NDC), prosesnya adalah:
<x y z w> → <x/w y/w z/w>
Tanya Jawab GDSE ini tentang Mengapa ruang klip selalu disebut sebagai "ruang klip homogen"? mungkin juga bermanfaat bagi Anda.
sumber