3D Application and Game Development with Opengl®

3D Application and Game Development with Opengl®

3D Application and Game Development ® With OpenGL java.sun.com/javaone/sf Daniel Petersen Kenneth Russell Sun Microsystems, Inc. 1 | 2004 JavaOneSM Conference | Session TS-1361 Presentation Goal Show how to build leading-edge 3D applications and games using the Java™ programming language and the OpenGL® 3D API 2 | 2004 JavaOneSM Conference | Session TS-1361 Agenda Introduction JSR Update Using JOGL With AWT and Swing Techniques for Application Development Optimizing JOGL Applications Demos Conclusion 3 | 2004 JavaOneSM Conference | Session TS-1361 Agenda Introduction JSR Update Using JOGL With AWT and Swing Techniques for Application Development Optimizing JOGL Applications Demos Conclusion 4 | 2004 JavaOneSM Conference | Session TS-1361 Introduction • OpenGL ─ Powerful, cross-platform 3D API ─ Industry standard for writing 3D applications and games ─On multiple platforms ─From multiple programming languages ─ Supported by multiple vendors ─ Provides access to latest hardware features ─Vertex and fragment programs ─Floating-point framebuffers 5 | 2004 JavaOneSM Conference | Session TS-1361 Introduction Java programming language OpenGL bindings • A few bindings under active development • LWJGL ─ Game-focused OpenGL binding ─ Single window ─ Usually full-screen • JOGL ─ Integrates with AWT and Swing • Relies on J2SE™ platform for, e.g., full-screen support • Today’s talk will use JOGL for examples 6 | 2004 JavaOneSM Conference | Session TS-1361 Introduction Java programming language OpenGL bindings • Standardization effort underway • One Java programming language binding to OpenGL ─ Can be implemented by multiple vendors if desired ─ Being developed under the Java Community ProcessSM service ─ JSRs 231 and 239 7 | 2004 JavaOneSM Conference | Session TS-1361 Agenda Introduction JSR Update Using JOGL With AWT and Swing Techniques for Application Development Optimizing JOGL Applications Demos Conclusion 8 | 2004 JavaOneSM Conference | Session TS-1361 JSR Update Overview • What are JSR 231 and JSR 239 • Benefits of a JSR • JSR 231 and JSR 239 Status 9 | 2004 JavaOneSM Conference | Session TS-1361 JSR 231 and 239 What they are • JSR 231 ─ Java bindings to OpenGL ─ Based on JOGL project on java.net ─ Most likely based on OpenGL 1.5 • JSR 239 ─ Java bindings to OpenGL ES ─ Will use the GlueGen technology of JOGL to generate bindings ─ Most likely based on OpenGL ES 1.0 • Both being run under the Java Community Process version 2.6 10 | 2004 JavaOneSM Conference | Session TS-1361 Why Do a JSR? Benefits of a JSR • Align market around one specification ─ No need to download multiple APIs for the same binding ─ Specification and TCK ensure compliant bindings can be produced ─ Ensure all functionality of native library present • Some industries (e.g., mobile devices) prefer JCP APIs 11 | 2004 JavaOneSM Conference | Session TS-1361 JSR 231 and 239 Status • Both JSRs were filed and approved by their respective ECs • Both Expert Groups have been formed and are meeting regularly • EGs working together to make both APIs as similar as possible • Both EGs hope to have EDRs late this year 12 | 2004 JavaOneSM Conference | Session TS-1361 JSR 231 and 239 Notes • Both JSRs are fundamentally tracking a third-party API • Want to track the OpenGL APIs as closely as possible • Plan to use maintenance releases for updates ─ 30-day review period (shortest possible) 13 | 2004 JavaOneSM Conference | Session TS-1361 What You Can Do More help is ALWAYS welcome • Join an Expert Group ─ Specification work ─ SI work ─ TCK work • Contribute to JOGL project on java.net • Participate in EDRs 14 | 2004 JavaOneSM Conference | Session TS-1361 Agenda Introduction JSR Update Using JOGL With AWT and Swing Techniques for Application Development Optimizing JOGL Applications Demos Conclusion 15 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing DirectDraw incompatibilies on Windows • -Dsun.java2d.noddraw=true • Disables Java 2D™ API’s internal use of DirectDraw APIs on Windows ─ Incompatible with OpenGL ─ Frequent driver bugs arise when mixing the two APIs, even when they are used in separate windows • Should be specified for all JOGL applications! ─ No harm specifying on non-Windows platforms ─ Especially for Java Web Start applications ─ Add following to resources section of JNLP file: ─ <property name="sun.java2d.noddraw" value="true"/> 16 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing GLCanvas and GLJPanel • GLCanvas: heavyweight AWT widget for OpenGL rendering ─ Best performance (hardware accelerated) ─ Works in most GUI situations ─ See this article on mixing lightweight and heavyweight widgets successfully: http://java.sun.com/products/jfc/tsc/articles/mixing/ • JPopupMenu. setLightweightPopupEnabled(false); ─ To get Swing menus to overlap GLCanvas 17 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing GLCanvas and GLJPanel • GLJPanel: lightweight Swing widget for complete compatibility with Swing UIs ─ JInternalFrames • Currently not hardware-accelerated ─ Poor performance • Investigating using OpenGL pbuffers to implement GLJPanel ─ Faster, but still not fast enough ─ Still has texture readback • Experimental work underway to integrate better with Java 2D API and “JFC/Swing” 18 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing Rendering and animation options • Automatic redraws initiated by the AWT ─ For static scenes • Call repaint() in animation thread • Use Animator class or start your own thread and call GLDrawable.display() directly ─ Most efficient for games ─ Allows optimized OpenGL context handling on some platforms ─As efficient as single-threaded C code 19 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing Multithreading • AWT events like mouse and keyboard events are delivered on AWT event queue thread • Not allowed / possible to make OpenGL calls directly inside these listeners ─ Though you can schedule or force a redraw • Instead, pass information between these threads and any animation threads via member data ─ Use appropriate synchronization ─ Read data exactly once in your display() method ─ Avoids flickering and other artifacts during mouse interaction 20 | 2004 JavaOneSM Conference | Session TS-1361 Using JOGL With AWT and Swing Examples • See demos at http://jogl-demos.dev.java.net/ for examples of animation, interaction, and advanced features 21 | 2004 JavaOneSM Conference | Session TS-1361 Agenda Introduction JSR Update Using JOGL With AWT and Swing Techniques for Application Development ─ Scene graphs and game engines ─ Object picking ─ Shadows Optimizing JOGL Applications Demos ConcSM lusion 22 | 2004 JavaOne Conference | Session TS-1361 Scene Graphs and Game Engines Overview • Higher-level, typically object-oriented layer for applications to build on top of • Often have hierarchical structure ─ Good for representing character animation • Use OpenGL or similar API at the bottom ─ Ones discussed here use JOGL • Look for extensibility ─ Ability to call out to OpenGL from within scene graph to implement leading-edge effects 23 | 2004 JavaOneSM Conference | Session TS-1361 Scene Graphs and Game Engines Examples • Xith3D: http://www.xith.org/ ─ General-purpose scene graph, but focused on gaming and high performance ─ Designed to be nearly identical to Java 3D™ APIs ─ Supports leading-edge functionality like shadow volumes and vertex and fragment programs • Aviatrix3D: http://aviatrix3d.j3d.org/ ─ Focused on visualization market ─ Minimal API design ─ Also supports vertex and fragment programs 24 | 2004 JavaOneSM Conference | Session TS-1361 Scene Graphs and Game Engines Examples • OpenMind: http://www.mind2machine.com/ ─ 3D game engine ─ Built-in support for 3D Studio Max ASE format ─ Supplies tool chain for developers 25 | 2004 JavaOneSM Conference | Session TS-1361 Scene Graphs and Game Engines Demo • Abdul Bezrati (a.k.a. “Java Cool Dude”) ─ Xith3D demos ─ http://xith.org/demo/JavaCoolDude.php 26 | 2004 JavaOneSM Conference | Session TS-1361 Object Picking Using the selection buffer • Interactive applications require the ability to pick objects in 3D • OpenGL provides a built-in mechanism for object selection ─ Special rendering mode • User supplies storage for results and sets up special “pick” matrix ─ View volume centered around cursor • Any objects rendered into this view volume are reported to the user 27 | 2004 JavaOneSM Conference | Session TS-1361 Object Picking Using the selection buffer • Set up selection buffer ─ IntBuffer buf = BufferUtils.newIntBuffer(1024); gl.glSelectBuffer(buf.capacity(), buf); • Switch into selection mode ─ gl.glRenderMode(GL.GL_SELECT); ─ Color buffer is frozen at this point and not updated until selection mode is exited • Initialize name stack ─ gl.glInitNames(); • Set up pick matrix ─ glu.gluPickMatrix(...); 28 | 2004 JavaOneSM Conference | Session TS-1361 Object Picking Using the selection buffer • Render objects, assigning names to them ─ int objectId = ...; gl.glPushName(objectId); renderObject(gl); gl.glPopName(); • Switch out of selection mode ─ int numHits = gl.glRenderMode(GL.GL_RENDER); • Process hits ─ int idx = 0; while (idx < numHits) { int hit = buf.get(idx++); ... } 29 | 2004 JavaOneSM Conference | Session TS-1361 Object Picking Demo • Selection buffer demo (courtesy Thomas Bladh) ─ http://www.sm.luth.se/csee/courses/smd/159/ TestPrograms/Picking.java 30 | 2004 JavaOneSM Conference | Session TS-1361 Object Picking Using the selection buffer • Advantages ─ Easy to

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    62 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us