Bagikan melalui


Efek pencahayaan spot-diffuse

Gunakan efek pencahayaan spot-diffuse untuk membuat gambar yang tampaknya merupakan permukaan non-reflektif dengan di mana sumber cahaya terbatas pada kerucut cahaya yang diarahkan dan cahaya tersebar di semua arah. Efek ini menggunakan saluran alfa sebagai peta tinggi dan menyalakan gambar dengan sumber cahaya spot.

Warna bitmap output adalah hasil dari warna terang, posisi cahaya, dan geometri permukaan. Output saluran alfa untuk setiap piksel dengan pencahayaan difus selalu 1,0.

CLSID untuk efek ini CLSID_D2D1SpotDiffuse.

Contoh gambar

Contoh di sini menunjukkan gambar input dan output dari efek pencahayaan spot-diffuse.

contoh cuplikan layar efek yang menunjukkan

Efek menghitung nilai piksel output akhir dihitung menggunakan persamaan ini:

perhitungan bitmap output

Di mana:

kd = konstanta pencahayaan difus. Ditentukan oleh pengguna.
simbol vektor normal. = vektor unit normal permukaan, fungsi x dan y.
simbol vektor cahaya. = vektor unit menunjuk dari permukaan ke cahaya.
Lr, Lg, Lb = warna terang dalam komponen RGB.

Properti efek

Nama tampilan dan enumerasi indeks Jenis dan nilai default Deskripsi
LightPosition
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0,0f, 0,0f, 0,0f}
Posisi cahaya sumber cahaya titik. Properti adalah D2D1_VECTOR_3F yang didefinisikan sebagai (x, y, z). Unit berada dalam piksel independen perangkat (DIP) dan tidak terbatas.
PointsAt
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0,0f, 0,0f, 0,0f}
Di mana lampu spot difokuskan. Properti diekspos sebagai D2D1_VECTOR_3F dengan (x, y, z). Unit berada di DIP dan nilainya tidak terbatas.
Fokus
D2D1_SPOTDIFFUSE_PROP_FOCUS
FLOAT
1,0f
Fokus lampu spot. Properti ini tidak bersatu dan didefinisikan antara 0 dan 200.
LimitingConeAngle
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
FLOAT
90,0f
Sudut kerujut yang membatasi wilayah tempat cahaya diproyeksikan. Tidak ada cahaya diproyeksikan di luar kerujut. Sudut kerujut yang membatasi adalah sudut antara sumbu lampu spot (sumbu antara properti LightPosition dan PointsAt ) dan kerujut cahaya spot. Properti ini didefinisikan dalam derajat dan harus antara 0 hingga 90 derajat.
DiffuseConstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
FLOAT
1,0f
Rasio pantulan difus terhadap jumlah cahaya masuk. Properti ini harus antara 0 dan 10.000 dan tidak bersatu.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
FLOAT
1,0f
Faktor skala ke arah Z. Skala permukaan tidak bersatu dan harus antara 0 dan 10.000.
Warna
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Warna cahaya masuk. Properti ini diekspos sebagai Vektor 3 (R, G, B) dan digunakan untuk menghitung LR, LG, LB.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
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.
ScaleMode
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
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.

Mode skala

Enumeration Deskripsi
D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Sampel titik tunggal terdekat dan menggunakannya. Mode ini menggunakan lebih sedikit waktu pemrosesan, tetapi menghasilkan gambar berkualitas terendah.
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR Menggunakan sampel empat titik dan interpolasi linier. Mode ini menghasilkan gambar berkualitas lebih tinggi daripada tetangga terdekat.
D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC Menggunakan 16 sampel kernel kubik untuk interpolasi. Mode ini menggunakan waktu pemrosesan terbanyak, tetapi menghasilkan gambar berkualitas lebih tinggi.
D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Menggunakan 4 sampel linier dalam satu piksel untuk anti-aliasing tepi yang baik. Mode ini baik untuk menurunkan skala dengan jumlah kecil pada gambar dengan beberapa piksel.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Menggunakan pemfilteran anisotropik untuk mengambil sampel pola sesuai dengan bentuk bitmap yang diubah.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Menggunakan ukuran variabel kernel kubik berkualitas tinggi untuk melakukan pra-downscale gambar jika penurunan skala terlibat dalam matriks transformasi. Kemudian menggunakan mode interpolasi kubik untuk output akhir.

Catatan

Jika Anda tidak memilih mode, efek akan default ke D2D1_SPOTDIFFUSE_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