Ans CG Tut 1
1
Ans. to Tut 1
Qn 1
a) The tables are as follows:
Vertex Table Edge Table Face Table Attribute Table
a(0,0,0) E1: a,b F1: a b j f g F1:
(𝑘𝑘𝑎𝑎,𝑟𝑟𝑟𝑟𝑟𝑟,𝑘𝑘𝑎𝑎,𝑏𝑏𝑏𝑏𝑏𝑏𝑟𝑟,𝑘𝑘𝑎𝑎,𝑔𝑔𝑟𝑟𝑟𝑟𝑟𝑟𝑔𝑔) =
(0.5,0.5,0.5)
(𝑘𝑘𝑏𝑏,𝑟𝑟 ,𝑘𝑘𝑏𝑏,𝑏𝑏 ,𝑘𝑘𝑏𝑏,𝑔𝑔) =. ..
…
b(10,0,0) E2: b,j F2: b c d j F2 …
c(10,0,-20) E3: j,f F3: a g h i F3 …
d(10,10,-20) E4: f,g F4: i h e d c F4 …
e(5,15,-20) E5: g,a F5: j d e f F5 …
f(5,15,0) E6: b,c F6: g f e h F6 …
g(0,10,0) E7: j,d F7: a i c b
h(0,10,-20) E8: f,e
i(0,0,-20) E9: g,h
j(10,10,0) E10: a,i
E11: i,c
E12: c,d
E13: d,e
E14: e,h
E15: h,i
The face table is expressed using vertices. Alternatively, it may be expressed
using edges.
The attributes for each face may include for example,
ambient reflection coefficient 𝑘𝑘𝑎𝑎, diffusion reflection coefficient 𝑘𝑘𝑏𝑏, specular
reflection coefficient 𝑘𝑘𝑠𝑠, specular reflection exponent 𝑛𝑛𝑠𝑠, transparency coefficient
𝛼𝛼, etc.
Note that in the Face Table, some faces are “CW” and some “CCW” as seen by
us. because it should look “CCW” when seen by an observer outside. So “hidden
faces” should be “CW”.
b) 𝑁𝑁� = �𝑓𝑓𝑓𝑓����⃑ × 𝑓𝑓𝑓𝑓�����⃑ � = |(0, 0,−20) × (−5,−5,0)| = |(−100,100,0)| = �− 1
√2
, 1
√2
, 0�
c) To find the outward normal, we can for example cross vector jd with vector jf.
This gives
(A, B, C) = (0, 0, -20) × (-5, 5, 0) = �
𝑖𝑖 𝑗𝑗 𝑘𝑘
0 0 −20
−5 5 0
� = (100,100,0)
2
Thus we have
100 X + 100 Y + D = 0
Put in any vertex, say j = (10, 10, 0) gives D = -2000. Thus the plane equation is
X + Y – 20 = 0
Note
-X – Y + 20 = 0 is incorrect, because you should make sure that the normal (A, B,
C) is computed in a way that iff
X + Y – 20 > 0
the point (X, Y, Z) is outside and vice versa.
d) Compute the plane equation of each face
𝐴𝐴𝑖𝑖𝑥𝑥 + 𝐵𝐵𝑖𝑖𝑦𝑦 + 𝐶𝐶𝑖𝑖𝑧𝑧 + 𝐷𝐷𝑖𝑖 = 0 𝑖𝑖 = 1, … ,7
where (𝐴𝐴𝑖𝑖 ,𝐵𝐵𝑖𝑖,𝐶𝐶𝑖𝑖) is the outward surface normal.
Given a point (𝑥𝑥𝑝𝑝,𝑦𝑦𝑝𝑝, 𝑧𝑧𝑝𝑝), if and only if
𝐴𝐴𝑖𝑖𝑥𝑥𝑝𝑝 + 𝐵𝐵𝑖𝑖𝑦𝑦𝑝𝑝 + 𝐶𝐶𝑖𝑖𝑧𝑧𝑝𝑝 + 𝐷𝐷𝑖𝑖 < 0 𝑖𝑖 = 1, … ,7
then the point is inside the object (otherwise it is outside the object).
e) The above only works for convex objects. For concave objects, subdivide into 𝑚𝑚
convex subparts. Then if and only if (𝑥𝑥𝑝𝑝,𝑦𝑦𝑝𝑝, 𝑧𝑧𝑝𝑝) is inside one of the 𝑚𝑚 subparts,
the point is inside the object.
In general, it may be difficult to subdivide a complex object into convex sub-
objects. A general technique for testing whether a point is inside/outside is the
inside-outside test.
f) Collision detection in a virtual reality walkthrough.
Discuss: Can you think of another practical or emerging application?
Qn 2
a)
3
vertex_table [0].X = 10; vertex_table [0].Y = 0; vertex_table [0].Z = 0; // b(10, 0, 0)
vertex_table [1].X = 10; vertex_table [1].Y = 4; vertex_table [1].Z = 0; // c (10, 4, 0)
vertex_table [2].X = 10; vertex_table [2].Y = 4; vertex_table [2].Z = 5; // g (10, 4, 5)
vertex_table [3].X = 10; vertex_table [3].Y = 0; vertex_table [3].Z = 5; // f (10, 0, 5)
edge_table [0][0] = 0; edge_table [0][1] = 1; // 𝑏𝑏𝑏𝑏
edge_table [1][0] = 1; edge_table [1][1] = 2; // 𝑏𝑏𝑓𝑓
edge_table [2][0] = 2; edge_table [2][1] = 3; // 𝑓𝑓𝑓𝑓
edge_table [3][0] = 3; edge_table [3][1] = 0; // 𝑓𝑓𝑏𝑏
face_table [0] [0] = 0; face_table [0][1] = 1; face_table [0][2] = 2;
face_table [0][3] = 3; face_table [0][4] = 0;
b)
To represent the whole object, the preferred way is to use 3 quadrilateral meshes,
that is, use a separate quadrilateral mesh for both the top and the bottom face.
One example is gluCylinder. To close the ends of the cylinders, we use two
gluDisk commands. Thus there are three quadrilateral meshes.
c) (𝐴𝐴,𝐵𝐵,𝐶𝐶) = 𝑏𝑏𝑐𝑐����⃑ × 𝑏𝑏𝑓𝑓����⃑ = �
𝑖𝑖 𝑗𝑗 𝑘𝑘
−10 21 0
0 0 5
� = (105, 50, 0)
105𝑋𝑋 + 50𝑌𝑌 + 𝐷𝐷 = 0
Put in (X, Y, Z) = (10, 4, 0) ⇒ D = -1250
The equation is
105𝑋𝑋 + 50𝑌𝑌 − 1250 = 0 ⇒ 21𝑋𝑋 + 10𝑌𝑌 − 250 = 0
d) Using mesh has the advantage over table that there is no need to specify the edge
and face tables. Thus it saves memory.
Qn 3
a) The parametric form samples uniformly across the parameters. This gives a set of
pixels that appear continuous when displayed in screen coordinates. On the
contrary, without techniques to keep track of the slope of the curve, the non-
parametric form will sample uniformly in X (or Y), which gives a non-uniform
sampling across Y (or X). When displayed, this results in some pixels along the
curve that are not sampled (gap in the curve).
e f g h e
a b c d a
4
b) Let �𝑍𝑍
𝑟𝑟𝑧𝑧
�
2/𝑠𝑠1
= 𝑠𝑠𝑖𝑖𝑛𝑛2 𝜑𝜑 This gives 𝑍𝑍 = 𝑟𝑟𝑧𝑧 𝑠𝑠𝑖𝑖𝑛𝑛𝑠𝑠1 𝜑𝜑
(�𝑋𝑋
𝑟𝑟𝑥𝑥
�
2/𝑠𝑠2
+ � 𝑌𝑌
𝑟𝑟𝑦𝑦
�
2/𝑠𝑠2
)𝑠𝑠2/𝑠𝑠1 = 𝑏𝑏𝑐𝑐𝑠𝑠2 𝜑𝜑 ⇒ �𝑋𝑋
𝑟𝑟𝑥𝑥
�
2/𝑠𝑠2
+ �𝑌𝑌
𝑟𝑟𝑦𝑦
�
2/𝑠𝑠2
= (𝑏𝑏𝑐𝑐𝑠𝑠 𝜑𝜑)2𝑠𝑠1/𝑠𝑠2
Let �𝑋𝑋
𝑟𝑟𝑥𝑥
�
2/𝑠𝑠2
= (𝑏𝑏𝑐𝑐𝑠𝑠 𝜑𝜑)2𝑠𝑠1/𝑠𝑠2 𝑏𝑏𝑐𝑐𝑠𝑠2 𝜃𝜃 and �𝑌𝑌
𝑟𝑟𝑦𝑦
�
2/𝑠𝑠2
= (𝑏𝑏𝑐𝑐𝑠𝑠 𝜑𝜑)2𝑠𝑠1/𝑠𝑠2 𝑠𝑠𝑖𝑖𝑛𝑛2 𝜃𝜃
This gives
𝑋𝑋 = 𝑟𝑟𝑥𝑥 𝑏𝑏𝑐𝑐𝑠𝑠𝑠𝑠1 𝜑𝜑 𝑏𝑏𝑐𝑐𝑠𝑠𝑠𝑠2 𝜃𝜃 and 𝑌𝑌 = 𝑟𝑟𝑦𝑦 𝑏𝑏𝑐𝑐𝑠𝑠𝑠𝑠1 𝜑𝜑 𝑠𝑠𝑖𝑖𝑛𝑛𝑠𝑠2 𝜃𝜃
0 ≤ 𝜃𝜃 < 2𝜋𝜋 −𝜋𝜋
2
≤ 𝜑𝜑 < 𝜋𝜋
2
Physical meaning:
Consider a globe:
𝜑𝜑 latitude
𝜃𝜃 longitude
Qn 4
double sgn (double t )
{
if (t > 0)
return 1.0;
else if (t < 0)
return -1.0;
else
return 0.0;
}
void calculate_mesh (double s1, double s2)
// calculate the parameters of the sphere mesh
{
double ta, tb, tc, td;
for (int i=0; i