Phong-árnyalás interpolációjára példa
A Phong-árnyalás az illuminációs képletben felhasznált normálvektort interpolálja a háromszög csúcspontjaiban érvényes normálvektorokból. Az illuminációs képletet pedig minden pixelre külön határozza meg.
A phong-árnyalás a színtérben nemlineáris interpolációnak felel meg, így nagyobb poligonokra is megbirkózik a tükrös felületek gyorsan változó radianciájával.
A Phong-árnyalás programja a következő:
X
s
t
a
r
t
=
X
1
+
0.5
,
X
e
n
d
=
X
1
+
0.5
,
N
→
s
t
a
r
t
=
N
→
1
{\displaystyle X_{start}=X_{1}+0.5,~~~X_{end}=X_{1}+0.5,~~~{\overrightarrow {N}}_{start}={\overrightarrow {N}}_{1}}
f
o
r
Y
=
Y
1
t
o
Y
2
d
o
{\displaystyle {\mathtt {for}}~~~Y=Y_{1}~{\mathtt {to}}~Y_{2}~~~{\mathtt {do}}}
N
→
=
N
→
s
t
a
r
t
{\displaystyle ~~~~~~{\overrightarrow {N}}={\overrightarrow {N}}_{start}}
f
o
r
X
=
T
r
u
n
c
(
X
s
t
a
r
t
)
t
o
T
r
u
n
c
(
X
e
n
d
)
d
o
{\displaystyle ~~~~~~{\mathtt {for}}~~~X={\mathtt {Trunc}}(X_{start})~{\mathtt {to}}~{\mathtt {Trunc}}(X_{end})~~~{\mathtt {do}}}
(
R
,
G
,
B
)
=
S
h
a
d
i
n
g
M
o
d
e
l
(
N
→
)
{\displaystyle ~~~~~~~~~~~~(R,G,B)={\mathtt {ShadingModel}}({\overrightarrow {N}})}
P
i
x
e
l
(
X
,
Y
,
T
r
u
n
c
(
R
)
,
T
r
u
n
c
(
G
)
,
T
r
u
n
c
(
B
)
)
{\displaystyle ~~~~~~~~~~~~{\mathtt {Pixel}}(X,~Y,~{\mathtt {Trunc}}(R),~{\mathtt {Trunc}}(G),~{\mathtt {Trunc}}(B))}
N
→
+
=
δ
N
→
X
{\displaystyle ~~~~~~~~~~~~{\overrightarrow {N}}\mathrel {+} =\delta {\overrightarrow {N}}_{X}}
e
n
d
f
o
r
{\displaystyle ~~~~~~{\mathtt {endfor}}}
X
s
t
a
r
t
+
=
δ
X
Y
s
,
X
e
n
d
+
=
δ
X
Y
e
,
N
→
s
t
a
r
t
+
=
δ
N
→
Y
s
{\displaystyle ~~~~~~X_{start}\mathrel {+} =\delta X_{Y}^{s},~~~X_{end}\mathrel {+} =\delta X_{Y}^{e},~~~{\overrightarrow {N}}_{start}\mathrel {+} =\delta {\overrightarrow {N}}_{Y}^{s}}
e
n
d
f
o
r
{\displaystyle {\mathtt {endfor}}}