3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

39
Graphics for Game Programming (J. Han) Chapter II Chapter II Vertex Processing Vertex Processing

Transcript of 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

Page 1: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Chapter IIChapter IIVertex ProcessingVertex Processing

Page 2: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Rendering PipelineRendering Pipeline

Main stages in the pipeline The vertex processing stage operates on every input vertex stored in the vertex

buffer and performs various operations such as transform. The rasterization stage assembles polygons from the vertices and converts each

polygon into a set of fragments. (A fragment refers to a set of data needed to update a pixel in the color buffer. The color buffer is a memory space storing the pixels to be displayed on the screen.)

The fragment processing stage operates on each fragment and determines its color.

In the output merging stage, the fragment competes or combines with the pixel in the color buffer to update the pixel color.

2-22

Page 3: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Rendering Pipeline (cont’d)Rendering Pipeline (cont’d)

Two programmable and two hard-wired (fixed) stages The vertex and fragment processing stages are programmable. The programs for

the stages are called vertex program and fragment program. Using the programs, for example, you can apply any transform you want to the vertex, and you can determine the fragment color through any way you want.

The rasterization and output merging stages are fixed or hardwired. They are not programmable but are just configurable through user-defined parameters.

2-33

Page 4: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Spaces and Transforms for Vertex ProcessingSpaces and Transforms for Vertex Processing

Typical operations on a vertex Transform - This chapter Lighting - This chapter and Chapter 5 Animation - Chapter 11

Transforms at the vertex processing stage World transform View transform Projection transform.

2-44

Page 5: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Affine Transform – Scaling Affine Transform – Scaling

The world and view transforms are built upon affine transforms. Affine transform

Linear transform Scaling Rotation etc.

Translation

Scaling examples in 2D

If all of the scaling factors, sx, sy, and sz, are identical, the scaling is called uniform. Otherwise, it is a non-uniform scaling.

2-55

1

2

2

2

1

1

2

4

(-1,-1) (-2,-1) (-1,-1/2)(-2,-2)

(sx, sy)=(2,1) (sx, sy)=(1,1/2) (sx, sy)=(2,2)

Page 6: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Affine Transform – RotationAffine Transform – Rotation

2D Rotation

2-66

Page 7: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Affine Transform – Rotation (cont’d)Affine Transform – Rotation (cont’d)

3D rotation about z-axis (Rz)

3D rotation about x-axis can be obtained through cyclic permutation, i.e.,

x-, y-, and z-coordinates are replaced by y-, z-, and x-coordinates, respectively.

One more cyclic permutation leads to 3D rotation about y-axis.

2-77

Page 8: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Affine Transform – TranslationAffine Transform – Translation

Translation does not fall into the class of linear transforms, and is represented as vector addition.

We can describe translation as matrix multiplication if we use the homogeneous coordinates. Given the 3D Cartesian coordinates (x, y, z) of a point, we can simply take (x, y, z, 1) as its homogeneous coordinates.

The matrices for scaling and rotation should be extended into 4x4 matrices.

2-88

Page 9: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

More on Homogeneous CoordinatesMore on Homogeneous Coordinates

The fourth component of the homogeneous coordinates is not necessarily 1 and is denoted by w. The homogeneous coordinates (x, y, z, w) correspond to the Cartesian coordinates (x/w, y/w, z/w). For example, (1,2,3,1), (2,4,6,2) and (3,6,9,3) are different homogeneous coordinates for the same Cartesian coordinates (1,2,3).

The w-component of the homogeneous coordinates is used to distinguish between vectors and points. If w is 0, (x, y, z, w) represent a vector. Otherwise, a point.

2-99

Page 10: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

World TransformWorld Transform

A model is created in its own object space. The object space for a model typically has no relationship to that of another model.

The world transform ‘assembles’ all models into a single coordinate system called world space.

2-1010

Page 11: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

World Transform (cont’d)World Transform (cont’d)

2-1111

Page 12: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

More on RotationMore on Rotation

2-1212

Look at the origin of the coordinate system such that the axis of rotation points toward you. If the rotation is counter-clockwise, the rotation angle is positive. If the rotation is clockwise, it is negative.

Page 13: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Euler TransformEuler Transform

2-1313

When we successively rotate an object about the x-, y-, and z-axes, the object acquires a specific orientation.

The rotations angles (x,y,z) are called the Euler angles. When three rotations are combined into one, it is called Euler transform.

Page 14: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Normal TransformNormal Transform

2-1414

Page 15: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Normal Transform (cont’d)Normal Transform (cont’d)

2-1515

Page 16: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View TransformView Transform

2-1616

The world transform has been done, and now all objects are in the world space.

Next step: camera pose specification EYE: camera position AT: a reference point toward which the camera is aimed UP: view up vector that roughly describes where the top of the camera is pointing.

