Hierarchical ModelingHofstra University1 Hierarchical Modeling: Tree of Transformations, Display Lists and Functions, Matrix and Attribute Stacks,

Slides:



Advertisements
Similar presentations
Better Interactive Programs
Advertisements

Using GLU/GLUT Objects GLU/GLUT provides very simple object primitives glutWireCube glutWireCone gluCylinder glutWireTeapot.
CSC 461: Lecture 51 CSC461 Lecture 5: Simple OpenGL Program Objectives: Discuss a simple program Discuss a simple program Introduce the OpenGL program.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 2: Complete Programs Ed Angel Professor of Computer Science,
OpenGL and Projections
Objectives Learn to build arbitrary transformation matrices from simple transformations Learn to build arbitrary transformation matrices from simple transformations.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Better Interactive Programs Ed Angel Professor of Computer Science, Electrical and Computer.
Hierarchical ModelingHofstra University1 Modeling Define volumetric objects in terms of surfaces patches that surround the volume Each surface patch is.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 OpenGL Transformations Ed Angel Professor of Computer Science, Electrical and Computer.
2D Transformations. World Coordinates Translate Rotate Scale Viewport Transforms Hierarchical Model Transforms Putting it all together.
3D Rendering with JOGL Introduction to Java OpenGL Graphic Library By Ricardo Veguilla
Hierarchical Transformations Hierarchical Models Scene Graphs
COMP 175: Computer Graphics March 10, 2015
Objectives Review some advanced topics, including Review some advanced topics, including Chapter 8: Implementation Chapter 8: Implementation Chapter 9:
CSC461 Lecture 11: Interactive Programs Contents and Objectives Picking Writing modes – XOR/Copy Rubberbanding Display list.
OpenGL Matrices and Transformations Angel, Chapter 3 slides from AW, Red Book, etc. CSCI 6360.
Fundamentals of Computer Graphics Part 3 prof.ing.Václav Skala, CSc. University of West Bohemia Plzeň, Czech Republic ©2002 Prepared with Angel,E.: Interactive.
Image Synthesis Rabie A. Ramadan, PhD 2. 2 Java OpenGL Using JOGL: Using JOGL: Wiki: You can download JOGL from.
CSE 470: Computer Graphics. 10/15/ Defining a Vertex A 2D vertex: glVertex2f(GLfloat x, GLfloat y); 2D vertexfloating pointopenGL parameter type.
Graphics Systems and OpenGL. Business of Generating Images Images are made up of pixels.
Ch 2 Graphics Programming page 1 CSC 367 Coordinate Systems (2.1.2) Device coordinates, or screen coordinates (pixels) put limitations on programmers and.
1 Figures are extracted from Angel's book (ISBN x) The Human Visual System vs The Pinhole camera Human Visual System Visible Spectrum Pinhole.
Week 4 Lecture 1: Hierarchical Modeling Part 1 Based on Interactive Computer Graphics (Angel) - Chapter 10 1 Angel: Interactive Computer Graphics 5E ©
C O M P U T E R G R A P H I C S Guoying Zhao 1 / 40 C O M P U T E R G R A P H I C S Guoying Zhao 1 / 40 Computer Graphics Hierarchy I.
1 Better Interactive Programs. 2 Objectives Learn to build more sophisticated interactive programs using ­Picking Select objects from the display Three.
Modeling with OpenGL Practice with OpenGL transformations.
Jul 25, 2014IAT 3551 Scene Graphs.  A data structure that stores information about a graphics scene –Each node has information that structures the interpretation.
MAE152 Computer Graphics for Scientists and Engineers Fall 03 Display Lists.
Image Synthesis Rabie A. Ramadan, PhD 4. 2 Review Questions Q1: What are the two principal tasks required to create an image of a three-dimensional scene?
Transformations Tutorial
Computer Graphics I, Fall 2010 OpenGL Transformations.
1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 OpenGL Transformations.
Viewing and Transformation. Pixel pipeline Vertex pipeline Course Map Transformation & Lighting Primitive assembly Viewport culling & clipping Texture.
NoufNaief.net TA: Nouf Al-harbi.
Transformations Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
University of Texas at Austin CS384G - Computer Graphics Fall 2010 Don Fussell Hierarchical Modeling.
Chap 3 Viewing and Transformation
Lecture 7 Midterm Review. OpenGL Libraries gl: Basic OpenGL library, e.g. primitives. glu: OpenGL Utility library, a set of functions to create texture.
1 Programming with OpenGL Part 2: Complete Programs.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
1 OpenGL Transformations. 2 Objectives Learn how to carry out transformations in OpenGL ­Rotation ­Translation ­Scaling Introduce OpenGL matrix modes.
CS559: Computer Graphics Lecture 12: OpenGL - Transformation Li Zhang Spring 2008.
1 Geometric Transformations-II Modelling Transforms By Dr.Ureerat Suksawatchon.
1 Perception, Illusion and VR HNRS 299, Spring 2008 Lecture 17 Animations, Loops.
Introduction to Graphics Programming. Graphics API.
Computer Graphics I, Fall Programming with OpenGL Part 2: Complete Programs.
CSCE 441: Computer Graphics: Hierarchical Models Jinxiang Chai.
CS380 LAB II OpenGL Donghyuk Kim Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [
Computer Graphics (Fall 2003) COMS 4160, Lecture 5: OpenGL 1 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
OpenGL Matrices and Transformations Angel, Chapter 3 slides from AW, Red Book, etc. CSCI 6360/4360.
OpenGL Transformations
IAT 355 Scene Graphs Feb 23, 2017 IAT 355.
OpenGL Transformations
Computer Graphics OpenGL Transformations
Programming with OpenGL Part 2: Complete Programs
OpenGL API 2D Graphic Primitives
Programming with OpenGL Part 2: Complete Programs
Computer Graphics - Hierarchical Models-
Hierarchical and Object-Oriented Graphics
גרפיקה ממוחשבת: מבוא ל-OpenGL
Chapter 4/5 glMatrixMode Modeling Transformations glTranslate glScale
Hierarchical and Object-Oriented Graphics
OpenGL program.
Geometric Objects and Transformations (II)
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 2: Complete Programs
OpenGL Transformations
Programming with OpenGL Part 2: Complete Programs
OpenGL Transformations
CSCE 441: Computer Graphics: Hierarchical Models
Presentation transcript:

Hierarchical ModelingHofstra University1 Hierarchical Modeling: Tree of Transformations, Display Lists and Functions, Matrix and Attribute Stacks,

Hierarchical ModelingHofstra University2 Modeling complex objects/motion Decompose object hierarchically into parts Model each part in local frame, and use affine transformations to position it at its proper place in the part above it in the hierarchy

Hierarchical ModelingHofstra University3 The pipeline conceptually Construct shapes from geometric primitives Arrange the objects in three dimensional space and select the desired vantage point for viewing the composed scene. Calculate the color of all the objects. The color might be explicitly assigned by the application, determined from specified lighting conditions, or obtained by pasting a texture onto the objects. Convert the mathematical description of objects and their associated color information to pixels on the screen. During these stages, an API might perform other operations, such as eliminating parts of objects that are hidden by other objects.

Hierarchical ModelingHofstra University4 The Rendering

Hierarchical ModelingHofstra University5 World Coordinates and Model Coordinates

Hierarchical ModelingHofstra University6 World Coordinates and Model Coordinates

Hierarchical ModelingHofstra University7 Viewing the World

Hierarchical ModelingHofstra University8 Viewing Transformation

Hierarchical ModelingHofstra University9 MVT, Lights, Material, Shading,… Rendering

Hierarchical ModelingHofstra University10 Coordinate Systems Object/Model World Camera/eye Image/Normalized View Volume Screen, Pixel

Hierarchical ModelingHofstra University11 Current Transformation CTM=PT*MVT. MVT and PT are usually part of the current state Matrix Stacks in OpenGL

Hierarchical ModelingHofstra University12 Possible approaches Symbols and instancing, instancing transforms: can be represented by a table. Hierarchical modeling. Scene graphs (SG). (Scene) Trees DAGs

Hierarchical ModelingHofstra University13 Instancing in OpenGL In OpenGL, instancing is created by modifying the model-view matrix: glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glPushMatrix( ); glTranslatef(... ); glRotatef(... ); glScalef(... ); symbol(); glPopMatrix( );

Hierarchical ModelingHofstra University14 Symbols & Instances

Hierarchical ModelingHofstra University15 Village code glMatrixMode(GL_MODELVIEW); glLoadIdentity(); setview(); //instance 1 Basic simple house glPushMatrix(); house(); glPopMatrix(); //simple house instance 2 Big house Translated glPushMatrix(); glTranslatef(6, 0, 0); glScalef(2,2,2); house(); glPopMatrix(); //simple house instance 3 Intermed. house Rotated 15deg and Translated glPushMatrix(); glTranslatef(0, 6, 0); glRotated(15, 0,0,1); glScalef(2,1,1); house(); glPopMatrix(); //david house Instance 1 glPushMatrix(); glTranslatef(-6,0,0); glScalef(2,2,2); david_house(); glPopMatrix();

Hierarchical ModelingHofstra University16 Hierarchical Modeling DAG allow high-level sharing of objects but often make the memory costs and code complexity too high. DAGs are natural in many applications, e.g., modeling polygonal meshes where many edges and vertices are shared by higher level objects.

Hierarchical ModelingHofstra University17 DAG example: polygonal mesh Vertex 1 surface Polygon 1Polygon 2Polygon 3Polygon n Edge 1Edge 2Edge 3 Vertex 2Vertex 3

Hierarchical ModelingHofstra University18 Hierarchical Modeling using Trees Primitives that can be drawn directly, at leaves Internal nodes become instances Transformations that position instances of objects label the edges Traverse in pre-order (visit parent, visit children left to right). Stack based implementation Model independent traversal algorithm

Hierarchical ModelingHofstra University19 Example: simple 2D drawing

Hierarchical ModelingHofstra University20 Hierarchical modeling: tree of transformations Final picture, obtained by traversing in pre-order the tree T1.T2.T5.T7.T9(LINE)

Hierarchical ModelingHofstra University21 Compress the tree If an edge (A,B) is labeled with identity transformation, remove it, and move any drawings from node B into A If edges (A,B) and (A,C) have the same labels, merge the nodes B and C Example: in the previous tree T8 will be removed, and the unit square moved to the parent node

Hierarchical ModelingHofstra University22 From the tree model to OpenGL code Start from the root, traverse tree in pre-order When visiting a node, if there is a primitive at the node that can be drawn, draw it If going down from a node which has more then one unvisited child, store(push) CTM and attributes before continuing down If coming back up an edge to a node which has unvisited children, pop CTM and attributes

Hierarchical ModelingHofstra University23 Stack implementation of the compressed tree glScalef(1.0,-1.0,1.0); //T1 glPushMatrix(); glTranslatef(1.5, 3.0, 0.0); //T2 glScalef(1.0, 2.0, 1.0); //T5 glBegin(GL_LINE_LOOP); //BOX glVertex3f(0.0,0.0,0.0); glVertex3f(1.0,0.0,0.0); glVertex3f(1.0,1.0,0.0); glVertex3f(0.0,1.0,0.0); glEnd(); glTranslatef(0.5,0.0, 0.0); //T7 glRotatef(90.0,0.0,0.0,1.0); //T9 glBegin(GL_LINES); //LINE glVertex3f(0.0,0.0,0.0); glVertex3f(1.0,0.0,0.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(2.0,1.0,0.0); //T3 glScalef(0.5, 0.5, 1.0); //T6 drawUnitCircle(NUM_SLICES); glPopMatrix(); glScalef(4.0,5.0,1.0); // T4 glBegin(GL_LINE_LOOP); // BOX glVertex3f(0.0,0.0,0.0); glVertex3f(1.0,0.0,0.0); glVertex3f(1.0,1.0,0.0); glVertex3f(0.0,1.0,0.0); glEnd(); glFlush();

Hierarchical ModelingHofstra University24 Display Lists Need to draw the display at a rate sufficient to avoid noticeable flicker

Hierarchical ModelingHofstra University25 Display Processor Display processor – special purpose, limited instruction set, oriented toward drawing graphics primitives Display memory holds lists of instructions called display lists Display list executed repeatedly at a rate sufficient to avoid flicker

Hierarchical ModelingHofstra University26 Display Modes Immediate Mode – as soon as the program executes a statement that defines a primitive, it is sent to the server Retained Mode – define the object once, then put its description in a display list. Redisplayed with a simple function call Reduced network traffic

Hierarchical ModelingHofstra University27 OpenGL Display Lists #define BOX 1 glNewList(BOX, GL_COMPILE); glBegin(GL_POLYGON); glColor3f(0.0, 1.0, 0.0); glVertex2f(-1.0, -1.0); glVertex2f( 1.0, -1.0); glVertex2f( 1.0, 1.0); glVertex2f(-1.0, 1.0); glEnd( ); glEndList( ); glCallList(BOX); Send list to server but don’t display contents GL_COMPILE_AND_EXECUTE This can change the original state and leave it altered

Hierarchical ModelingHofstra University28 Definition and Execution #define BOX 1 glNewList(BOX, GL_COMPILE); glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix( ); glBegin(GL_POLYGON); glColor3f(0.0, 1.0, 0.0); glVertex2f(-1.0, -1.0); glVertex2f( 1.0, -1.0); glVertex2f( 1.0, 1.0); glVertex2f(-1.0, 1.0); glEnd( ); glPopAttrib( ); glPopMatrix( ); glEndList( ); Push and pop attributes and coordinates to the stacks

Hierarchical ModelingHofstra University29 Stack implementation of the tree of transformations glScalef(1.0,-1.0,1.0); glPushMatrix(); glTranslatef(1.5, 3.0, 0.0); glScalef(1.0, 2.0, 1.0); glCallList(BOX); glTranslatef(0.5,0.0, 0.0); glRotatef(90.0,0.0,0.0,1.0); glBegin(GL_LINES); glVertex3f(0.0,0.0,0.0); glVertex3f(1.0,0.0,0.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(2.0,1.0,0.0); glScalef(0.5, 0.5, 1.0); drawUnitCircle(NUM_SLICES); glPopMatrix(); glScalef(4.0,5.0,1.0); glCallList(BOX); glFlush();

Hierarchical ModelingHofstra University30 Example: cart with two wheels

Hierarchical ModelingHofstra University31 Example: wheel glNewList(WHEEL,GL_COMPILE); // red wheel with WHEEL_RAD glPushMatrix(); glPushAttrib(GL_COLOR); glColor3f(1.0,0.0,0.0); // red glScalef(WHEEL_RAD, WHEEL_RAD, 1.0); // scale to wheel radius glBegin(GL_LINES); // cross, each bar length 2 glVertex2f( -1.0, 0.0); glVertex2f(1.0, 0.0); glVertex2f( 0.0, -1.0); glVertex2f( 0.0, 1.0); glEnd(); drawUnitCircle(NUM_SLICES); // unit circle glPopAttrib(); glPopMatrix(); glEndList(); Model a red wheel of radius WHEEL_RAD, consisting of a circle and two crossed spikes. Primitive components are unit circle and crossed orthogonal spikes of length 2.

Hierarchical ModelingHofstra University32 Example: rod with 2 fixed wheels glNewList(CART,GL_COMPILE); glPushMatrix(); glPushAttrib(GL_COLOR); glColor3f(0.0,1.0,0.0); // green glBegin(GL_LINES); // rod glVertex2f(-HALF_AXIS_LENGTH, 0.0); glVertex2f( HALF_AXIS_LENGTH, 0.0); glEnd(); glPushMatrix(); glTranslatef(-HALF_AXIS_LENGTH, 0.0, 0.0); //position front WHEEL at axis glRotatef(TH, 0.0,0.0,1.0); // rotate a WHEEL by TH glCallList(WHEEL); glPopMatrix(); glTranslatef(HALF_AXIS_LENGTH, 0.0, 0.0); //position back WHEEL at axis glRotatef(TH+INCR, 0.0,0.0,1.0); // rotate a WHEEL by TH+INCR glCallList(WHEEL); glPopAttrib(); glPopMatrix(); glEndList(); Model the cart consisting of two red wheels of radius WHEEL_RAD, positioned at the ends of a green rod of length 2*HALF_AXIS_LENGTH. The two wheels are rotated at different angles.

Hierarchical ModelingHofstra University33 Example: cart with 2 wheels void display() { glClear(GL_COLOR_BUFFER_BIT); glCallList(CART); glFlush(); } void myinit() { glClearColor(1.0,1.0,1.0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-225.0, 225.0, -225, 225.0); glMatrixMode(GL_MODELVIEW); defineParts(); // WHEEL and CART are display lists defined here, } main() …. As usual, negotiate with Windows Sys, register callbacks, run loop to process events

Hierarchical ModelingHofstra University34 Example: spin the wheels Limitations of display lists Use of functions in drawing instances of objects at tree nodes Continuously keep changing the value of rotation angle for turning a wheel Need of double buffering

Hierarchical ModelingHofstra University35 Example: spin the wheels,2 void draw_cart() { glPushMatrix(); glPushAttrib(GL_COLOR); glColor3f(0.0,1.0,0.0); // draw axis in green glBegin(GL_LINES); glVertex2f(-HALF_AXIS_LENGTH,0.0); glVertex2f(HALF_AXIS_LENGTH,0.0); glEnd(); glPushMatrix(); glTranslatef(-HALF_AXIS_LENGTH,0.0, 0.0); // position front wheel at axis, T1 glRotatef(theta,0.0,0.0,1.0); // spin front WHEEL by theta glCallList(WHEEL); // draw wheel glPopMatrix(); glTranslatef(HALF_AXIS_LENGTH,0.0, 0.0); // position back wheel at axis, T2 glRotatef(theta, 0.0,0.0,1.0); // spin back WHEEL by theta glCallList(WHEEL); // draw wheel glPopAttrib(); glPopMatrix(); }

Hierarchical ModelingHofstra University36 Open GL interactive program structure int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutCreateWindow(”generic example"); myinit (); glutReshapeFunc (myReshape); glutMouseFunc (mouse); glutMotionFunc(do_on_motion); glutIdleFunction(idle); glutDisplayFunc(display); glutMainLoop(); }

Hierarchical ModelingHofstra University37 Example: spin the wheels,3, the Idle Function void idle(void) // IDLE callback function updates { // rotation angle that spins a wheel theta += INCR_ANGLE; glutPostRedisplay(); } void mouseMotion(int x, int y) // MOTION callback function updates { // translation vector that moves whole transx = x; transy = y; glutPostRedisplay(); } void display() // DISPLAY callback draws whole object { // in back buffer then swaps buffers glClear(GL_COLOR_BUFFER_BIT); // translate whole object axis with spinning wheels glTranslatef( (float)transx, (float)(WINDOWH-transy), 0.0); draw_cart(); glutSwapBuffers(); // SWAP BUFFERS }

Hierarchical ModelingHofstra University38 Example: spin the wheels, 4, the Idle Function int main(…) { glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); // double buffering... glutDisplayFunc(display); glutMotionFunc(mouseMotion); glutIdleFunc(idle); glutMainLoop(); … }

Hierarchical ModelingHofstra University39 HW: Model hierarchically a 3D scene consisting of a circular road, a car, at least 2 trees along the road. Each component has a different color than the rest. Allow for interactively changing the camera position, allowing the camera to rotate around the horizontal and vertical axis of the coordinate system attached to the scene, and also for interactively choosing an option to move the car forward or backward A car has a rectangular body and 4 wheels A tree has a trunk (cylinder) and a crown (sphere) The road is a circular loop Model each object (object part) in its own local coordinate system; use transformations to position all objects in the scene. Trees of transformations should help in modeling the individual objects (tree, car), and also in putting the whole scene together. Use functions or display lists to model the components HW is due in 2 weeks. Pace yourself well: complete the modeling in a week, so the week after you could deal with the interaction and the animation. Model and test each object individually, first.

Hierarchical ModelingHofstra University40 Example: model circular road // ROAD_RAD1, ROAD_RAD2, ROAD_SL, ROAD_RINGS defined globally void draw_road() { GLUquadric* q; // dynamic array to hold vertices of road q = gluNewQuadric(); // creates and returns a ptr to new quadric object glPushMatrix(); glPushAttrib(GL_ALL_ATTRIB_BITS); glColor3f(0.5,0.5,0.5); // road is gray gluDisk(q, ROAD_RAD1, ROAD_RAD2, ROAD_SL, ROAD_RINGS); glPopMatrix(); glPopAttrib(); gluDeleteQuadric(q); }

Hierarchical ModelingHofstra University41 Example: model circular road void display() { glClear(GL_COLOR_BUFFER_BIT); // glRotatef(45,1.0,0.0,0.0); //gluLookAt(0.0,0.0,0.0, -1.0,-1.0,-1.0, 0.0,0.0,1.0); draw_road(); glFlush(); }