peter mileff phd - university of miskolcmileff/graphics/graphicschapter5.pdf · programming of...
TRANSCRIPT
![Page 1: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/1.jpg)
Programming of Graphics
Introduction to OpenGL
Peter Mileff PhD
University of MiskolcDepartment of Information Technology
![Page 2: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/2.jpg)
OpenGL libraries⦿ GL (Graphics Library): Library of 2D, 3D drawing
primitives and operations● API for 3D hardware acceleration
⦿ GLU (GL Utilities): Miscellaneous functions● dealing with camera setup and higher-level shape
descriptions
⦿ GLUT (GL Utility Toolkit): Window-system independent toolkit● with numerous utility functions, mostly dealing with
user interface
2
![Page 3: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/3.jpg)
Software Organization
3
![Page 4: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/4.jpg)
The OpenGL Context...
4
![Page 5: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/5.jpg)
OpenGL Context
5
⦿ Before we do anything, an OpenGL Context should be created
⦿ An OpenGL context represents many things:● A context stores all of the state associated with this
instance of OpenGL● It represents the (potentially visible) default
framebuffer that rendering commands will draw to● Think of a context as an object that holds all of
OpenGL● when a context is destroyed, OpenGL is destroyed
![Page 6: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/6.jpg)
A JOGL Application
6
⦿ In order to create a Java window, we should extend the JFrame class from Swing
⦿ We can access the OpenGL functionality from JOGL by implementing the GLEventListener interface
public class Game extends JFrame implements GLEventListener { private static final long serialVersionUID = 1L; public void display(GLAutoDrawable drawable) { } public void dispose(GLAutoDrawable drawable) { } public void init(GLAutoDrawable drawable) { } public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height){ } }
![Page 7: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/7.jpg)
OpenGL Context in JOGL
7
// Get GL profile final GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);
// Create a canvas for 3D Graphics final GLCanvas glcanvas = new GLCanvas(capabilities);
// Create Frame for canvas final JFrame frame = new JFrame("3d Triangle (solid)");
frame.getContentPane().add(glcanvas); frame.setSize(frame.getContentPane().getPreferredSize()); frame.setVisible(true);
final FPSAnimator animator = new FPSAnimator(glcanvas, 60, true); animator.start();
![Page 8: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/8.jpg)
A JOGL Application
8
⦿ Try and investigate the MyJoglDemoSimple application!
![Page 9: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/9.jpg)
OpenGL Context in JOGL
9
⦿ GLProfile: determines the used OpenGL version● The field of computer graphics changes rapidly. ● Graphics APIs must often break backwards compatibility with
each revision.● It is important that programmers have control over which
version of OpenGL is used by the application
⦿ To select OpenGL 2.1, for example, a GLProfile would be created as follows:
GLProfile glp = GLProfile.get(GLProfile.GL2);
![Page 10: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/10.jpg)
OpenGL Context in JOGL
10
⦿ GLCapabilities:
⦿ This object describes some specific capabilities a rendering context should support
⦿ The default settings are usually fine, but many options are available:● E.g: effects such as full-scene anti-aliasing, stereo rendering.
⦿ This object takes an instance of GLProfile as a parameter.
GLCapabilities caps = new GLCapabilities(glp);
![Page 11: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/11.jpg)
OpenGL Context in JOGL
11
⦿ GLCanvas:
⦿ A heavyweight AWT component which provides OpenGL rendering support.
⦿ Everything will be drawn to this component.
GLCanvas glcanvas = new GLCanvas(capabilities);
![Page 12: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/12.jpg)
The rendering / game loop...
12
![Page 13: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/13.jpg)
Rendering Loop / Game loop
13
● Loop: Graphics are repeatedly drawn on screen and interactive (frames)
● This is real-time rendering● This is the type of rendering used in games● This style of rendering contrasts offline rendering
○ where single images or frames are calculated over a long period of time
● Rendering loop should reach 50-60 Frames per Secundum (FPS)
![Page 14: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/14.jpg)
Rendering Loop / Game loop
14
![Page 15: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/15.jpg)
Rendering Loop / Game loop
15
Initialization:● Choosing a GLProfile and configuring GLCapabilities for a
rendering context● Creating a window and GLContext through the
GLAutoDrawable● Making an animator thread● Loading resources needed by program
Process Input:● Listen for mouse and keyboard events● Update user's view (often called a camera)
![Page 16: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/16.jpg)
Rendering Loop / Game loop
16
Update (Simulate Game World):● Calculate geometry● Rearrange data● Perform computations
Render:● Draw scene geometry from a particular view
Shut Down:● Save persistent data● Clean up resources on graphics card
![Page 17: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/17.jpg)
Animating the loop in JOGL
17
● JOGL provides some utility classes for animating our program.
● An Animator object can be created to ensure the display method of a GLAutoDrawable is repeatedly called.
● An FPSAnimator allows us make the framerate relatively consistent and can reduce the resource consumption of the program
FPSAnimator animator = new FPSAnimator(canvas, 60);animator.start();
![Page 18: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/18.jpg)
Animating the loop in JOGL
18
● The animator is attached to the GLCanvas and asked to render at roughly 60 frames per second
● The display method will be called approximately every 17 ms (1000 / 60)
![Page 19: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/19.jpg)
The Basics of OpenGL...
19
![Page 20: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/20.jpg)
Geometry Basics
20
⦿ Geometric objects are represented using vertices⦿ A vertex is a collection of generic attributes
● positional coordinates● colors● texture coordinates● any other data associated with that point in space
![Page 21: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/21.jpg)
Basics
21
⦿ OpenGL is not object oriented● so that there are multiple functions for a given logical function● E.g.:
○ glVertex3f ○ glVertex2i ○ glVertex3dv
⦿ OpenGL is a state machine:● We put it into various states (or modes) that then remain in
effect until you change them● E.g: colors, current viewing and projection transformations, line
and polygon stipple patterns, etc● Every state has a default value
![Page 22: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/22.jpg)
Geometry Basics
22
![Page 23: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/23.jpg)
Rendering Loop
23
● Every rendering loop has three phases:○ Start part: usually reinitialises the view and states
■ reset events, clears screen, etc. E.g. glClear( GL_COLOR_BUFFER_BIT );
○ Drawing part: draw geometry
glBegin( XXXX );…..
glEnd();
● End part: closes the rendering process■ OpenGL should be informed about the end of rendering
Command: glFlush();
![Page 24: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/24.jpg)
Basic Example
24
void Display() { glClear(GL_COLOR_BUFFER_BIT); glColor4f(1,1,0,1); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); }
![Page 25: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/25.jpg)
Vertices and Primitives...
25
![Page 26: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/26.jpg)
Vertices and Primitives
26
⦿ Geometry object are built from primitives⦿ OpenGL support many primitive types⦿ Game models are usually based on
Triangles
![Page 27: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/27.jpg)
Vertices and Primitives
27
⦿ Points, GL_POINTS● Individual points● Point size can be altered
○ glPointSize(float size)Example:
glBegin(GL_POINTS);glColor3fv( color );glVertex2f( P0.x, P0.y );glVertex2f( P1.x, P1.y );glVertex2f( P2.x, P2.y );glVertex2f( P3.x, P3.y );glVertex2f( P4.x, P4.y );glVertex2f( P5.x, P5.y );glVertex2f( P6.x, P6.y );glVertex2f( P7.x, P7.y );glEnd();
![Page 28: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/28.jpg)
Vertices and Primitives
28
⦿ Lines, GL_LINES● Pairs of vertices interpreted as individual line segments● Can specify line width using:
○ glLineWidth (float width)
Example:glBegin(GL_LINES);glColor3fv( color );glVertex2f( P0.x, P0.y );glVertex2f( P1.x, P1.y );glVertex2f( P2.x, P2.y );glVertex2f( P3.x, P3.y );glVertex2f( P4.x, P4.y );glVertex2f( P5.x, P5.y );glVertex2f( P6.x, P6.y );glVertex2f( P7.x, P7.y );glEnd();
![Page 29: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/29.jpg)
Vertices and Primitives
29
⦿ Line Strip, GL_LINE_STRIP● series of connected line segments
![Page 30: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/30.jpg)
Vertices and Primitives
30
⦿ Line Loop, GL_LINE_LOOP● Line strip with a segment added between last and first
vertices
![Page 31: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/31.jpg)
Vertices and Primitives
31
⦿ Polygon , GL_POLYGON● boundary of a simple, convex polygon
![Page 32: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/32.jpg)
Vertices and Primitives
32
⦿ Triangles , GL_TRIANGLES● triples of vertices interpreted as triangles
![Page 33: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/33.jpg)
Vertices and Primitives
33
⦿ Triangle Strip , GL_TRIANGLE_STRIP● linked strip of triangles
![Page 34: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/34.jpg)
Vertices and Primitives
34
⦿ Triangle Fan , GL_TRIANGLE_FAN● linked fan of triangles
![Page 35: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/35.jpg)
Vertices and Primitives
35
⦿ Quads , GL_QUADS● quadruples of vertices interpreted as four-sided
polygons
![Page 36: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/36.jpg)
Vertices and Primitives
36
⦿ Between glBegin / glEnd, those opengl commands are allowed:
● glVertex*() : set vertex coordinates● glColor*() : set current color● glIndex*() : set current color index● glNormal*() : set normal vector coordinates (Light.)● glTexCoord*() : set texture coordinates (Texture)
![Page 37: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/37.jpg)
Transformations...
37
![Page 38: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/38.jpg)
Transformations is OpenGL
38
⦿ Modeling transformation● Refer to the transformation of models (i.e., the scenes,
or objects)
⦿ Viewing transformation● Refer to the transformation on the camera
⦿ Projection transformation● Refer to the transformation from scene to image
![Page 39: Peter Mileff PhD - University of Miskolcmileff/graphics/GraphicsChapter5.pdf · Programming of Graphics Introduction to OpenGL Peter Mileff PhD University of Miskolc Department of](https://reader033.vdocuments.site/reader033/viewer/2022042210/5eae49b0e108e66a8d4fb81f/html5/thumbnails/39.jpg)
39