(In most cases, UP is set to the y-axis of the world space.)

Then, the camera space, {EYE, u, v, n}, can be created.

Page 17: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Transform (cont’d)View Transform (cont’d)

2-1717

A point is given different coordinates in distinct spaces.

If all the world-space objects can be newly defined in terms of the camera space in the manner of the teapot's mouth, it becomes much easier to develop the rendering algorithms. In general, it is called space change.

The view transform converts each vertex from the world space to the camera space.

Page 18: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Dot ProductDot Product

2-1818

Given vectors, a and b, whose coordinates are (a1, a2, .. , an) and (b1, b2, .. , bn), respectively, the dot product ab is defined to be a1b1+a2b2+ .. +anbn.

In Euclidean geometry, ab = ‖a‖‖b‖cosθ, where ‖a‖ and ‖b‖ denote the lengths of a and b, respectively, and θ is the angle between a and b. If a and b are perpendicular to each other, ab = 0. If θ is an acute angle, ab > 0. If θ is an obtuse angle, ab < 0.

If a is a unit vector, aa = 1.

x

y

(1,0)

(0,1)

(1,0)(0,1) = 0

x

y

(1,0)

(1,1)

(1,0)(1,1) = 1

x

y

(1,0)

(-1,1)

(1,0)(-1,1) = -1

Page 19: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Orthonormal BasisOrthonormal Basis

2-1919

Orthonormal basis = an orthogonal set of unit vectors

The camera space has an orthonormal basis {u, v, n}. Note that uu=vv=nn=1 and uv=vn=nu=0.

orthonormalstandard

non-orthonormalnon-standard

orthonormalnon-standard

Page 20: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

2D Analogy for View Transform2D Analogy for View Transform

2-2020

The coordinates of p are (1,1) in the world space but (-2,0) in the camera space.

Let’s superimpose the camera space to the world space while imagining invisible rods connecting p and the camera space such that the transform is applied to p.

As the camera space becomes identical to the world space, the world-space coordinates of p" can be taken as the camera-space coordinates.

translation by (-2,-2) rotation by -45º

Page 21: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

2D Analogy for View Transform (cont’d) 2D Analogy for View Transform (cont’d)

2-2121

Let’s see if the combination of T and R correctly transforms p.

How to compute R? It is obtained using the camera-space basis vectors.

u

v

Page 22: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

2D Analogy for View Transform (cont’d) 2D Analogy for View Transform (cont’d)

2-2222

It is straightforward to show that R transforms u into e1 and v into e2.

R converts the coordinates defined in terms of the basis {e1, e2}, e.g., (-1,-1), into those defined in terms of the basis {u, v}, e.g., (-2,0). In other words, R performs the basis change from {e1, e2} to {u, v}.

The problem of space change is decomposed into translation and basis change.

u

v

vu

v

u

e1

e2

Page 23: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Transform (cont’d)View Transform (cont’d)

2-2323

Let us do the same thing in 3D. First of all, EYE is translated to the origin of the world space. Imagine invisible rods connecting the scene objects and the camera space. The translation is applied to the scene objects.

Page 24: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Transform (cont’d)View Transform (cont’d)

2-2424

The world space and the camera space now share the origin, due to translation. We then need a rotation that transforms u, v, and n into e1, e2, and e3, respectively,

i.e., Ru=e1, Rv=e2, and Rn=e3. R performs the basis change from {e1, e2, e3} to {u, v, n}.

Page 25: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Transform (cont’d)View Transform (cont’d)

2-2525

The view matrix

OpenGL view matrix

void gluLookAt( GLdouble Eye_x, GLdouble Eye_y, GLdouble Eye_z, GLdouble At_x, GLdouble At_y, GLdouble At_z, GLdouble Up_x, GLdouble Up_y, GLdouble Up_z);

Page 26: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Transform (cont’d)View Transform (cont’d)

2-2626

D3DX (Direct3D Extension) is a library of tools designed to provide additional graphics functionality, and contains many features that would be a chore to directly implement with D3D.

D3DXMatrixLookAtRH builds a right-handed viewing transformation.

Note, however, that the returned matrix is the transpose of the 4×4 matrix we derived because Direct3D follows the vector-on-the-left convention whereas this lecture follows the vector-on-the-right convention.

D3DXMATRIX *WINAPI D3DXMatrixLookAtRH(     D3DXMATRIX *pOut,     CONST D3DXVECTOR3 *pEye,     CONST D3DXVECTOR3 *pAt,     CONST D3DXVECTOR3 *pUp );

Page 27: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Per-vertex LightingPer-vertex Lighting

2-2727

Light emitted from a light source is reflected by the object surface and then reaches the camera.

The above figure describes what kinds of parameters are needed for computing lighting at vertex p. It is called per-vertex lighting and is done by the vertex program.

