Ada kebingungan di sini.
OpenGL digunakan dengan benar di ruang objek dan ruang dunia.
Tapi di ruang jendela (alias ruang layar) kita tiba-tiba kidal .
Bagaimana ini bisa terjadi ?
Cara kita beralih dari tangan kanan ke kidal adalah entri penskalaan z negatif dalam matriks proyeksi glOrtho
atau glFrustum
. Penskalaan z sebesar -1 (dengan membiarkan x dan y sebagaimana adanya) memiliki efek mengubah penggunaan tangan sistem koordinat.
Untuk glFrustum,
jauh dan dekat seharusnya positif, dengan jauh > dekat . Katakanlah jauh = 1000 dan dekat = 1. Maka C = - (1001) / (999) = -1.002.
Lihat di sini untuk detail dan diagram lebih lanjut.
Dari perspektif ortografik , glOrtho menghasilkan matriks seperti ini:
Di sini, kiri , kanan , bawah dan atas hanyalah koordinat untuk vertikal kiri , vertikal kanan , horizontal bawah , bidang kliping horizontal atas (resp) .
Pesawat dekat dan jauh , bagaimanapun, dispesifikasikan secara berbeda . The dekat parameter didefinisikan sebagai
- Dekat: Jarak ke bidang kliping kedalaman yang lebih dekat. Jarak ini negatif jika pesawat berada di belakang pemirsa.
dan jauh:
- zFar Jarak ke bidang pemotongan yang lebih dalam. Jarak ini negatif jika pesawat berada di belakang pemirsa.
Di sini kami memiliki volume tampilan kanonik biasa
Karena pengali z adalah (-2 / (jauh-dekat)), tanda minus secara efektif menskalakan z dengan -1 . Ini berarti bahwa "z" diputar ke kiri selama transformasi tampilan, tanpa sepengetahuan kebanyakan orang karena mereka hanya bekerja di OpenGL sebagai sistem koordinat "tangan kanan".
Jadi, jika Anda menelepon
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Maka NEAR PLANE berada 10 unit di depan Anda . Kamu dimana Mengapa, di asalnya, dengan sumbu x di kanan Anda, sumbu y di atas kepala Anda, dan hidung Anda mengarah ke bawah sumbu z negatif (itu defaultnya "Secara default, kamera terletak di titik asal , menunjuk ke bawah sumbu z negatif, dan memiliki vektor atas (0, 1, 0). " ). Jadi bidang terdekat berada pada z = -10. Bidang jauh berada 10 unit di belakang Anda, pada z = + 10 .