Bagikan melalui


Properti Cahaya (Direct3D 9)

Properti cahaya menjelaskan jenis dan warna sumber cahaya. Tergantung pada jenis cahaya yang digunakan, cahaya dapat memiliki sifat untuk pelampan 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.

Atenuasi Cahaya

Atenuasi mengontrol bagaimana intensitas cahaya menurun menuju jarak maksimum yang ditentukan oleh properti rentang. Tiga D3DLIGHT9 anggota struktur mewakili perenahan ringan: Attenuation0, Attenuation1, dan Attenuation2. Anggota ini berisi nilai floating-point mulai dari 0,0 hingga tak terbatas, mengontrol pelambatan 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 vertex. Intensitas cahaya maksimum ada di sumbernya, menurun menjadi 1 / (Rentang Cahaya) pada rentang cahaya. Biasanya, aplikasi menetapkan Attenuation0 ke 0,0, Atenuasi1 ke nilai konstanta, dan Attenuation2 ke 0,0.

Anda dapat menggabungkan nilai pelambatan untuk mendapatkan efek pelambatan yang lebih kompleks. Atau, Anda dapat mengaturnya ke nilai di luar rentang normal untuk membuat efek pelambatan yang lebih asing. Namun, nilai pelambatan negatif tidak diperbolehkan. Lihat Attenuation and Spotlight Factor (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 digabungkan 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 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 "Buka."

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 dari 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-yang akan ditimpa oleh warna verteks yang berbeda atau spekular. Ini dilakukan dengan memanggil SetRenderState dan mengatur variabel status perangkat yang tercantum dalam tabel berikut.

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

 

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

Nilai kabut selalu hanya berasal dari saluran alfa warna spekular.

D3DMATERIALCOLORSOURCE bisa memiliki nilai berikut.

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

Arah Cahaya

Properti arah cahaya 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 cahaya. 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.

Nota

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 dalam 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 itu. Anggota Rentang berisi nilai floating-point yang mewakili rentang maksimum cahaya, di ruang dunia. Lampu arah tidak menggunakan properti rentang.

Lampu dan Bahan