290 likes | 414 Vues
In Chapter 9, we explore the intricacies of transformation operators, focusing on how to effectively combine, inverse, and pivot scale/rotate operations. Learn about the costs associated with combine operators as well as practical programming support using UWBGL. This chapter covers essential concepts such as translating then scaling vertices, the importance of order of operations, and efficient computation strategies through matrix stacks. Delve into examples of concatenation and pivoted scaling that will enhance your understanding of graphic transformations.
E N D
Chapter 9: Combining Transformation Operators Chapter 9
This Chapter: we will learn • How and Costs of combine operators • Inverse Operators • Pivoted Scale/Rotate • Programming Support • UWBGL Chapter 9
Translate Then Scale • Given vertex: • Translate then Scale: • If • Then • And Chapter 9
Example: Chapter 9
Concatenate: • Compact Representation • Computation Efficiency • Cost to concatenate • Worthwhile if uses operator many times Chapter 9
!Warning! Order of operation • Recall … • So, if • Then, in general Chapter 9
Example: Order of operation • For: • If and Chapter 9
Reminder … • Transforms Va • Translation (T) followed by • Scale (S) • Vertex is to the left of the operators!! • In our case (row vectors): the following is undefined!! Chapter 9
Inverse Transform: Undo Chapter 9
For example: Chapter 9
Inverse of: • To undo (inverse): • If: • Then • Or: Chapter 9
Inverse of: Chapter 9
Inverse of concatenated operator • Apply the inverse in reverse order! • In general: Inverse is not unique • E.g., R(θ), inverse can be • R(-θ) or • R(-θ+360), or R(- θ+270) … Chapter 9
Combining Translation and Scaling • Translate before scale to • align vertex with origin • “anchor” the vertex • E.g., scale rectangleby S(3,0.5) witha fixed anchor (Vc) Chapter 9
Pivoted Scaling: • Scaling with respect to • Pivot position: • E.g., scale rectanglewith respect topt=(1,5) Chapter 9
Rotation with Arbitrary Pivot • Pivot position: • E.g., rotate rectanglewith respect totop-right corner (pr)pt=(3,8) Chapter 9
Tut 9.1: Simple Concatenation • Label B + C: Ma = S T • Label D: loads Ma to MW • All vertex goes throughV MW MV MP • Rectangle transform by:V Ma Chapter 9
Tut 9.2: Order or concatenation • GUI Check box controls • m_bTranslateFirst • Label B: • Ma=ST or • Ma=TS Chapter 9
Matrix Stack: • Push-down stack of matrices • Graphics API support for concatenation of transform operators (matrices) • Operations supported • Push • Pop • Concatenation • Translate/scale/rotate • Load/Store Chapter 9
Tut 9.3: Working with Matrix Stack • Label C: Top of Stack <- ST • Label D: Top of Stack <- TS • Label E: MW<- Top of Stack Chapter 9
Tut 9.4: Pivoted Scale/Rotate • Implements: Chapter 9
Tut 9.4: … details … • Label C computes: Chapter 9
Tut 9.5: Transform Primitives • Label C1/C2: push/pop • Label D: set up transform for • Drawing rectangle 1 • Label F: set up transform for • Drawing rectangle 2 Chapter 9
Lib9: Drawing with MatrixStack • DrawHelper: • Defines the Stack behavior • D3D_DrawHelper • Defines D3D Matrix Stack Chapter 9
Lib9: D3D_DrawHelper Chapter 9
Lib9: XformInfo class • Set/Get: • Scale/Translate/Rotate • Pivot • SetupModelStack(): • Calls DrawHelper’sAccumulateModelTransform() Chapter 9
Tut 9.6: Using XformInfo • Identical to 9.5 … using XformInfo Chapter 9
Tut 9.7: XformInfoControl • CXformInfoControls class (MFC Dialog) • Replace onto mainTutorialDlg • With a placeholder Chapter 9
Using CXformInfoControl • CModel must support • Label B: • GetSelectedXform() • SetSelectedXform() • CXformInfoControl • Access model’s selected xform • From theApp->GetModel().Get/Set selectedXform() Chapter 9