1 / 29

New topic for Java course: Introduction to 3D graphics programming with JOGL

New topic for Java course: Introduction to 3D graphics programming with JOGL. Dejan Mitrović Prof. Dr Mirjana Ivanović. AGENDA. Motivation and goals JOGL Proposed subjects Conclusions. 1.1. Motivation.

melosa
Download Presentation

New topic for Java course: Introduction to 3D graphics programming with JOGL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. New topic for Java course:Introduction to 3D graphics programming with JOGL Dejan MitrovićProf. Dr Mirjana Ivanović

  2. AGENDA • Motivation and goals • JOGL • Proposed subjects • Conclusions 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  3. 1.1. Motivation • Game development represents a large portion of the software development industry, BUT, so far very few programming courses given at our Department were focused at this area • The proposed set of subjects constitutes a small part of the recently updated Computer graphics course, which has received high grades from students 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  4. 1.2. Goals • Provide students with an opportunity to practice Java programming and extend their OO programming skills in an exciting environment • Introduce the proposed set of subjects near the end of the introductory, or at the beginning of the advanced OO course, depending on the students’ progress over the semester • Give them a solid background for later, more advanced topics of the Computer graphics course 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  5. AGENDA • Motivation and goals • JOGL • Proposed subjects • Conclusions 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  6. 2.1. Why JOGL? • Based on OpenGL - a professional, powerful, free, cross-platform graphics programming library • Straightforward integration with other GUI and graphics Java APIs and libraries (e.g. Swing, Java2D) • Can serve as an example of how an OO system should not be designed  10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  7. 2.2. JOGLext: A JOGL extension library • A library of helper classes built on top of JOGL • Handles common, “boring”, but necessary tasks, includes functions for vector and matrix-based calculations, etc. • Purpose: enable students to develop simple 3D applications without any (mathematical or game programming) background • Although, experience in playing FPS games can prove valuable for 3D camera handling 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  8. 2.3. Core JOGLext classes • JoglFrame: a base class for all students’ applications, handles display mode changes, precise timing measurements, various maintenance tasks, etc. • Camera: a flexible, programmable, FPS-like 3D camera for navigation through generated scenes • Mesh: a framework for loading and rendering external complex 3D models 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  9. AGENDA • Motivation and goals • JOGL • Proposed subjects • Conclusions 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  10. 3. Proposed subjects • Introduction to 3D graphics programming(1-hour lesson) • 3D rendering basics(1-hour lesson) • World transformations(2-hours lesson) • Texturing(2-hours lesson) • Complex 3D models(2-hours lesson) 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  11. 3.1. Introduction to 3D graphics programming • What is a graphics programming library? • Introduction to OpenGL and JOGL • Elements of a 3D application: frustum definition, overview of projection and viewing transformations, viewports, etc. • Main classes of JOGLext, creating a very first 3D application by implementing methods of JoglFrame 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  12. 3.1. Example: HelloWorld3D public class HelloWorld3D extends JoglFrame { @Override protected void initialize(GL gl, Color4f back, Vector3f cameraPos,Vector3f cameraDir) { // TODO : initialize camera, set clear color } @Override protected void render(GL gl, double elapsedTime) { // TODO : perform rendering } public static void main(String[] args) { HelloWorld3D hw = new HelloWorld3D(); // Caption: Hello World 3D // Frame width: 640px // Frame height: 480px // Fullscreen mode: false hw.start("Hello World 3D", 640, 480, false); } } 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  13. 3.1. Results 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  14. 3.2. 3D rendering basics • Coordinate system and 3D object specification using vertices • Methods glVertex3f() and glColor3f() • Different modes of rendering with glBegin() and glEnd(): triangle lists, strips, and fans, quads, and polygons • Rendering built-in objects with GLUT • Basic 2D text rendering with TextRenderer 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  15. 3.2. Example: Hexagon public class Hexagon { // vertices definition private static final Vector3f[] vertices = new Vector3f[] { new Vector3f( 0.0f, 0.0f, 0.0f), new Vector3f(-1.0f, 0.0f, 0.0f), new Vector3f(-0.5f, 1.0f, 0.0f), new Vector3f( 0.5f, 1.0f, 0.0f), new Vector3f( 1.0f, 0.0f, 0.0f), new Vector3f( 0.5f, -1.0f, 0.0f), new Vector3f(-0.5f, -1.0f, 0.0f) }; // each vertex will be of a different color private static final Color4f[] colors = new Color4f[] { new Color4f(1.0f, 0.0f, 0.0f), new Color4f(0.0f, 1.0f, 0.0f), new Color4f(1.0f, 1.0f, 0.0f), new Color4f(1.0f, 1.0f, 1.0f), new Color4f(0.0f, 0.0f, 1.0f), new Color4f(1.0f, 0.0f, 1.0f), new Color4f(0.0f, 1.0f, 1.0f) }; 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  16. 3.2. Example: Hexagon (cont.) // method for rendering the n-th vertex private void renderPoint(GL gl, int n, float z) { // first set the n-th color, then send the coordinates Color4f c = colors[n]; gl.glColor3f(c.getRed(), c.getGreen(), c.getBlue()); Vector3f v = vertices[n]; gl.glVertex3f(v.getX(), v.getY(), z); } // using GL_TRIANGLE_FAN for hexagon rendering public void renderTriangleFan(GL gl, float z) { // the first 3 vertices make up 1 triangle // every other vertex is connected to the first and the the previous one gl.glBegin(GL.GL_TRIANGLE_FAN); renderPoint(gl, 0, z); renderPoint(gl, 1, z); renderPoint(gl, 2, z); renderPoint(gl, 3, z); renderPoint(gl, 4, z); renderPoint(gl, 5, z); renderPoint(gl, 6, z); renderPoint(gl, 1, z); gl.glEnd(); } } // class Hexagon 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  17. 3.2. Example: 3D Rendering public class HelloWorld3D extends JoglFrame { private Hexagon hex = new Hexagon(); private TextRenderer text; @Override protected void initialize(GL gl, Color4f back, Vector3f cameraPos, Vector3f cameraDir) { // initialize TextRenderer Font font = new Font("Tahoma", Font.BOLD, 12); text = new TextRenderer(font); } @Override protected void render(GL gl, double elapsedTime) { // render a yellow teapot using GLUT gl.glColor3f(1.0f, 1.0f, 0.0f); glut.glutSolidTeapot(1.0f); // render a colored triangle behind the teapot gl.glBegin(GL.GL_TRIANGLES); gl.glColor3f( 1.0f, 0.0f, 0.0f); gl.glVertex3f(-1.0f, -0.5f, -5.0f); gl.glColor3f( 0.0f, 1.0f, 0.0f); gl.glVertex3f( 1.0f, -0.5f, -5.0f); gl.glColor3f( 1.0f, 1.0f, 1.0f); gl.glVertex3f( 0.0f, 0.5f, -5.0f); gl.glEnd(); 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  18. 3.2. Example: 3D Rendering (cont.) // render a hexagon behind the triangle hex.renderTriangleFan(gl, -10.0f); // render 2D text at the top of the window int w = getWidth(); int h = getHeight(); text.beginRendering(w, h); text.setColor(1.0f, 1.0f, 0.0f, 1.0f); // first line - frame rate, below it - camera position text.draw("FPS: " + getFps(), 2, h - 16); text.draw("Camera: " + camera.getPosition().toString(), 2, h - 36); // end text rendering text.endRendering(); } // render public static void main(String[] args) { HelloWorld3D hw = new HelloWorld3D(); hw.start("Hello World 3D", 640, 480, false); } } // class HelloWorld3D 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  19. 3.2. Results 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  20. 3.3. World transformations • Motivation behind and the effects of world transformations • With just a brief overview of “low level” matrix math • Methods glTranslatef(), glRotatef(), and glScalef() • Combining multiple transformations • Storing and restoring transformations with glPushMatrix() and glPopMatrix() 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  21. 3.3. Example: SolarSystem public class Planet{ private float distance; // from the sun private float revolution; // revolution angle private float scale; // size parameter private Color4f color; // color of the planet public Planet(float distance, float revolution, float scale, Color4f color){ // ommitted, save parameters } public void render(GL gl, GLUT glut){ // set the planet color gl.glColor3f(color.getRed(), color.getGreen(), color.getBlue()); // every method that changes the world transformation // should always first save the current state and later restore it gl.glPushMatrix(); // rotation around the sun gl.glRotatef(revolution, 0.0f, 1.0f, 0.0f); gl.glTranslatef(distance, 0.0f, 0.0f); // scale the sphere and render it gl.glScalef(scale, scale, scale); glut.glutSolidSphere(1.0f, 25, 25); // restore the original world transformation gl.glPopMatrix(); } } 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  22. 3.3. Example: SolarSystem (cont.) public class SolarSystem extends JoglFrame{ private Planet sun, venus, earth, mars;// miniature solar system protected void initialize(GL gl, Color4f backColor, Vector3f cameraPos, Vector3f cameraDir){ // initialize camera cameraPos.assign(1.75f, 17.0f, 38.47f); cameraDir.assign(0.0f, -0.49f, -0.87f); // initialize planets sun = new Planet(0.0f, 0.0f, 5.0f, new Color4f(1.0f, 1.0f, 0.0f)); venus = new Planet(10.0f, -160.0f, 0.7f, new Color4f(0.59f, 0.3f, 0.0f)); earth = new Planet(15.0f, -80.0f, 1.0f, new Color4f(0.0f, 0.0f, 1.0f)); mars = new Planet(20.0f, -60.0f, 0.5f, new Color4f(1.0f, 0.0f, 0.0f)); } protected void render(GL gl, double elapsedTime){ sun.render(gl, glut); venus.render(gl, glut); earth.render(gl, glut); mars.render(gl, glut); } public static void main(String[] args){ // ommitted, the usual } } 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  23. 3.3. Results 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  24. 3.4. Texturing • Textures and texture coordinates • Loading, enabling, disabling, and binding textures, assigning coordinates with glTexCoord2f() • Method glTexEnvf(), and environment modes GL_MODULATE and GL_REPLACE • Different ways of applying texture coordinates with GL_CLAMP and GL_REPEAT • 2D texture rendering with TextureRenderer 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  25. 3.4. Adding textures to SolarSystem 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  26. 3.5. Complex 3D models • The concept of meshes, their organization into sub-meshes of vertices with shared properties • Using the Mesh class for loading and rendering 3D models • OBJ file format for storing meshes 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  27. 3.5. The end results 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  28. 4. Conclusions • Graphics programming with JOGL represents an exciting environment for practicing Java programming and extending students’ OO programming skills (such as aggregation, inheritance and polymorphism, working with arrays, etc.) • JOGLext enables students to “dive into” the 3D application development without much previous knowledge of the subject • The proposed set of subjects is simple enough, yet it provides them with enough material for creating real 3D applications • The subjects also serve as a good foundation for senior, more advance Computer graphics course 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

  29. Thank you!  Questions? Suggestions? 10th Workshop "Software Engineering and Reverse Engineering", Ivanjica, Serbia, September 5 - 12, 2010

More Related