View
1.830
Download
2
Category
Tags:
Preview:
DESCRIPTION
My presentation on Graphics programming
Citation preview
Graphics Programming in OpenGL
Arvind Devaraj
Arvind Devaraj2
OpenGL and GLUT Overview
�� OpenGL is graphics API.OpenGL is graphics API.�� Makes graphics programming Makes graphics programming h/wh/w
independent independent
�� GLUT is a toolkit GLUT is a toolkit library of utilities using OpenGLlibrary of utilities using OpenGLmakes easier to use OpenGL makes easier to use OpenGL
Arvind Devaraj
A
Arvind Devaraj
High Level
� Represent Objects as Primitives� Apply Transformations on objects
� Projection : Visible portions are rendered
� Add realism by adding Light and Texture
� Remember using State information� Customize using Shaders� Framebuffer operations
Arvind Devaraj5
OpenGL Geometric Primitives
GL_QUAD_STRIPGL_QUAD_STRIP
GL_POLYGONGL_POLYGON
GL_TRIANGLE_STRIPGL_TRIANGLE_STRIP GL_TRIANGLE_FANGL_TRIANGLE_FAN
GL_POINTSGL_POINTS
GL_LINESGL_LINES
GL_LINE_LOOPGL_LINE_LOOPGL_LINE_STRIPGL_LINE_STRIP
GL_TRIANGLESGL_TRIANGLES
GL_QUADSGL_QUADS
Arvind Devaraj6
Shapes Tutorial
Arvind Devaraj
Transformations
Arvind Devaraj8
Camera Analogy
�� Graphics Rendering is like taking a Graphics Rendering is like taking a photograph photograph
�� 3D model 3D model �� 2D image2D image
camera
tripod model
viewingvolume
Arvind Devaraj9
Transformations
�� Steps in Forming an ImageSteps in Forming an Image� specify geometry (world coordinates)� specify camera (camera coordinates)� project (window coordinates)� map to viewport (screen coordinates)
�� Each step uses transformationsEach step uses transformations�� Transformation = change in coordinate Transformation = change in coordinate
systems systems
Arvind Devaraj10
Camera Analogy of Transformations
�� Projection transformationsProjection transformations� adjust the lens of the camera
�� Viewing transformationsViewing transformations� tripod–define position and orientation of
the viewing volume in the world�� Modeling transformationsModeling transformations
� moving the model�� ViewportViewport transformationstransformations
� enlarge or reduce the physical photograph
Arvind Devaraj11
Affine Transformations
�� Want transformations which preserve Want transformations which preserve geometrygeometry
� Rotation, translation, scaling� Projection� Concatenation (composition)
Arvind Devaraj
Affine Transformations
� Basic Transformations� Any transformation is Composition of these
Arvind Devaraj
Affine Transformation Matrix
Arvind Devaraj14
3D Transformations
�� A vertex is transformed by 4 x 4 matricesA vertex is transformed by 4 x 4 matrices� all affine operations are matrix multiplications� all matrices are stored column-major in
OpenGL� matrices are always post-multiplied� product of matrix and vector is
v�M
����
�
�
����
�
�
�
151173
141062
13951
12840
mmmm
mmmm
mmmm
mmmm
M
Arvind Devaraj15
Programming Transformations
�� Prior to rendering, view, locate, and Prior to rendering, view, locate, and orient:orient:� eye/camera position� 3D geometry
�� Manage the matricesManage the matrices� including matrix stack
�� Combine (composite) transformationsCombine (composite) transformations
Arvind Devaraj16
vertex
ModelviewMatrix
ProjectionMatrix
PerspectiveDivision
ViewportTransform
Modelview
Modelview
Projection
���
object eye clip normalizeddevice
window
TransformationPipeline
Arvind Devaraj17
Viewing Transformations
�� Position the camera/eye in the scenePosition the camera/eye in the scene� place the tripod down; aim camera
�� To To ““fly throughfly through”” a scenea scene� change viewing transformation and
redraw scene�� gluLookAtgluLookAt( ( eyeeyexx, , eyeeyeyy, , eyeeyezz,,
aimaimxx, , aimaimyy, , aimaimzz,,upupxx, , upupyy, , upupzz ))
� up vector determines unique orientation
tripod
Arvind Devaraj
Arvind Devaraj19
Transformations in OpenGL
�� ModelingModeling�� ViewingViewing
� orient camera� projection
�� AnimationAnimation�� Map to screenMap to screen
Arvind Devaraj20
Transformation Tutorial
Arvind Devaraj
Projection
Arvind Devaraj22
Projection Tutorial
Arvind Devaraj23
Connection: Viewing and Modeling
�� Moving camera is equivalent to moving Moving camera is equivalent to moving every object in the world towards a every object in the world towards a stationary camerastationary camera
�� Viewing transformations are equivalent Viewing transformations are equivalent to several modeling transformationsto several modeling transformations
Arvind Devaraj24
Double Buffering
12
48
16
12
48
16FrontBuffer
BackBuffer
Display
Arvind Devaraj25
Depth Buffering andHidden Surface Removal
12
48
16
12
48
16ColorBuffer
DepthBuffer
Display
Arvind Devaraj
Lighting
Arvind Devaraj27
Phong Principles
�� Lighting simulates how objects reflect Lighting simulates how objects reflect lightlight� material composition of object� light’s color and position
Arvind Devaraj
Arvind Devaraj
Various Lighting Models
Arvind Devaraj30
Simulating Lights
�� PhongPhong lighting modellighting model� Computed at vertices
�� Lighting contributorsLighting contributors� Surface material properties� Light properties� Lighting model properties
Arvind Devaraj31
SurfaceNormals
�� NormalsNormals define how a surface reflects define how a surface reflects lightlight
glNormal3f( glNormal3f( x, y, zx, y, z ))
� Current normal is used to compute vertex’s color
Arvind Devaraj32
Light Position Tutorial
Arvind Devaraj
Texture Mapping
Arvind Devaraj34
TextureMapping�� Apply image to geometry Apply image to geometry
�� UsesUses� Reduce Geometric complexity� Add Realism � Reflections
Arvind Devaraj
Texture Mapping
Reduce Geometric Complexity
Arvind Devaraj
Arvind Devaraj
Reflections – Environmental Map
Arvind Devaraj38
Texture Mapping
s
t
x
y
z
image
geometry screen
Arvind Devaraj39
Texture Example
�� The texture (below) is a The texture (below) is a 256 x 256 image that has been256 x 256 image that has beenmapped to a rectangularmapped to a rectangularpolygonpolygon
Arvind Devaraj40
Tutorial: Texture
Arvind Devaraj41
OpenGL’s State MachineAll Rendering info are remembered as state info
State InformationLightingShadingTexturingBlending
Arvind Devaraj42
OpenGL’s State MachineAll Rendering info are remembered as state info
Manipulating vertex attribute changes state info
glColor()glNormal()glTexCoord()
Arvind Devaraj
Shaders
� Allow these transformations to be user programmable
Arvind Devaraj
Arvind Devaraj
Shaders
Arvind Devaraj
Arvind Devaraj47
Getting to the Framebuffer
BlendingBlendingDepthTest
DepthTest DitheringDithering Logical
Operations
LogicalOperations
ScissorTest
ScissorTest
StencilTest
StencilTest
AlphaTest
AlphaTest
Frag
men
t
Fram
ebuf
fer
Arvind Devaraj
Blending
Stencil test
Depth test
Arvind Devaraj
Alpha : for blending effect
Arvind Devaraj
Arvind Devaraj51
Blending (using Alpha)
�� AlphaAlpha--Measure of OpacityMeasure of Opacity� simulate translucent objects
� glass, water, etc.
� composite images� AntialiasingglEnable( GL_BLEND )
Arvind Devaraj52
Blending
�� Combine pixels with whatCombine pixels with what’’s in alreadys in alreadyin the in the framebufferframebufferglBlendFuncglBlendFunc( ( srcsrc, , dstdst ))
FramebufferFramebufferPixelPixel((dstdst))
BlendingEquation
BlendingEquation
FragmentFragment((srcsrc))
BlendedBlendedPixelPixel
pfr CdstCsrcC���
��
Arvind Devaraj
Blending- Demo
� Exercises� add multiple shaders� simple blend� Demo (url devmaster)� Advanced (notes)
Other blending modesTexture blending
Arvind Devaraj
Stencil test
Arvind Devaraj
Stencil test
Arvind Devaraj
Accumulation buffer
� The accumulation buffer is simply an extra image buffer that is used to accumulate composite images.
Arvind Devaraj
Accumulation buffer
� Color buffer loses precision, so use float buffer
�� CompositingCompositing�� AntialiasingAntialiasing�� FilteringFiltering�� Motion BlurMotion Blur
Arvind Devaraj
OpenGLES
� There is no support for glBegin or glEnd. Use vertex arrays and vertex buffer objects instead.
� The only supported rasterizationprimitives are points, lines and triangles. Quads are not supported
� There is no support for display lists.
Arvind Devaraj
OpenGLES
� There is no support for the fixed-function graphics pipeline. You must use your own vertex and fragment shader programs.
� There is no support for viewing transforms such as glFrustumf. You must compute your own transformation matrix, pass it to the vertex shader as a uniform variable, and perform the matrix multiplication in the shader.
� There is no support for specialized functions such as glVertexPointer and glNormalPointer. Use glVertexAttribPointer instead.
Arvind Devaraj
OpenGLES- Buffer Objects
� OpenGL cannot directly see any of your memory
� Therefore, the first step is to allocate some memory that OpenGL can see . This is done with something called a buffer object.
Think of a buffer object as an array of GPU memory.
Arvind Devaraj
OpenGLES- Buffer Objects
� Pass arrays of vertices, colors, etc. to OpenGL in a large chunkglVertexPointer( 3, GL_FLOAT, 0, coords )glColorPointer( 4, GL_FLOAT, 0, colors )
glEnableClientState( GL_VERTEX_ARRAY ) glEnableClientState( GL_COLOR_ARRAY )
glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );
Arvind Devaraj
OpenGLES - BufferObjects� void InitializeVertexBuffer() {
glGenBuffers(1, &positionBufferObject); glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
glBufferData(GL_ARRAY_BUFFER, siz, vertexPositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
Arvind Devaraj
Exercises
� Moving ball animation� Blending� Texturing
�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Recommended