3 d transformations
Download
1 / 40

3-D Transformations - PowerPoint PPT Presentation


  • 104 Views
  • Updated On :

3-D Transformations. Kurt Akeley CS248 Lecture 8 18 October 2007 http://graphics.stanford.edu/courses/cs248-07/. Overview. Tuesday 2-D transformation Composition of 2-D transformations Line equations, 2-D normals, and inverses Today Apply 2-D concepts to 3-D

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '3-D Transformations' - lou


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
3 d transformations l.jpg

3-D Transformations

Kurt Akeley

CS248 Lecture 8

18 October 2007

http://graphics.stanford.edu/courses/cs248-07/


Overview l.jpg
Overview

Tuesday

  • 2-D transformation

  • Composition of 2-D transformations

  • Line equations, 2-D normals, and inverses

    Today

  • Apply 2-D concepts to 3-D

  • Look at OpenGL in some detail



Homogeneous 3 d transformation l.jpg

Specify rotation, scale, and shear

Specify translation

(Almost) always have these values

Homogeneous 3-D transformation


Homogeneous translation and scale l.jpg
Homogeneous translation and scale

Translation:

Scaling (about the origin):


Homogeneous rotation about a coordinate axis l.jpg
Homogeneous rotation (about a coordinate axis)

y

x

z

Right-hand rule for rotations by positive θ





Transforming the plane equation l.jpg
Transforming the plane equation

Plane equations are transformed by the inverse of the matrix used to transform vertexes




Transformation of normals correct l.jpg
Transformation of normals (correct)

Convert to plane equation, transform, and convert back:





The vertex pipeline l.jpg
The vertex pipeline

Application

struct { float x,y,z,w;float nx,ny,nz; float r,g,b,a;} vertex;

Vertex assembly

Vertex operations

Primitive assembly

Primitive operations

Rasterization

Fragment operations

Framebuffer

Display


Conceptual coordinate systems l.jpg
Conceptual coordinate systems

no

vo

Object coordinates

Transform vo by MTransform no by M-1

Model transformation

World coordinates(lighting calculations)

nw

vw

Transform vw by V

Vertex operations

View transformation

ve

Eye coordinates

Transform ve by P

Projection transformation

vc

Clip coordinates


Why not collapse to a single transformation l.jpg
Why not collapse to a single transformation?

Move world-coordinate and eye-coordinate operations (e.g., vertex lighting) to object coordinates

Collapse the M, V, and P matrixes to a single MMVP matrix

Advantages:

  • Efficient implementation (less arithmetic)

  • Simplified semantics

    Costs:

  • Must transform lights to object coordinates

    • And how would the light positions be defined?

  • Incorrect answers …


Rigid body transformations l.jpg
Rigid-body transformations

Change orientation and position, but not shape

Preserve geometric lengths and (relative) angles

Rigid-body transformations are:

  • Translation and Rotation

  • Not Scale and Shear (with occasional exceptions)

    A homogeneous matrix is a rigid-body matrix if its upper-left 3x3 matrix is orthogonal

    A matrix is orthogonal if and only if

  • All columns are orthogonal and unit-length, and

  • All rows are orthogonal and unit-length



Conceptual coordinate systems22 l.jpg
Conceptual coordinate systems

no

vo

Object coordinates

Transform vo by MTransform no by M-1

Model transformation(non-rigid)

World coordinates(lighting calculations)

nw

vw

Transform vw by V

View transformation(rigid)

Vertex operations

ve

Eye coordinates

Transform ve by P

Projection transformation(non-rigid)

vc

Clip coordinates


Collapsed coordinate systems obvious l.jpg
Collapsed coordinate systems (obvious)

no

vo

Object coordinates

Transform vo by MTransform no by M-1

Model transformation(non-rigid)

World coordinates(lighting calculations)

nw

vw

Vertex operations

View and projection transformation(non-rigid)

Transform vw by MVE

vc

Clip coordinates


Opengl coordinate systems actual l.jpg
OpenGL coordinate systems (actual)

no

vo

Object coordinates

“Model-view” transformation(non-rigid)

Transform vo by MTransform no by M-1

Eye coordinates(lighting calculations)

ne

ve

Vertex operations

Transform ve by P

Projection transformation(non-rigid)

vc

Clip coordinates


Why compute lighting in eye coordinates l.jpg
Why compute lighting in eye coordinates?

Simplicity

  • Eliminates the need to explicitly specify viewer location

    Efficiency

  • In eye coordinates

    • View location is (0 0 0)

    • View direction is (0 0 -1)

  • These zeros and ones lead to efficient lighting calculations

    • But the optimizations are no longer important 

      You are free to treat the intermediate coordinates as world coordinates:

  • Compose view transform V into P rather than M

    • There is little penalty for doing so:

      • Diffuse, ambient, and emission lighting work well

      • But specular lighting, which depends on viewer location, doesn’t

    • In X-Window terminology: “Mechanism, not policy”

  • Write your own vertex “shader”

    • OpenGL 2.0 allows you to redefine everything I’ll describe today


