Graphics programming in open gl

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