Game Development Reference
In-Depth Information
After dividing by w , we arrive at the following value for the projected z
coordinate.
+
n
fn
f
2
(
)
P
′ =+
1
ε f
+
z
(
)
nPf
n
z
f
+
n
2
fn
f
+
n
=
+
+
ε
(9.4)
(
)
f
nPf
n
f
n
z
Comparing this to the z coordinate in Equation (9.2), we see that we have found a
way to offset projected depth values by a constant
ε
f
n
.
f
n
9.1.2 Offset Value Selection
Due to the nonlinear nature of the z -buffer, the constant offset given in Equation
(9.4) corresponds to a larger difference far from the camera than it does near the
camera. Although this constant offset may work well for some applications, there
is no single solution that works for every application at all depths. The best we
can do is choose an appropriate ε , given a camera-space offset δ and a depth val-
ue P , that collectively represents the object that we are offsetting. To determine a
formula for ε , we examine the result of applying the standard projection matrix
from Equation (9.1) to a point whose z coordinate has been offset by some small
δ as follows.
f
+
n
2
fn
f
+
n
2
fn
(
)
P δ
+
P δ
+
z
z
f
n
f
n
f
n
f
n
=
(9.5)
1
(
)
1
0
−+
P δ
z
Dividing by w , we have the following value for the projected z coordinate.
f
+
n
2
fn
P
′ =
+
z
(
)(
)
f
n Pδ f
+
n
z
f
+
n
2
fn
2
fn
1
1
=
+
+
(9.6)
(
)
f
nPf
n f
nPδ P
+
z
z
z
Equating this result to Equation (9.4) and simplifying a bit, we end up with
2
fn
δ
ε
=−
.
(9.7)
(
)
f
+
nPPδ
+
z
z