Opengl matrix commands l.jpg
OpenGL matrix commands

no

vo

Object coordinates

glMatrixMode(GL_MODELVIEW);

“Model-view” transformation(non-rigid)

Transform vo by MTransform no by M-1

Eye coordinates(lighting calculations)

ne

ve

glMatrixMode(GL_PROJECTION);

Transform ve by P

Projection transformation(non-rigid)

vc

Clip coordinates


Opengl matrix assignment commands l.jpg
OpenGL matrix assignment commands

glLoadIdentity();

Remember to do this!

glLoadMatrixf(float m[16]);

glLoadMatrixd(double m[16]);

glLoadTransposeMatrixf(float m[16]);

glLoadTransposeMatrixd(double m[16]);


Opengl matrix composition commands l.jpg
OpenGL matrix composition commands

glMultMatrixf(float m[16]);

glMultMatrixd(double m[16]);

glMultTransposeMatrixf(float m[16]);

glMultTransposeMatrixd(double m[16]);


Opengl transformation commands l.jpg
OpenGL transformation commands

glRotatef(float θ, float x, float y, float z);

glRotated(double θ, double x, double y, double z);

glTranslatef(float x, float y, float z);

glTranslated(double x, double y, double z);

glScalef(float x, float y, float z);

glScaled(double x, double y, double z);


Why post multiplication l.jpg
Why post-multiplication ?

glTranslated(px, py, pz);

glRotated(θ, a);

glTranslated(-px, -py, -pz);

DrawObject();


Duality l.jpg
Duality

Transform the coordinate system

Transform the object

glMultMatrixf(mat1);

glMultMatrixf(mat2);

glMultMatrixf(mat3);

DrawObject();


Rotation about a specified point l.jpg
Rotation about a specified point

Transform the coordinate system

Transform the object

glTranslated(2, 3, 0);

glRotated(45, 0, 0, 1);

glTranslated(-2, -3, 0);

DrawObject();


Transform the object l.jpg
Transform the object

Transformations are applied opposite the specified order

Each transformation operates in the fixed coordinate system

(2.5 3.5 0)


Transform the coordinate system l.jpg
Transform the coordinate system

Transformations are applied in the order specified

Each transformation operates relative to the current coordinate system

(2.5 3.5 0)


Opengl matrix stack l.jpg
OpenGL matrix stack

Separate stacks are maintained for M and P

Minimum (queryable) depths are 32 for M and 2 for P

glPushMatrix(); // pushes C onto the appropriate stack

// leaves C unchanged

glPopMatrix(); // restores C from top of stack and pops


Transforming the coordinate system l.jpg
Transforming the coordinate system

glPushMatrix();

glRotatef(shoulder, 1, 0, 0);

SolidBox(1.5*unit, 1.5*unit, 5*unit, RED);

glTranslatef(0, 0, 5*unit);

glPushMatrix();

glRotatef(elbow, 1, 0, 0);

SolidBox(1.25*unit, 1.25*unit, 4*unit, WHITE);

glTranslatef(0, 0, 4*unit);

glPushMatrix();

glRotatef(wrist, 1, 0, 0);

SolidBox(unit, unit, 1.5*unit, GREEN);

glTranslatef(0, 0, 1.5*unit);

glPushMatrix();

glTranslatef(0, 0.25*unit, 0);

glRotatef(finger, 1, 0, 0);

SolidBox(0.75*unit, 0.5*unit, 1.5*unit, YELLOW);

glPopMatrix();

glPushMatrix();

glTranslatef(0, -0.25*unit, 0);

glRotatef(thumb, 1, 0, 0);

SolidBox(0.75*unit, 0.5*unit, 1.5*unit, YELLOW);

glPopMatrix();

glPopMatrix();

glPopMatrix();

glPopMatrix();


Details l.jpg
Details

(x y z0) specifies a 3-D direction

  • Division by zero pushes the point to infinity

  • Normals are a special kind of direction

    • Transformed by the inverse of the vertex matrix

  • Other directions are correctly transformed by the vertex matrix itself

    • E.g., surface tangents

      OpenGL provides no mechanism to pre-multiply C

  • Why?


Summary l.jpg
Summary

Our 2-D understanding translated easily to 3-D

  • Lines  planes

  • Rotation becomes more involved

  • Normals are transformed by the upper-left 3x3 of M

    There is a duality to transformation

  • Transform the coordinate system

    • Transformations are applied in the specified order

    • Each transformation is relative to the current coordinate system

  • Transform the object

    • Transformations are applied opposite the specified order

    • Each transformation operates in the fixed coordinate system

      OpenGL matrixes are post-multiplied

  • Matches vertex semantics (interesting)

  • Enables hierarchical modeling (important)


Assignments l.jpg
Assignments

Reading assignment for Thursday’s class

  • FvD chapter 6

  • OpenGL chapter 3

    Project 2:

  • Assigned this past Tuesday

  • Due next Tuesday, 23 October (midnight, almost Wednesday)

  • Help session this Friday from 4:15 to 5 pm, Gates B03



ad