opengl and projections
DESCRIPTION
OpenGL and Projections. David E. Johnson. Goals. Quick overview of OpenGL Some derivation of projections and transformations. OpenGL. OpenGL is nothing more than a set of functions you call from your program Most functions map to GPU hardware - PowerPoint PPT PresentationTRANSCRIPT
OpenGL and Projections
David E. Johnson
Goals
• Quick overview of OpenGL
• Some derivation of projections and transformations
OpenGL
• OpenGL is nothing more than a set of functions you call from your program– Most functions map to GPU hardware
• Hides the details of the display adapter, operating system, etc.
• Has grown to become a flexible general purpose compute platform
• As a programmer, you need to – Specify the location/parameters of camera.– Specify the geometry (and appearance).– Specify the lights.
• OpenGL will compute the resulting 2D image!
Basic Pipeline
Basic Pipeline
OpenGL Hierarchy
• Several levels of abstraction are provided• GL
– Lowest level: vertex, matrix manipulation– glVertex3f(point.x, point.y, point.z)
• GLU– Helper functions for shapes, transformations– gluPerspective( fovy, aspect, near, far )
• GLUT– Highest level: Window and interface management– glutSwapBuffers()
• All fairly raw – most people have their own point class which gets transformed to GL arrays as needed.
OpenGL Implementations
• OpenGL is an API – #include <GL/gl.h>– #include <GL/glu.h>– #include <GL/glut.h>
• Windows, Linux, UNIX, etc. all provide a platform specific implementation.
• Windows: opengl32.lib glu32.lib glut32.lib• Linux: -l GL -l GLU –l GLUT
OpenGL Conventions
• OpenGL is largely state based– Calls persist– This instead of having functions with 100s of options– Transformations live on stacks
• Layers of transformations possible
• Work is done on buffers (color, depth,…)• Many functions have multiple forms:
– glVertex2f, glVertex3i, glVertex4dv, etc.
• Number indicates number of arguments• Letters indicate type
– f: float, d: double, v: pointer, etc.
• Programs tend to be event based
A simple GLUT program// A simple OpenGL and glut program#include <GL/gl.h>#include <GL/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);glutInitWindowSize(512,512);glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH ); glutCreateWindow("The glut hello world program");glutDisplayFunc(display);glClearColor(0.0, 0.0, 0.0, 1.0);glutMainLoop(); // Infinite event loopreturn 0;
}
OpenGL: Camera
• Two things to specify:– Physical location of camera in the scene
• Where is the camera?• Which direction is it pointing?• What is the orientation of the camera?
– Projection properties of the camera• Depth of field?• Field of view in the x and y directions?
The OpenGL Camera
• Initially the object and camera frames are the same–Default model-view matrix is an identity
• The camera is located at origin and points in the negative z direction
• OpenGL also specifies a default view volume that is a cube with sides of length 2 centered at the origin
–Default projection matrix is an identity
Moving Camera Back
default frames
frames after translation by –d d > 0
Moving the Camera
•We can move the camera to any desired position by a sequence of rotations and translations
•Example: side view–Rotate the camera–Move it away from origin–Model-view matrix C = RT
OpenGL code
•Remember that last transformation specified is first to be applied
glMatrixMode(GL_MODELVIEW)glLoadIdentity();glRotatef(90.0, 0.0, 1.0, 0.0);glTranslatef(0.0, 0.0, -d);
The LookAt Function
• The GLU library contains the function gluLookAt to form the required modelview matrix through a simple interface
• Note the need for setting an up direction• Still need to initialize
–Can concatenate with modeling transformations• Example: isometric view of cube aligned with axes
glMatrixMode(GL_MODELVIEW):glLoadIdentity();gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0., 1.0. 0.0);
gluLookAtglLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz)
Projections
• See notes