Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Cấu trúc
Slide 1
OpenGL and GLUT Overview
What Is OpenGL?
OpenGL Architecture
OpenGL as a Renderer
Related APIs
OpenGL and Related APIs
What is JOGL?
Setting Up JOGL 2.0x
Preliminaries
JOGL Basics
Sample Template Program
Sample Program: init event
Sample Program: reshape event
Sample Program: display event
Sample Program: dispose event
Slide 17
Slide 18
Elementary Rendering
OpenGL Geometric Primitives
Simple Example
OpenGL Command Formats
Enumerated Types
Specifying Geometric Primitives
OpenGL Color Models
Shapes Tutorial
Controlling Rendering Appearance
OpenGL’s State Machine
Manipulating OpenGL State
Controlling current state
OpenGL State Variables
Animation and Depth Buffering
Depth Buffering and Animation
Animation using Double Buffering
Animation and Double Buffering
Depth Buffering and Hidden Surface Removal
Hidden Surface Removal
Depth Buffering Using OpenGL
An Updated Program Template
An Updated Program Template (cont)
Nội dung
OpenGL Overview OpenGL and GLUT Overview • What is OpenGL & what can it for me? • OpenGL in windowing systems • Why GLUT • A GLUT program template What Is OpenGL? • Graphics rendering API – – • a cross-platform API high-quality color images composed of geometric and image primitives widely used in CAD, virtual reality, scientific visualization, information visualization and video game development OpenGL Architecture OpenGL as a Renderer • Geometric primitives – • points, lines and polygons Image Primitives – – images and bitmaps separate pipeline for images and geometry • • linked through texture mapping Rendering depends on state – colors, materials, light sources, etc Related APIs • • • AGL, GLX, WGL – glue between OpenGL and windowing systems GLU (OpenGL Utility Library) – – part of OpenGL NURBS, tessellators, quadric shapes, etc GLUT (OpenGL Utility Toolkit) – – – – portable windowing API keyboard and mouse input Geometric primitives: cubes, spheres, and teapot not officially part of OpenGL OpenGL and Related APIs application program OpenGL Motif GLUT widget or similar GLX, AGL or WGL X, Win32, Mac O/S software and/or hardware GLU GL What is JOGL? • Java OpenGL is a wrapper library by the Game Technology Group at Sun Microsystems that allow OpenGL to be used in Java • • • The base OpenGL C API is accessed in JOGL via Java Native Interface (JNI) calls The straightforward mapping of the OpenGL C API to Java methods Other Java OpenGL wrappers: GL4Java, JGL, LWJGL (Light-Weight Java Game Library) Setting Up JOGL 2.0x • Download the latest "stable" release from JogAMP http://jogamp.org/deployment/jogamp-current/archive Select "jogamp-all-platforms.7z" • Setup Library – – Copy the necessary jar-file, native libraries of your operating platform, and source-files into the appropriate sub-directories for Win32, copy • • • • "jar\gluegen-rt.jar", "jar\jogl.all.jar" into "jar"; all files in "lib\windows-i586" into "lib"; "gluegen-java-src.zip", "jogl-java-src.zip" into "src" Unzip the javadocs downloaded into "javadoc" Preliminaries • Headers Files // must import OpenGL im p ort javax.media.opengl.GL2; // import GL constants im p ort static javax.media.opengl.GL2.*; im p ort javax.media.opengl.glu.GLU; im p ort com.jogamp.opengl.util.gl2.GLUT im p ort javax.media.opengl.GLAutoDrawable; im p ort javax.media.opengl.GLCapabilities; im p ort javax.media.opengl.GLEventListener; im p ort javax.media.opengl.GLProfile; im p ort javax.media.opengl.awt.GLJPanel; Shapes Tutorial Controlling Rendering Appearance • From Wireframe to Texture Mapped OpenGL’s State Machine • All rendering attributes are encapsulated in the OpenGL State – – – – rendering styles shading lighting texture mapping Manipulating OpenGL State • Appearance is controlled by current state for each (primitive to render) { update OpenGL state render primitive } • Manipulating vertex attributes is most common way to manipulate state • • • glColor*() / glIndex*() glNormal*() glTexCoord*() Controlling current state • Setting State – – – • glPointSize(size); glLineStipple(repeat, pattern); glShadeModel(GL_SMOOTH); Enabling Features – – – glEnable(cap); glDisable(cap); cap is a feature like: • GL_LIGHTING, GL_TEXTURE_2D, GL_CULL_FACE, GL_BLEND, OpenGL State Variables • You can query the State Machine to determine the state of any variable • Any feature you enable or disable with glEnable / glDisable as well as numeric settings set with glSet can be queried with the many variations of glGet • Example byte color[3]; gl.glColor3ub(color[0], color[1], color[2]); gl.glColor3bv(color); fl o at colorf[3]; gl.glGetFloatv(GL_CURRENT_COLOR, colorf, 0); Animation and Depth Buffering Depth Buffering and Animation • Discuss double buffering and animation • Discuss hidden surface removal using the depth buffer Animation using Double Buffering 1 2 Front Buffer Back 16 16 Display Buffer Animation and Double Buffering • Request a double buffered color buffer – • Default for JOGL Clear color buffer – gl.glClear(GL_COLOR_BUFFER_BIT); • Render scene • Request swap of front and back buffers – • gl.glFlush(); Repeat steps - for animation Depth Buffering and Hidden Surface Removal 1 2 Color Buffer 16 Depth 16 Display Buffer Hidden Surface Removal Depth Buffering Using OpenGL • • • • • Request a depth buffer Enable depth buffering – glEnable(GL_DEPTH_TEST); Clear color and depth buffers – glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); Render scene Swap color buffers An Updated Program Template • Depth Buffer phải xóa trước vẽ p u b lic void display(G LAutoD raw able draw able) { G L2 gl= draw able.getG L().getG L2(); // clear color and depth buff ers gl.glClear(G L_CO LO R_BU FFER_BIT | G L_D EPTH _BU FFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f,0.0f,-5.0f); } An Updated Program Template (cont) void init() { glClearColor(0.0, 0.0, 1.0, 1.0); } void drawScene() { fl o at vertices[] = { … }; fl o at colors[] = { … }; gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl.glBegin(GL_TRIANGLE_STRIP); /* calls to glColor*() and glVertex*() */ gl.glEnd(); gl.glflush(); } .. .OpenGL and GLUT Overview • What is OpenGL & what can it for me? • OpenGL in windowing systems • Why GLUT • A GLUT program template What Is OpenGL? • Graphics rendering... // must import OpenGL im p ort javax.media .opengl. GL2; // import GL constants im p ort static javax.media .opengl. GL2.*; im p ort javax.media .opengl. glu.GLU; im p ort com.jogamp .opengl. util.gl2.GLUT... javax.media .opengl. GLAutoDrawable; im p ort javax.media .opengl. GLCapabilities; im p ort javax.media .opengl. GLEventListener; im p ort javax.media .opengl. GLProfile; im p ort javax.media .opengl. awt.GLJPanel;