Bagikan melalui


Efek pencahayaan spekular titik

Gunakan efek pencahayaan spekular titik untuk membuat gambar yang tampaknya merupakan permukaan reflektif. Efeknya menggunakan saluran alfa gambar sebagai peta tinggi dan sumber cahaya titik yang Anda posisikan, dan menghitung pantulan dan cahaya sesuai dengan bagian spekular dari model pencahayaan Phong.

Warna bitmap output adalah hasil dari warna terang, posisi cahaya, dan geometri permukaan. Output saluran alfa untuk setiap piksel dengan pencahayaan spekular adalah maksimum output saluran merah, hijau, dan biru untuk piksel tersebut.

CLSID untuk efek ini CLSID_D2D1PointSpecular.

Contoh gambar

Contoh di sini menunjukkan gambar input dan output dari efek pencahayaan titik-spekular.

contoh cuplikan layar efek yang menunjukkan gambar input dan output dari efek pencahayaan spekular titik.

Cahaya spekular mengacu pada cahaya yang tercermin dalam arah tertentu sesuai dengan model pencahayaan Phong.

diagram vektor yang digunakan untuk menghitung output pencahayaan spekular untuk bitmap.

Efek menghitung nilai piksel output akhir menggunakan persamaan di sini:

persamaan untuk menghitung nilai piksel akhir.

Di mana

K? = konstanta pencahayaan spekular.
simbol vektor unit normal permukaan. = vektor unit normal permukaan yang merupakan fungsi dari x dan y. Lihat Peta tinggi dan vektor normal untuk perhitungan.
simbol vektor unit setengah. = Vektor unit "halfway" antara vektor unit mata dan vektor unit cahaya. Lihat Sumber cahaya titik untuk perhitungan.
Lr, Lg, Lb = warna terang dalam komponen RGB.

Anda mengatur konstanta pencahayaan spekular sebagai properti SpecularConstant dan warna terang sebagai properti Warna .

Sumber cahaya titik

Sumber cahaya titik memancarkan cahaya ke semua arah seperti pada gambar di sini.

cahaya titik memancarkan cahaya ke semua arah.

Anda mengatur posisi sumber cahaya menggunakan properti LightPosition . Efek menghitung vektor cahaya, L , untuk sumber cahaya titik menggunakan persamaan di sini:

persamaan vektor cahaya.

di mana Light?, Lighty, dan Lightz adalah posisi lampu input. Efek menghitung vektor setengah jalan, simbol vektor setengah jalan. seperti yang didefinisikan dalam model pencahayaan Phong, menggunakan persamaan di sini. Model pencahayaan mengasumsikan bahwa vektor mata, simbol vektor mata, terletak di (0,0,1).

persamaan vektor setengah jalan.

L dan H dinormalisasi ke vektor panjang unit.

Peta tinggi dan vektor normal

Efek menghasilkan peta tinggi untuk gambar input berdasarkan saluran alfanya.

Komponen tinggi (Z) dihitung menggunakan persamaan:

persamaan untuk menghitung tinggi (z) permukaan.

Efek menghitung permukaan normal, simbol vektor normal., untuk bitmap input menggunakan gradien Sobel.

Konstanta pencahayaan dan eksponen spekular

Cahaya spekular mewakili cahaya yang tercermin dari permukaan peta tinggi gambar. Anda menentukan properti SpecularExponent yang menentukan jumlah pantulan spekular dari bitmap.

Eksponen yang lebih besar mewakili objek yang lebih bersinar dan memantulkan cahaya dalam bentuk yang lebih fokus.

Properti SpecularConstant K? mendefinisikan jumlah cahaya yang tercermin sebagai rasio cahaya masuk.

Properti efek

Nama tampilan dan enumerasi indeks Deskripsi
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Posisi cahaya sumber cahaya titik. Properti adalah D2D1_VECTOR_3F yang didefinisikan sebagai (x, y, z). Unit berada dalam piksel independen perangkat (DIP) dan nilainya tidak bersatu dan tidak terbatas. Jenisnya D2D1_VECTOR_3F.
Nilai defaultnya adalah {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Eksponen untuk istilah spekular dalam persamaan pencahayaan Phong. Nilai yang lebih besar sesuai dengan permukaan yang lebih reflektif. Nilai ini tidak bersatu dan harus antara 1,0 dan 128. Jenisnya adalah FLOAT.
Nilai defaultnya adalah 1,0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Rasio pantulan spekular terhadap cahaya masuk. Nilainya tidak bersatu dan harus antara 0 dan 10.000. Jenisnya adalah FLOAT.
Nilai defaultnya adalah 1,0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Faktor skala dalam arah Z untuk menghasilkan peta tinggi. Nilainya tidak bersatu dan harus antara 0 dan 10.000. Jenisnya adalah FLOAT.
Nilai defaultnya adalah 1,0f.
Warna
D2D1_POINTSPECULAR_PROP_COLOR
Warna cahaya masuk. Properti ini diekspos sebagai D2D1_VECTOR_3F (R, G, B) dan digunakan untuk menghitung LR, LG, LB. Jenisnya D2D1_VECTOR_3F.
Nilai defaultnya adalah {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Ukuran elemen dalam kernel Sobel yang digunakan untuk menghasilkan permukaan normal ke arah X dan Y. Properti ini memetakan ke nilai dx dan dy dalam gradien Sobel. Properti ini adalah D2D1_VECTOR_2F(Kernel Unit Length X, Kernel Unit Length Y) dan didefinisikan dalam (DIP/Kernel Unit). Efeknya menggunakan interpolasi bilinear untuk menskalakan bitmap agar sesuai dengan ukuran elemen kernel. Jenisnya D2D1_VECTOR_2F.
Nilai defaultnya adalah {1.0f, 1.0f}.
ScaleMode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
Mode interpolasi yang digunakan efek untuk menskalakan gambar ke panjang unit kernel yang sesuai. Ada enam mode skala yang berkisar dalam kualitas dan kecepatan. Lihat Mode skala untuk informasi selengkapnya.
Jenisnya D2D1_POINTSPECULAR_SCALE_MODE.
Nilai defaultnya adalah D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Mode skala

Enumeration Deskripsi
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Sampel titik tunggal terdekat dan menggunakannya. Mode ini menggunakan lebih sedikit waktu pemrosesan, tetapi menghasilkan gambar kualitas terendah.
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR Menggunakan sampel empat titik dan interpolasi linier. Mode ini menghasilkan gambar berkualitas lebih tinggi daripada tetangga terdekat.
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC Menggunakan 16 sampel kernel kubik untuk interpolasi. Mode ini menggunakan waktu pemrosesan terbanyak, tetapi menghasilkan gambar berkualitas lebih tinggi.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Menggunakan 4 sampel linier dalam satu piksel untuk anti-alias tepi yang baik. Mode ini baik untuk menurunkan skala dengan jumlah kecil pada gambar dengan beberapa piksel.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Menggunakan pemfilteran anisotropic untuk mengambil sampel pola sesuai dengan bentuk bitmap yang diubah.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Menggunakan ukuran variabel kernel kubik berkualitas tinggi untuk melakukan pra-downscale gambar jika downscaling terlibat dalam matriks transformasi. Kemudian menggunakan mode interpolasi kubik untuk output akhir.

Catatan

Jika Anda tidak memilih mode, efek akan default ke D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 dan Pembaruan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows]
Server minimum yang didukung Windows 8 dan Pembaruan Platform untuk Windows 7 [aplikasi desktop | Aplikasi Bursa Windows]
Header d2d1effects.h
Pustaka d2d1.lib, dxguid.lib

ID2D1Effect