Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Advanced Graphics Programming Using OpenGL

Advanced Graphics Programming Using OpenGL

Published by Willington Island, 2021-08-21 12:08:29

Description: Today truly useful and interactive graphics are available on affordable computers. While hardware progress has been impressive, widespread gains in software expertise have come more slowly. Information about advanced techniques―beyond those learned in introductory computer graphics texts―is not as easy to come by as inexpensive hardware.

This book brings the graphics programmer beyond the basics and introduces them to advanced knowledge that is hard to obtain outside of an intensive CG work environment. The book is about graphics techniques―those that don’t require esoteric hardware or custom graphics libraries―that are written in a comprehensive style and do useful things. It covers graphics that are not covered well in your old graphics textbook. But it also goes further, teaching you how to apply those techniques in real world applications, filling real world needs.

Search

Read the Text Version

22 C H A P T E R 2 3 D T r a n s f o r m a t i o n s Normals are consumed by the pipeline in eye space. If lighting is enabled, they are used by the lighting equation — along with eye position and light positions — to modify the current vertex color. The projection transform transforms the remaining vertex and texture coordinates into clip space. If the projection transform has perspective elements in it, the w values of the transformed vertices are modified. 2.2.3 Clip Space and Perspective Divide Clip space is where all objects or parts of objects that are outside the view volume are clipped away, such that −wclip ≤ xclip ≤ wclip −wclip ≤ yclip ≤ wclip −wclip ≤ zclip ≤ wclip If new vertices are generated as a result of clipping, the new vertices will have texture coordinates and colors interpolated to match the new vertex positions. The exact shape of the view volume depends on the type of projection transform; a perspective trans- formation results in a frustum (a pyramid with the tip cut off), while an orthographic projection will create a parallelepiped volume. A perspective divide — dividing the clip space x, y, and z coordinate of each point by its w value — is used to transform the clipped primitives into normalized device coor- dinate (NDC) space. The effect of a perspective divide on a point depends on whether the clip space w component is 1 or not. If the untransformed positions have a w of one (the common case), the value of w depends on the projection transform. An orthographic transform leaves the w value unmodified; typically the incoming w coordinate is one, so the post-transform w is also one. In this case, the perspective divide has no effect. A perspective transform scales the w value as a function of the position’s z value; a perspective divide on the resulting point will scale, x y, and z as a function of the untransformed z. This produces the perspective foreshortening effect, where objects become smaller with increasing distance from the viewer. This transform can also pro- duce an undesirable non-linear mapping of z values. The effects of perspective divide on depth buffering and texture coordinate interpolation are discussed in Section 2.8 and Section 6.1.4, respectively. 2.2.4 NDC Space and the Viewport Transform Normalized device coordinate or NDC space is a screen independent display coordinate system; it encompasses a cube where the x, y, and z components range from −1 to 1. Although clipping to the view volume is specified to happen in clip space, NDC space can be thought of as the space that defines the view volume. The view volume is effectively the result of reversing the divide by wclip operation on the corners of the NDC cube.

S E C T I O N 2 . 3 N o r m a l T r a n s f o r m a t i o n 23 The current viewport transform is applied to each vertex coordinate to generate window space coordinates. The viewport transform scales and biases xndc and yndc com- ponents to fit within the currently defined viewport, while the zndc component is scaled and biased to the currently defined depth range. By convention, this transformed z value is referred to as depth rather than z. The viewport is defined by integral origin, width, and height values measured in pixels. 2.2.5 Window Space Window coordinates map primitives to pixel positions in the framebuffer. The integral x and y coordinates correspond to the lower left corner of a corresponding pixel in the window; the z coordinate corresponds to the distance from the viewer into the screen. All z values are retained for visibility testing. Each z coordinate is scaled to fall within the range 0 (closest to the viewer) to 1 (farthest from the viewer), abstracting away the details of depth buffer resolution. The application can modify the z scale and bias so that z values fall within a subset of this range, or reverse the mapping between increasing z distance and increasing depth. The term screen coordinates is also used to describe this space. The distinction is that screen coordinates are pixel coordinates relative to the entire display screen, while window coordinates are pixel coordinates relative to a window on the screen (assuming a window system is present on the host computer). 2.3 Normal Transformation OpenGL uses normal vectors for lighting computations and to generate texture coor- dinates when environment mapping is enabled. Like vertices, normal vectors are transformed from object space to eye space before being used. However, normal vectors are different from vertex positions; they are covectors and are transformed differently (Figure 2.3). Vertex positions are specified in OpenGL as column vectors; normals and some other direction tuples are row vectors. Mathematically, the first is left-multiplied 90 degrees > 90 degrees Non-Uniform Scaling affects vectors and vertices differently; normal vectors are no longer normal to surface after scaling by Sx = 2, Sy = 1 F i g u r e 2.3 Preserving vector and vertex orientation.

24 C H A P T E R 2 3 D T r a n s f o r m a t i o n s Order of last two operations doesn’t matter. m00 m01 m02 M03 m00 m01 m02 0 m′01 m′02 0 m′00 m′10 m′20 0 m′10 m′11 m′12 0 m′01 m′11 m′21 0 m10 m11 m12 m13 m10 m11 m12 0 m′20 m′21 m′22 0 m′02 m′12 m′22 0 m20 m21 m22 m23 m20 m21 m22 0 m30 m31 m32 m33 0000 0000 0 0 00 Starting Only use Inverse of Transpose Matrix 3×3 Matrix of Matrix F i g u r e 2.4 Generating inverse transpose. by a matrix, the other has the matrix on the right. If they are both to be transformed the same way (which is commonly done to simplify the implementation code), the matrix must be transposed before being used to transform normals. m11 m12 m13 m14 v1 m11 m12 m13 m14T mm3211 mm2344 vv23 = v1v2v3v4 mm3211 mm2344 m22 m23 m22 m23 m32 m33 m32 m33 m41 m42 m43 m44 v4 m41 m42 m43 m44 When transforming normals, it’s not enough to simply transpose the matrix. The transform that preserves the relationship between a normal and its surface is created by taking the transpose of the inverse of the modelview matrix (M−1)T , sometimes called the adjoint transpose of M (Figure 2.4). That is, the transformed normal N is: N = NM−1 = (M−1)T NT T For a “well-behaved” set of transforms consisting of rotations and translations, the resulting modelview matrix is orthonormal.1 In this case, the adjoint transpose of M is M and no work needs to be done. However, if the modelview matrix contains scaling transforms then more is required. If a single uniform scale s is included in the transform, then M = sI. Therefore M−1 = (1/s)I and the transformed normal vector will be scaled by 1/s, losing its impor- tant unit length property (N · N = 1). If the scale factor is non-uniform, then the scale factor computation becomes more complicated (figure 2.3). If the scaling factor 1. Orthnormal means that MMT = I.






























































































Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook