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
![Page 1: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/1.jpg)
OpenGL and Projections
David E. Johnson
![Page 2: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/2.jpg)
Goals
• Quick overview of OpenGL
• Some derivation of projections and transformations
![Page 3: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/3.jpg)
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
![Page 4: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/4.jpg)
• 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!
![Page 5: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/5.jpg)
Basic Pipeline
![Page 6: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/6.jpg)
Basic Pipeline
![Page 7: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/7.jpg)
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.
![Page 8: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/8.jpg)
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
![Page 9: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/9.jpg)
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
![Page 10: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/10.jpg)
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;
}
![Page 11: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/11.jpg)
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?
![Page 12: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/12.jpg)
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
![Page 13: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/13.jpg)
Moving Camera Back
default frames
frames after translation by –d d > 0
![Page 14: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/14.jpg)
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
![Page 15: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/15.jpg)
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);
![Page 16: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/16.jpg)
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);
![Page 17: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/17.jpg)
gluLookAtglLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz)
![Page 18: OpenGL and Projections](https://reader035.vdocuments.site/reader035/viewer/2022062309/56814d51550346895dba880b/html5/thumbnails/18.jpg)
Projections
• See notes