This essay has been submitted by a student. This is not an example of the work written by our professional essay writers.
Java 3D developed by Sun Microsystems, is a high-level 3D graphics API for quick and easy development for programmers by creating, rendering, and manipulating a 3D scene graph. The scene graph development is more focus on design then rendering and supports more sophisticated graphics elements. Since its emergence in 90's its scope with interaction rich www applications was noticed. In this paper we will try to deduce the scope and limitations of Java 3D for development of web applications with interactions.
3D, high-level language, virtual reality, www, OOP, VRML, OpenGL
For writing this topic we have chosen Java 3D API as possible candidate for developing 3D graphics based application based on interaction and to some extend their availability over web. There are many points in favor of choosing this as topic, first of all our background as graphics designer/animator as well as developer, interest in 3D modeling and animation and most of all trying to collect information if Java has done some serious work in development of API which can serve equal to OpenGL when developing graphics applications. What would be pros and cons of using Java 3D API over other APIs and what benefits would it have over development of interactivity if blend with Virtual Reality. The use of scene graphs edge in modeling over VRML. Our argument will be if you are developing a 3D application which needs some interactivity over internet, would use of Java 3D as developing tool is recommended so to utilize the power of Java as OOP language for better design of code and system or we should stick to other more common developing tools. We will try to put our focus on argument but due to nature of the topic some background information to interest reader might also be included. We are assuming that reader has background of computer science, good idea of development process of 3D and vector graphics and programming languages specially Java. The paper is structure by providing the background on Java 3D API, features, comparison with OpenGL, its implementation in real world application and then discussion and conclusion.
Creating graphics was always was a problem from start of computers even for creating 2D graphics basic shapes like line, circle, ellipse etc are used. 3D make it more complicated so new shapes like cylinder, cube and sphere could be use for better results.
The purpose of using these shapes is speed up rendering especially if developing a virtual world on large scale. To create 3D applications, many designing tools would be required depending on requirement. The most common used tool for programming these applications is OpenGL mostly available in form of graphics libraries.
Since 1990, the emergence of improved and cheep computer hardware which can process 2D and 3D applications easily on a PC, doors were open to rich application which can utilize that power for graphics and interactivity. What better in interactivity then animated graphics? As a human we like to prefer touch and feel and are comfortable with things which have more depth. With emergence of WWW there was always a need for high quality animated graphics on web. But due to size and limitation of bandwidth it was not possible.
Since early 90's, many large organizations were trying to develop some API's for scene graph; based on new object oriented concepts and specially in Java. In 1996 Sun and its partners decided to collaborate and develop a single API capable of developing multimedia applications with independency of platform. Later the project was groomed and named as Java 3D [2,5,7] with most of the development and production under Sun Microsystems.
Developing interactive 3D graphics was a long-standing problem, Sun Microsystems was not a major player in the 3D graphics domain, although its hardware has long supported interactive 3D rendering. OpenGL was and is a leading production standard for interactive 3D graphics, developed by Silicon Graphics (SGI). It was designed for cross-platform rendering and almost all major graphics rendering cards, systems' applications and operating systems have support for that[2,3]. The real problem was the OpenGL has been developed under C language, the popular and powerful enough language at that time to develop. So for java there was no connectivity.
When Sun started designing Java 3D, they wanted to put the Java's biggest strength i.e. being an object-oriented programming language instead a procedural language like C. In OpenGL describing 3d scene would contain lists of line, points where as sun wanted Java 3D to describe same as group of objects. They not only applied OOP principles to the graphics domain, but also put scene optimization.
But still Java 3D relies on OpenGL or DirectX to perform local rendering, instead the application logic, interactions and description of 3D scene reside in Java code .
This allows developers of Java 3D to produce graphics rich applications with object-orientation as well as independency of development platform. Numerous applications for science, education, business and medical field are being developed on this technology.
To provide more 3D interactive contact to end user Java 3D provides the tool necessary for Java developers to write applets and applications. Java 3D is designed with performance in mind, by optimizing the scene graphs at high level and at the low level by being built on top of OpenGL or DirectX Graphics [6,7].
The Java 3D API is an interface for writing programs to display and interact with 3D graphics. As standard extension of Java 2 JDK, it has a collection of high-level constructs for creation of structures and geometric objects and their rendering. Java 3D also has the functionality to create visualization, animations and interaction for 3D graphics applications. It allows developers to develop the program within Java. since in any 3D application the rendering code will be small portion of the whole code it is good to have all application and interface code in cross platform language with extra benefit of OOP such as Java.
As Java 3d is client-side programming with concept of write once run anywhere, Java has achieved success by providing developers support to write cross-platform applications. As part of Java Media suite of APIs, making it available on a wide range of platforms. It also integrates well with the Internet as applets and software applications using internet are nowadays have access to the entire set of Java classes.
The Java 3D API draws its ideas from existing graphics APIs as well as from new technologies for low-level OpenGL and Direct3D and for high-level constructs.
It accomplishes this in part by using a scene graph-based 3D graphics model. To help novices without much graphics or multimedia programming experience and developing application with 3D, in contrast to lower-level, procedural 3D APIs like OpenGL. These API's are more optimize for speed and control over rendering process.
Java 3D also introduces some uncommon concepts such as 3D spatial sound [6,9] for a deeper sound experience for the user as it can easily make use of other Java APIs, such as Java Media Framework (JMF) and Java Advanced Imaging (JAI). By allowing the developer illustrate any 3D scene using basic objects and defining the objects used in design like transformations, materials, lights etc, program can be easier to write, debug and reuse.
The basic technique in implementing Java 3D is to construct individual graphics objects separately and connect them together into a treelike structure called a scene graph. Scene graph can enclose complete description a virtual world or part of it. [ref]. The scene graph is used to group shapes with common properties and carry out view culling, occlusion culling, level of detail selection, execution culling, and behavior pruning [REF]. the optimizations are to be coded at lower-level and directly with is still a limitation but Java 3D utilizes Java's multithreading capabilities for parallel traversal and rendering of graphics which is useful for optimizations.
Java 3d and web
As describe earlier, due to swift growth of the World Wide Web in last two decades there is now scope of emergence of interactive virtual and mixed reality applications using rich graphics in 2D and 3D. Most of the applications in this domain are developed using VRML i.e. virtual reality modeling language as well as the 3D API extension of the Java language the Java 3D .
Regardless of the programming language used, any Web based 3D application utilized the browse for processing under client-server approach. The web application based on Java including Java3D API will invoke the Java3D API when calling 3D functionality. This process will call the lower level routines in libraries such as DirectX or OpenGL. Hence the 3D plug-in has to be embedded by application into a 2D browser such as Microsoft Internet Explorer or Fire-Fox. By doing this the user can explore a virtual 3D world interaction is possible with virtual environment. In VRML, plug-in are provided for interactions like fly over, walk etc. In Java 3D there is no standard set of plug-ins, hence the programmer has to develop customize set of navigation tools for user. This is a shortfall as programming effort would be increased in some way but on other hand this would allow developing more useful interaction customized for specific need, with more flexibility and connect with exotic devices like wands, data gloves, and headsets .
Both VRML and Java 3D are capable of transmitting complex 3D architectures across multiple networks even on low bandwidth. The information like texture images, video, and sounds can easily be transmitted over one platform to other.
Some new developers are now moving from VRML into Java 3D, as they require more flexibility offered in an API but not wanting to learn complex programming language syntax. As they only are 3D content creation specialists this type of audience, Java 3D plays an important role by allowing them to concentrate on logic and content creation then writing and debugging complex code .
Conclusion and discussion
We have now discussed the main features of Java 3D, including its pros and cons, its unique features. Java 3D also has reasonably good graphic performance through the use of OpenGL/Direct3D and 3D graphic hardware acceleration with multi-threading. From the Java 3D application point of view the rendering pipeline is not relevant as it neither anticipates nor directly supports every possible 3D need. Instead it provides support for adding those features through Java code so it is mostly independent of the rendering pipeline but it can use Direct3D as default if there is no other rendering pipeline available.
Developing 3D rich interactive web application is much easier with that approach as many web browsers are now developing direct support for 3D applications within main browser. With portability and Internet support as main advantages, it can be used in a variety of platforms and operating systems with applications in scientific, medical, and information visualization. In particular, it is extensively used in simulation, computer-aided design (CAD), and geographical information systems.
We have also examined the criticisms of Java 3D as being too high-level, not being used for large games, and having a lack of support, some are true but with benefits it has to offer and with new advancements by Sun like Java FX and Java One most of these problems are addressed. The GUI development is mostly carried out by Java Swing and its all-Java, or lightweight, components but as Java 3D is heavyweight component they don't mix well in the same container objects and windows.
With Sun's emphasis on client technologies the new rich content applications for mobile, set-top, and desktop devices is created known as Java FX. Its initial focus will be 3D effects, casual games, and simple 3D viewing applications.
The verdict is that if you are concentration on a web based interactive 3D rich application you might consider developing it in Java 3D for reasons mentioned above but still OpenGL has greater superiority over Java 3D API in local rendering and specially in game development area. Java 3D has lot to improve though they are trying to up the bar by integrating more features in support [6, 8].