OpenGL Feb2006

Information about OpenGL Feb2006

Published on January 3, 2008

Author: Nevada

Source: authorstream.com

Content

3D Rendering in OpenGL:  3D Rendering in OpenGL David Blumenthal David Murray Anthony Magro 20 February 2006 Goals for this Tutorial:  Goals for this Tutorial Show you a simple 3D application Discuss the basic elements of an OpenGL program Give you enough familiarity with OpenGL that you can go learn the details on your own Hows and Whys Concepts behind how OpenGL works Things you might not get from reading the code Practical Tips Code and data organization Performance Outline:  Outline Look at some drawing code Coordinate Spaces and Transformations Program And Data Structure Performance OpenGL in SolidWorks Q&A and Open Discussion Looking at the Code:  Looking at the Code Setup OpenGL State Geometry precomputation Frame Loop Drawing Code Draw Buffers:  Draw Buffers The Front Buffer is what you see on screen – everything else is off-screen Draw to the back buffer, then call SwapBuffers Accumulation Buffer Stencil Buffer Depth Buffer Back Buffer Texture 1 Texture 2 Texture 3 Why Flush?:  Why Flush? Commands in a graphics pipeline get buffered Lowers the cost of sending data to the graphics card No guarantee the buffer ever gets sent glFlush ensures the commands will eventually complete Generally a SwapBuffer implies a glFlush DMA Buffer ... glVertex glVertex glVertex glVertex … Why Finish?:  Why Finish? glFinish = glFlush + wait for completion This can slow down the frame rate, but… It increases responsiveness! Draw Render Draw Render Draw Draw Draw Draw Draw Draw Draw Render Render Render Render Render Render Render Draw Render Draw Render Draw Render Draw Render Long latency from input to response, and it gets worse! Faster, consistent response Using glFinish: Drawing as fast as possible: Questions:  Questions Any questions about the code so far? Coordinate Spaces:  Coordinate Spaces Think of space in terms of an origin and axes From inside the space: The origin is (0, 0, 0), the X axis is (1, 0, 0), etc… Right Hand Rule! A space can be positioned inside another space A transformation describes how to move from the “child” space to the “parent” space Translate, rotate, scale, skew, invert, and project Use whatever spaces are useful to you My personal space  this room  the building  Madison  the world  the solar system  the galaxy  the Universe  ??? OpenGL Coordinate Spaces:  OpenGL Coordinate Spaces Window Space Clipping Space Eye Space World Space Model Space Model Space Model Space Model Space Model Space Model vertices become window coordinates via a series of spaces and transformations Modeling Transformations:  Modeling Transformations Use any transformations you want to place model geometry in the “World” space. Window Space Clipping Space Eye Space World Space Model Space Model Space Model Space Model Space Model Space GL_MODELVIEW matrix Define Objects and Lights Hierarchical Modeling by nesting transforms glPushMatrix glPopMatrix Most common GL calls: glTranslate glRotate Order is Important:  Order is Important glLoadIdentity() glRotated(45, 0, 0, 1) glTranslated(5, 0, 0) glLoadIdentity() glTranslated(5, 0, 0) glRotated(45, 0, 0, 1) OpenGL commands successively define new “local” coordinate spaces in terms of the “current” or previous local space. Viewing Transformation:  Viewing Transformation Window Space Clipping Space Eye Space World Space Model Space Model Space Model Space Model Space Model Space gluLookAt OpenGL doesn’t care about “World” space, it does all lighting, culling, etc. calculations in Eye Space. GL_MODELVIEW matrix Position the world in front of the camera. Define Objects and Lights which are relative to the viewpoint Headlights First Person objects Positioning the View:  Positioning the View Don’t position the camera in the world… Position the world in front of the camera! Transform the world into “Eye Space” The camera is at the origin Looking down the negative Z axis X points right, Y points up gluLookAt Converts a world space camera into the correct rotation and translation Or, invert a camera position matrix Camera in world space World in eye space Projection Transformation:  Projection Transformation Window Space Clipping Space Eye Space World Space Model Space Model Space Model Space Model Space Model Space glOrtho, glPerspective gluPerspective Transform the region to be displayed into the region of the Clipping Cube. The Clipping Cube: -1 to 1 in X -1 to 1 in Y -1 to 1 in Z Everything outside that volume is clipped out. Use the GL_PROJECTION matrix Perspective Projection:  Perspective Projection Eye space Clip Space Items close to the camera get stretched The GL_PROJECTION matrix maps a region of eye space to the clipping space cube. glFrustum creates a non-linear mapping, yielding a perspective effect. Items far from the camera get squished Viewport Transformation:  Viewport Transformation Window Space Clipping Space Eye Space World Space Model Space Model Space Model Space Model Space Model Space glViewport and glDepthRange The Clipping Cube is mapped to the viewport bounds. [-1,1] in X is mapped to the left to right viewport range. [-1,1] in Y is mapped to the bottom to top viewport range. [-1,1] in Z is mapped to the near and far limits of the depth buffer range. Questions:  Questions Any questions about coordinate spaces or transformations? Program Structure:  Program Structure Do everything that you can in the Setup function All file I/O: model, texture, and shader loading Setup OpenGL state, anything that doesn’t change Prepare display lists, vertex and pixel buffer objects Setup program logic, animation controls, etc. Keep the Frame Loop fast Advance time, update program and animation state Minimize OpenGL state changes and draw calls Performance and Pretty Pictures! OpenGL Setup:  OpenGL Setup Create a Window and a GL Context (glut, SDL) Load Models, Textures, and Shaders Load from files, or generate at runtime Put static geometry into display lists or Vertex Buffer Objects Put textures onto the card or in Pixel Buffer Objects Setup Lighting Light positions may change, but light colors, ambient lighting, and other lighting parameters often don’t Setup any other static OpenGL state Enable depth testing, antialiasing, backface culling Initialize the program and animation state Animation Logic:  Animation Logic Update at the start of every frame Try to use elapsed realtime as much as possible Avoid fixed increments per frame Throttle the increment in case of chronic or transient bad performance Create an Event Queue and a Behavior Manager Ability to schedule tasks for the future Ability to wrap AIs and repetitive actions inside an easy-to-maintain structure Add new events and behaviors based on program logic Scene Graphs:  Scene Graphs Organize all your models into a structure Update the structure for animation Iterate over the nodes to draw Create a base SG Node class Manage tree structure (parent, children pointers) Manage transforms and bounding boxes Subclass for different types of objects Primitives which can generate their own geometry Generic Mesh class for loaded geometry Lights and Cameras are special nodes Need to be handled outside the normal traversal Scene Graphs (continued):  Scene Graphs (continued) Keep the actual geometry in a separate class Contain the logic for managing display lists/VBOs Allows reuse of geometry for multiple objects Special logic for drawing at a reduced level of detail Keep the appearance in a separate class Material parameters, texture and shader IDs Be able to iterate over appearances, and find all the objects which use the same appearance Special logic for drawing transparent surfaces Keep the behavior in a separate class Behaviors often belong to an object, but are updated by a separate behavior manager Don’t Reinvent the Wheel:  Don’t Reinvent the Wheel Freely available math libraries: Wild Magic (http://www.geometrictools.com/) Freely available image libraries: libjpg libpng Model formats and loading libraries: Plenty of them out there if you search Questions:  Questions Any questions about code and data organization? Performance:  Performance Use the best vertex mechanism you can Vertex Buffer Objects are the best because the data is in memory which the hardware can access Vertex arrays are good – several extensions make them better glVertex3fv is better than glVertex3f Don’t use glScale if you’re using lighting Requires GL_NORMALIZE to be enabled Don’t use GL_POLYGON It’s the same thing as GL_TRIANGLE_FAN, but may not be as well optimized Performance 2:  Performance 2 Display Lists are making a comeback They used to be for getting data across an XWindows socket. Now, OpenGL drivers are taking advantage of them to optimize the way the hardware is used. Minimize draw calls Group together objects which use the same textures, shaders, other material properties Use a Unified Shader Model – write one shader which can produce several different visual effects Group objects which are always drawn together into a display list Performance 3:  Performance 3 Cull out objects which aren’t visible Quick test: if the bounding box is behind the camera… Better tests will take into account field of view, distance, occlusion (can’t see that room if you’re in this room), etc. Precompute lighting for static lights and models Avoid round trips, like glReadBuffer Completely stalls the graphics hardware New GL extensions help you avoid them Render directly to a texture Asynchronous reads using pixel buffer objects Performance 4:  Performance 4 Use texture formats supported by the hardware GL_BGRA Use pixel buffer objects to load textures quickly If possible, keep all your textures on the card If not, use PBOs so the card can directly read the texture data Measure! Measure! Measure! You never know what change you’re going to make which will kick you off the fast path, or even worse, require software rendering… Learning More:  Learning More The Red Book: The OpenGL Programming Guide A good tutorial and guide to OpenGL www.opengl.org The OpenGL Specification GL Extensions www.nvidia.org Lots of papers about how to draw pretty pictures quickly UPL GameSIG Come meet other students and join projects Email me: [email protected] I’m always available to answer questions

Related presentations


Other presentations created by Nevada

COAL
12. 12. 2007
0 views

COAL

Kate lance
28. 11. 2007
0 views

Kate lance

Leishmania
23. 12. 2007
0 views

Leishmania

Tree visualization
01. 12. 2007
0 views

Tree visualization

Career at Michelin Info v2
02. 10. 2007
0 views

Career at Michelin Info v2

mtc allergens
04. 10. 2007
0 views

mtc allergens

Cody Model CRM
08. 11. 2007
0 views

Cody Model CRM

sustainability
26. 11. 2007
0 views

sustainability

crises rebirth
11. 12. 2007
0 views

crises rebirth

20061128 Task 6 PPT Sample
12. 12. 2007
0 views

20061128 Task 6 PPT Sample

ww1
26. 10. 2007
0 views

ww1

ROMAN VALUES
29. 10. 2007
0 views

ROMAN VALUES

lecture 2a
30. 10. 2007
0 views

lecture 2a

module a e
01. 11. 2007
0 views

module a e

Mod11 Pump Types and Selection
06. 11. 2007
0 views

Mod11 Pump Types and Selection

IWM2 1 IR
14. 11. 2007
0 views

IWM2 1 IR

radio microwave
14. 11. 2007
0 views

radio microwave

Alexander the Great
14. 12. 2007
0 views

Alexander the Great

LongfellowsMarsRev1
05. 11. 2007
0 views

LongfellowsMarsRev1

NN sleep lecture
28. 11. 2007
0 views

NN sleep lecture

boylan kolchin
29. 11. 2007
0 views

boylan kolchin

70s
24. 12. 2007
0 views

70s

Lecture7 ConnectingLANs
30. 12. 2007
0 views

Lecture7 ConnectingLANs

FormsofResistance 002
17. 12. 2007
0 views

FormsofResistance 002

Political Leadership
31. 12. 2007
0 views

Political Leadership

salinity
01. 01. 2008
0 views

salinity

IAPORK Capturing Incentives
03. 01. 2008
0 views

IAPORK Capturing Incentives

emergence
24. 10. 2007
0 views

emergence

PIColloquium v4
15. 11. 2007
0 views

PIColloquium v4

02 skog
07. 01. 2008
0 views

02 skog

MitesPoster
07. 01. 2008
0 views

MitesPoster

Micro BlackHoles rome
31. 10. 2007
0 views

Micro BlackHoles rome

Notable People in VA History
17. 12. 2007
0 views

Notable People in VA History

bia managing it assets external
20. 02. 2008
0 views

bia managing it assets external

EI John Kenkel March 2007
05. 03. 2008
0 views

EI John Kenkel March 2007

Dali
01. 10. 2007
0 views

Dali

plaquette SNE finale
14. 03. 2008
0 views

plaquette SNE finale

ApsecProgHighlights
27. 03. 2008
0 views

ApsecProgHighlights

Simon12sept
30. 03. 2008
0 views

Simon12sept

OverviewRetailIndust ry
13. 04. 2008
0 views

OverviewRetailIndust ry

2 Japanese Theater
22. 11. 2007
0 views

2 Japanese Theater

climbing robots
04. 01. 2008
0 views

climbing robots

Class4
02. 01. 2008
0 views

Class4

fbmm 30th tour directions 102307
23. 11. 2007
0 views

fbmm 30th tour directions 102307

CASPUR Slab 0603
30. 10. 2007
0 views

CASPUR Slab 0603

7 3 Youngsoo Seo
28. 11. 2007
0 views

7 3 Youngsoo Seo

05 moulin
20. 11. 2007
0 views

05 moulin