Per-vertex lighting is old-fashioned. More popular is per-fragment lighting. It is performed by the fragment program and produces a better result.

Understand that a vertex color can be computed at the vertex processing stage, and wait until Chapter 5 for more discussion on lighting.

Page 28: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View FrustumView Frustum

2-2828

Let us denote the basis of the camera space by {x, y, z} instead of {u, v, n}. Recall that, for constructing the view transform, we defined the external

parameters of the camera, i.e., EYE, AT, and UP. Now let us control the camera's internals. It is analogous to choosing a lens for the camera and controlling zoom-in/zoom-out.

The view frustum parameters, fovy, aspect, n, and f, define a truncated pyramid.

The near and far planes run counter to the real-world camera or human vision system, but have been introduced for the sake of computational efficiency.

Page 29: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

View Frustum (cont’d)View Frustum (cont’d)

2-2929

View-frustum culling A large enough box or sphere bounding a polygon mesh is computed at the

preprocessing step, and then at run time a CPU program tests if the bounding volume is outside the view frustum. If it is, the polygon mesh is discarded and does not enter the rendering pipeline.

It can save a fair amount of GPU computing cost with a little CPU overhead.

The cylinder and sphere would be discarded by the view-frustum culling whereas the teapot would survive.

If a polygon intersects the boundary of the view frustum, it is clipped with respect to the boundary, and only the portion inside the view frustum is processed for display.

Page 30: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection TransformProjection Transform

2-3030

It is not easy to clip the polygons with respect to the view frustum. If there is a transform that converts the view frustum to the axis-aligned box,

and the transform is applied to the polygons of the scene, clipping the transformed polygons with respect to the box is much easier.

The transform is called projection transform.

Page 31: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection Transform (cont’d)Projection Transform (cont’d)

2-3131

Consider pinhole camera, which is the simplest imaging device with an infinitesimally small aperture.

The convergent pencil of projection lines focuses on the aperture. The film corresponds to the projection plane.

film

Page 32: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection Transform (cont’d)Projection Transform (cont’d)

2-3232

The view frustum can be taken as a convergent pencil of projection lines. The lines converge on the origin, where the camera (EYE) is located. The origin is often called the center of projection (COP).

All 3D points on a projection line are mapped onto a single 2D point in the projected image. It brings the effect of perspective projection, where objects farther away look smaller.

The projection transform ensures that the projection lines become parallel, i.e., we have a universal projection line. Now viewing is done along the universal projection line. It is called the orthographic projection. The projection transform brings the effect of perspective projection “within a 3D space.”

Page 33: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection Transform (cont’d)Projection Transform (cont’d)

2-3333

Projection transform matrix

The projection-transformed objects will enter the rasterization stage. Unlike the vertex processing stage, the rasterization stage is implemented in

hardware, and assumes that the clip space is left-handed. In order for the vertex processing stage to be compatible with the hard-wired rasterization stage, the objects should be z-negated.

Page 34: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection Transform (cont’d)Projection Transform (cont’d)

2-3434

Projection transform from the camera space (RHS) to the clip space (LHS)

D3DXMatrixPerspectiveFovRH builds the projection transform matrix.

D3DXMATRIX *WINAPI D3DXMatrixPerspectiveFovRH(     D3DXMATRIX *pOut,     FLOAT fovy, // in radians     FLOAT Aspect, // width divided by height     FLOAT zn,     FLOAT zf );

Page 35: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Projection Transform (cont’d)Projection Transform (cont’d)

2-3535

OpenGL function for projection matrix

In OpenGL, the clip-space cuboid has a different dimension, and consequently the projection transform is different. See the book.

void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble n, GLdouble f);

Page 36: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Deriving Projection TransformDeriving Projection Transform

2-3636

Based on the fact that projection-transformed y coordinate (y´) is in the range of [-1,1], we can compute the general representation of y´.

As shown above, we could compute x´ in a similar way if fovx were given.

Page 37: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Deriving Projection Transform (cont’d)Deriving Projection Transform (cont’d)

2-3737

Unfortunately fovx is not given, and therefore let’s define x´ in terms of fovy and aspect.

Page 38: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Deriving Projection Transform (cont’d)Deriving Projection Transform (cont’d)

2-3838

D

D

just 0s

A

We have found x´ and y´.

Homogeneous coordinates representation

Then, we have the following projection matrix. Note that z´ and z´´ are independent of x and y, and therefore m1 and m2 are 0s.

Page 39: 3D Graphics for Game Programming (J. Han) Chapter II Vertex Processing.

3D Graphics for Game Programming (J. Han)

Deriving Projection Transform (cont’d)Deriving Projection Transform (cont’d)

2-3939

Let’s apply the projection matrix.

In projection transform, observe that –f and -n are transformed to -1 and 0, respectively.

Using the fact, the projection matrix can be completed.