Properti Cahaya (Direct3D 9)

Properti cahaya menjelaskan jenis dan warna sumber cahaya. Tergantung pada jenis cahaya yang digunakan, cahaya dapat memiliki properti untuk redaman dan rentang, atau untuk efek sorotan. Tapi, tidak semua jenis lampu menggunakan semua properti. Direct3D menggunakan struktur D3DLIGHT9 untuk membawa informasi tentang properti cahaya untuk semua jenis sumber cahaya. Bagian ini berisi informasi untuk semua properti cahaya. Informasi dibagi menjadi grup berikut.

Properti posisi, rentang, dan pelambatan mendefinisikan lokasi cahaya di ruang dunia dan bagaimana cahaya yang dipancarkannya bereaksi dari jarak jauh. Seperti semua properti cahaya yang Anda gunakan di C++, ini terkandung dalam struktur D3DLIGHT9 cahaya.

Redaman Cahaya

Pelambatan mengontrol bagaimana intensitas cahaya menurun menuju jarak maksimum yang ditentukan oleh properti rentang. Tiga anggota struktur D3DLIGHT9 mewakili redaman ringan: Attenuation0, Attenuation1, dan Attenuation2. Anggota ini berisi nilai floating-point mulai dari 0,0 hingga tak terbatas, mengontrol redaman cahaya. Beberapa aplikasi mengatur anggota Attenuation1 ke 1,0 dan yang lain menjadi 0,0, menghasilkan intensitas cahaya yang berubah sebagai 1 / D, di mana D adalah jarak dari sumber cahaya ke puncak. Intensitas cahaya maksimum ada di sumbernya, menurun menjadi 1 / (Rentang Cahaya) pada rentang cahaya. Biasanya, aplikasi menetapkan Attenuation0 ke 0,0, Attenuation1 ke nilai konstanta, dan Attenuation2 ke 0,0.

Anda dapat menggabungkan nilai redaman untuk mendapatkan efek redaman yang lebih kompleks. Atau, Anda dapat mengaturnya ke nilai di luar rentang normal untuk membuat efek redaman yang lebih asing. Namun, nilai redaman negatif tidak diperbolehkan. Lihat Faktor Redaman dan Sorotan (Direct3D 9).

Warna Terang

Lampu di Direct3D memancarkan tiga warna yang digunakan secara independen dalam komputasi pencahayaan sistem: warna difus, warna sekitar, dan warna spekular. Masing-masing dimasukkan oleh modul pencahayaan Direct3D, berinteraksi dengan mitra dari bahan saat ini, untuk menghasilkan warna akhir yang digunakan dalam penyajian. Warna difus berinteraksi dengan properti refleksi difus dari bahan saat ini, warna spekular dengan properti pantulan spekular bahan, dan sebagainya. Untuk detail tentang bagaimana Direct3D menerapkan warna-warna ini, lihat Matematika Pencahayaan (Direct3D 9).

Dalam aplikasi C++, struktur D3DLIGHT9 mencakup tiga anggota untuk warna-warna ini - Diffuse, Ambient, dan Specular - masing-masing adalah struktur D3DCOLORVALUE yang menentukan warna yang dipancarkan.

Jenis warna yang paling banyak berlaku untuk komputasi sistem adalah warna difus. Warna difus yang paling umum adalah putih (R:1.0 G:1.0 B:1.0), tetapi Anda dapat membuat warna sesuai kebutuhan untuk mencapai efek yang diinginkan. Misalnya, Anda dapat menggunakan lampu merah untuk perapian, atau Anda dapat menggunakan lampu hijau untuk sinyal lalu lintas yang diatur ke "Pergi."

Umumnya, Anda mengatur komponen warna terang ke nilai antara 0,0 dan 1,0, inklusif, tetapi ini bukan persyaratan. Misalnya, Anda dapat mengatur semua komponen ke 2.0, membuat cahaya yang "lebih terang daripada putih." Jenis pengaturan ini dapat sangat berguna ketika Anda menggunakan pengaturan redaman selain konstanta.

Perhatikan bahwa meskipun Direct3D menggunakan nilai RGBA untuk lampu, komponen warna alfa tidak digunakan.

Biasanya warna material digunakan untuk pencahayaan. Namun, Anda dapat menentukan bahwa warna bahan-emissif, sekitar, difus, dan spekular-adalah untuk ditimpa oleh warna verteks difus atau spekular. Ini dilakukan dengan memanggil SetRenderState dan mengatur variabel status perangkat yang tercantum dalam tabel berikut.

Variabel status perangkat Makna Jenis Default
D3DRS_AMBIENTMATERIALSOURCE Menentukan tempat untuk mendapatkan warna bahan sekitar. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Menentukan tempat untuk mendapatkan warna bahan difus. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Mendefinisikan tempat untuk mendapatkan warna bahan spekular. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Mendefinisikan tempat untuk mendapatkan warna bahan emissif. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Menonaktifkan atau mengaktifkan penggunaan warna puncak. BOOL TRUE

 

Nilai alfa/transparansi selalu hanya berasal dari saluran alfa warna difus.

Nilai kabut selalu hanya berasal dari saluran alfa warna spekular.

D3DMATERIALCOLORSOURCE dapat memiliki nilai berikut.

  • D3DMCS_MATERIAL - Warna material digunakan sebagai sumber.
  • D3DMCS_COLOR1 - Warna verteks difus digunakan sebagai sumber.
  • D3DMCS_COLOR2 - Warna puncak spekular digunakan sebagai sumber.

Arah Cahaya

Properti arah lampu menentukan arah cahaya yang dipancarkan oleh objek berjalan, di ruang dunia. Arah hanya digunakan oleh lampu arah dan lampu sorot, dan dijelaskan dengan vektor.

Atur arah cahaya di anggota Arah struktur D3DLIGHT9 lampu. Anggota arah berjenis D3DVECTOR. Vektor arah digambarkan sebagai jarak dari asal logis, terlepas dari posisi cahaya dalam adegan. Oleh karena itu, sorotan yang menunjuk langsung ke adegan - di sepanjang sumbu z positif - memiliki vektor <arah 0,0,1> di mana pun posisinya didefinisikan. Demikian pula, Anda dapat mensimulasikan sinar matahari yang bersinar langsung di tempat kejadian dengan menggunakan lampu arah yang arahnya <0,-1,0>. Jelas, Anda tidak perlu membuat lampu yang bersinar di sepanjang sumbu koordinat; Anda dapat mencampur dan mencocokkan nilai untuk membuat lampu yang bersinar pada sudut yang lebih menarik.

Catatan

Meskipun Anda tidak perlu menormalkan vektor arah lampu, selalu pastikan bahwa itu memiliki besaran. Dengan kata lain, jangan gunakan <vektor arah 0,0,0> .

 

Posisi Cahaya

Posisi ringan dijelaskan menggunakan struktur D3DVECTOR di anggota Posisi struktur D3DLIGHT9 . Koordinat x, y-, dan z diasumsikan berada di ruang dunia. Lampu arah adalah satu-satunya jenis cahaya yang tidak menggunakan properti posisi.

Rentang Cahaya

Properti rentang cahaya menentukan jarak, di ruang dunia, di mana jala dalam adegan tidak lagi menerima cahaya yang dipancarkan oleh objek tersebut. Anggota Rentang berisi nilai floating-point yang mewakili rentang maksimum cahaya, di ruang dunia. Lampu arah tidak menggunakan properti rentang.

Lampu dan Bahan