假设我们有以下场景:
K_d = 0
、K_s = 1
和 n = 30
找到 x 的值,片段着色器为其计算图像中心的最亮值。
我的尝试:
Blinn-Phong 是:
I_res = K_a * I_a + I * K_d * norm.L + I * K_s * (norm.H)^n
因为没有指定环境
K_d = 0
那么我们简化为:
I_res = I * K_s * (norm.H)^n
并使用
K_s
和 I
给出的值:
I_res = (norm.H)^30
三角形的所有 3 个顶点的法线都是 (0, 0, 1) 所以在三角形的任何片段都是相同的。因此,
norm = (0, 0, 1)
。因此,与 H 的点积仅取决于 z
的 H
值。
计算H:
H = (L+V) / |L+V|
L = (0, 0, 0) - (x, 0, 2) = (-x, 0, -2)
V = (0, 0, -1)
H = (-x, 0, -3) / |L+V|
H = (-x, 0, -3) / sqroot(x^2 + 3^2)
H = (-x / sqroot(x^2 + 3^2), 0, -3 / sqroot(x^2 + 3^2))
norm.H = (0, 0, 1) . (-x / sqroot(x^2 + 3^2), 0, -3 / sqroot(x^2 + 3^2))
norm.H = -3 / sqroot(x^2 + 3^2)
为了最大化
norm.H
,我们需要最小化sqroot(x^2 + 3^2)
:
所以
x = 0
.