Vektor Normal Wajah dan Puncak (Direct3D 9)

Setiap wajah dalam jala memiliki vektor normal unit tegak lurus, seperti yang ditunjukkan dalam ilustrasi berikut. Arah vektor ditentukan oleh urutan di mana simpul didefinisikan dan oleh apakah sistem koordinat adalah kanan atau tangan kiri. Wajah normal menunjuk jauh dari sisi depan wajah. Di Direct3D, hanya bagian depan wajah yang terlihat. Wajah depan adalah salah satu di mana simpul didefinisikan dalam urutan searah jarang.

ilustrasi vektor normal untuk wajah depan

Setiap wajah yang bukan wajah depan adalah wajah belakang. Direct3D tidak selalu merender kembali wajah; oleh karena itu, wajah belakang dikatakan dimusnahkan. Anda dapat mengubah mode pemusnahan untuk merender kembali wajah jika anda mau. Lihat Status Culling (Direct3D 9) untuk informasi selengkapnya.

Direct3D menggunakan normal unit vertex untuk efek bayangan, pencahayaan, dan teksur Gouraud. Ilustrasi berikut menunjukkan contoh normal.

ilustrasi vertex normal

Saat menerapkan bayangan Gouraud ke poligon, Direct3D menggunakan normal puncak untuk menghitung sudut antara sumber cahaya dan permukaan. Ini menghitung nilai warna dan intensitas untuk simpul dan menginterpolasinya untuk setiap titik di semua permukaan primitif. Direct3D menghitung nilai intensitas cahaya dengan menggunakan sudut . Semakin besar sudutnya, semakin sedikit cahaya yang bersinar di permukaan.

Jika Anda membuat objek yang datar, atur puncak normal untuk menunjuk tegak lurus ke permukaan, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi permukaan datar yang terdiri dari dua segitiga dengan normal puncak

Namun, kemungkinan besar objek Anda terdiri dari strip segitiga dan segitiga tidak koplanar. Salah satu cara sederhana untuk mencapai bayangan halus di semua segitiga dalam strip adalah dengan terlebih dahulu menghitung vektor normal permukaan untuk setiap wajah poligonal yang dikaitkan dengan puncak. Puncak normal dapat diatur untuk membuat sudut yang sama dengan setiap permukaan normal. Namun, metode ini mungkin tidak cukup efisien untuk primitif yang kompleks.

Metode ini diilustrasikan oleh diagram berikut, yang menunjukkan dua permukaan, S1 dan S2 terlihat edge-on dari atas. Vektor normal untuk S1 dan S2 ditampilkan dalam warna biru. Vektor normal puncak ditampilkan dalam warna merah. Sudut yang dibuat vektor normal verteks dengan permukaan normal S1 sama dengan sudut antara puncak normal dan permukaan normal S2. Ketika kedua permukaan ini menyala dan berbayang dengan bayangan Gouraud, hasilnya adalah tepi yang berbayang halus dan halus di antara mereka.

diagram dua permukaan (s1 dan s2) dan vektor normal dan vektor normal verteksnya

Jika puncak normal bersandar ke salah satu wajah yang terkait dengannya, itu menyebabkan intensitas cahaya meningkat atau berkurang untuk titik-titik pada permukaan itu, tergantung pada sudut yang dibuatnya dengan sumber cahaya. Diagram berikut menunjukkan contoh. Sekali lagi, permukaan-permukaan ini terlihat edge-on. Vertex normal bersandar ke S1, menyebabkannya memiliki sudut yang lebih kecil dengan sumber cahaya daripada jika verteks normal memiliki sudut yang sama dengan permukaan normal.

diagram dua permukaan (s1 dan s2) dengan vektor normal puncak yang condong ke satu wajah

Anda dapat menggunakan bayangan Gouraud untuk menampilkan beberapa objek dalam adegan 3D dengan tepi tajam. Untuk melakukannya, duplikat vektor normal verteks di setiap persimpangan wajah di mana tepi tajam diperlukan, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi vektor normal verteks duplikat di tepi tajam

Jika Anda menggunakan metode DrawPrimitive untuk merender adegan Anda, tentukan objek dengan tepi tajam sebagai daftar segitiga, bukan strip segitiga. Saat Anda mendefinisikan objek sebagai strip segitiga, Direct3D memperlakukannya sebagai poligon tunggal yang terdiri dari beberapa wajah segitiga. Bayangan Gouraud diterapkan baik di setiap wajah poligon dan di antara wajah yang berdekatan. Hasilnya adalah objek yang dinaungi dengan lancar dari tatap muka. Karena daftar segitiga adalah poligon yang terdiri dari serangkaian wajah segitiga yang terputus-putus, Direct3D menerapkan bayangan Gouraud di setiap wajah poligon. Namun, itu tidak diterapkan dari tatap muka. Jika dua segitiga atau lebih dari daftar segitiga berdekatan, mereka tampaknya memiliki keunggulan tajam di antara mereka.

Alternatif lainnya adalah mengubah bayangan datar saat merender objek dengan tepi tajam. Ini secara komputasi metode yang paling efisien, tetapi dapat mengakibatkan objek dalam adegan yang tidak dirender secara realistis seperti objek yang berbayang Gouraud.

Sistem Koordinat dan Geometri