420 likes | 910 Views
Chapter 7: Graphical Primitives. This Chapter: we will learn. Types of primitives: Points, Lines, and Triangles Attributes of primitives: Per-primitive and Per-Vertex attributes E.g., colors, size, style, etc. Programming with primitives Abstraction + integration into UWBGL.
E N D
Chapter 7: Graphical Primitives Chapter 7
This Chapter: we will learn • Types of primitives: • Points, Lines, and Triangles • Attributes of primitives: • Per-primitive and Per-Vertex attributes • E.g., colors, size, style, etc. • Programming with primitives • Abstraction + integration into UWBGL Chapter 7
Point Primitives • Important because of: • Particles! – approximation fire, water, explosions • Attributes: • Color, size, andtexture coordinates • Drawing commands: • DrawPoint • DrawPointList • Efficiency! Particles are lots of points Chapter 7
Line Primitives • Important for: • Hairs, rains, etc. • Types: • One Line Segment • Line Segments or Line Lists • Collection of lines (not connected) • Line Strips or Polylines • Collection of connected lines • Line lists/strips • Efficient to specify large number Chapter 7
Line: Attributes • Per-Vertex Attributes • Color • Gouraud Shading: linearly change colors from one vertex to the next • Texture Coordinate • Normal Vector • Important for shading hair/rain • Per-Primitive Attributes • Material properties • Line Style/Width Chapter 7
Triangle Primitive • Only drawing primitivewith area. • Geometries/objects in most graphics applications are approximated with triangles. Chapter 7
Types of Triangles • Triangle (Lists) • Individual vertices • Triangle Fan • n+2 vertices specify n connected triangles • Triangle Strip • n+2 vertices specify nconnected triangles Chapter 7
Triangle: Attributes • Per-Vertex attribute • similar as per-vertex attribute of lines: • Color, normal, texture coordinates • Per-Edge attributes • Similar to per-line attributes: • Width, style, etc. • Per Triangle attribute • Material properties • Fill style: e.g., wire frame Chapter 7
Color: • Usually expressed as: • (Red, Green, Blue) or (r, g, b) • Usually: • Normalized float: 0.0 ≤ r,g,b ≥1.0 • Integer: 0.0 ≤ r,g,b ≥255 • 255: 8-bit per channel ( ) Chapter 7
UWBGL_Lib4: Geometries • Common Files/ • DrawHelper/ • API independent drawing support • Geoms/ • Geometries (attributes + drawing) • E.g., color, shadeMode, FillMode, etc. • D3D Files/ • D3D_DrawHelper • D3D specific drawing support • D3D_GraphicsSystem/ • D3D API support (GHC, RC, and swap chain) • D3D_WindowHandler • D3D View/Controller pair support Chapter 7
UWBGL_Lib4: New classes Chapter 7
DrawHelper: • Interface for drawing Chapter 7
D3DDrawHelper: Draw functions Chapter 7
Geometry class: Point Chapter 7
Tutorial 7.1: Drawing Geometries Chapter 7
Tut 7.1: Model Implementation Chapter 7
Tut 7.1: DrawAndMouseHandler Chapter 7
Tut 7.1: The Dialog Window Chapter 7
UWBGL_Lib5: Primitive Hierarchy Chapter 7
UWBGL_Lib5: Primitive Hierarchy Chapter 7
UWB_Primitive base class Chapter 7
UWB_PrimitivePoint class Chapter 7
UWB_PrimitiveLine class Chapter 7
UWB_PrimitiveCircle class Chapter 7
Tutorial 7.2: Chapter 7
Tut 7.2: DrawAndMouseHandler Chapter 7
Primitive: Collisions • Attributes of primitive: • Appearance (color) vs. Physical (velocity) • Graphics: mainly concern with appearance • Learn some physical attributes • Collision: mathematic intersection Chapter 7
Collision with intersection • With n different primitive types • Need O(n2) different intersection routines! • E.g., line, circle, point: needs • Line-Line, Line-Circle, Line-Point, Circle-Circle, Circle-Point, Point-Point • In general: n+(n-1)+(n-2) • Intersection Math is tedious • Complex Invocation • logic to determine which of the routines to invoke Chapter 7
Collision with: Bounding volumes • Bounds primitive withsimple volumes • E.g. x/y/z bounds • E.g., circle/spheres • Collide with the bounding volumesinstead! Chapter 7
Bounding Volume considerations • Simplicity in math • circle/sphere and axes aligned bounding boxes • Tightness in bound • Void space • Approximation • False collision and • Failed detection • Colliding position • On bounding circle is different from on object Chapter 7
UWBGL_Lib6: Bounding Volume • Intersects() collide two volumes • Returns True/False (no colliding position) • Add() • Inserts and expends the volume Chapter 7
UWBGL_Lib6: BoundingBox Class Chapter 7
UWB_BoundingBox Chapter 7
Primitive: CollisionResponse • Primitive class: • has a bounding volume • CollisionResponse(): collision detected • other_location – location of other primitive • Change primitive behavior accordingly • Knows how to draw bounding volume Chapter 7
Using BoundingVolume • Three steps: • 1. Get the volume from each primitives • 2. Collide the volumes • 3. If volumes collide • Each primitive must response: CollisionResponse() Chapter 7
Default collision response … • Change velocity to repulse away • Looks like bouncing away • Very rough approximation of elastic collision Chapter 7
Tutorial 7.3: Collision Chapter 7
Lib7: Collection of Primitives • PrimitiveList class Subclass of Primitive • Behave just like a primitive Chapter 7
Lib7: PrimitiveList Class Chapter 7
Tutorial 7.4: Many primitives Chapter 7