Download A Simple Talk on Java 3D

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
A Simple Talk on Java
3D
Presented by C.H. Chen on Jul. 6, 2004
Outlines
• Introduction
• Deployment of your
Development Environment
• Understanding Java 3D
• Demo
Introduction
Introduction
Introduction
• Flight simulators and medical-imaging
•
Developments in high-performance hardware led to developments
in high-performance graphics APIs— beginning in the 1970s with
Siggraph’s CORE API, continuing in the 1980s with SGI’s OpenGL
and on through today with MS’s Direct3D and Java 3D.
• 3D Graphic
• Java 3D: high-level graphic-programming API
write once run anywhere
simplifying the complex graphics
Introduction
• Four major goals of Java 3D APIs
-application portability
-hardware independence
-performance scalibility
-ability to produce 3D graphics over a network
Introduction
Introduction
• Features of Java 3D for development
- Behavior
- Fog
- Geometry
- Light
- Sound
- Texture
Deployment of your
Development Environment
• Requirement:
J2SE or J2EE, OpenGL or Direct X
• Java 3D API 1.3.1 (current version)
• http://java.sun.com/product/java-media/3D
• other IDE :
eg. Java 3D NetBeans Module 1.0 beta
Deployment of your
Development Environment
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
• Scene : Virtual Universe
• VirtualUniverse
• Scene Graph
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
• Partial subclasses of
- Group : BranchGroup, Switch
TransformGroup …
- Leaf : Behavior, Light, Shape3D
ViewPlatform …
- NodeComponent : Appearance, Material
Texture …
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
• SimpleUniverse class
creates a scene graph including:
VirtualUniverse, locale objects,
complete view branch graph
• View branch graph
ViewingPlatform, viewer
Understanding Java 3D
Understanding Java 3D
Understanding Java 3D
Sample code tracing
// Java extension packages
import javax.swing.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
// Java3D utility packages
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
public class Java3DWorld extends Canvas3D {
private Appearance appearance; // 3D object's appearance
private Light ambientLight; // ambient scene lighting
private Box shape; // 3D object to manipulate
private Color3f lightColor; // Light color
private Light directionalLight;
private Material material; // 3D objects color object
private SimpleUniverse simpleUniverse; // 3D scene environment
private TextureLoader textureLoader; // 3D object's texture
// holds 3D transformation information
private TransformGroup transformGroup;
private String imageName; // texture image file name
// Java3DWorld constructor
public Java3DWorld( String imageFileName ) {
super( SimpleUniverse.getPreferredConfiguration() );
imageName = imageFileName;
Sample code tracing
// create SimpleUniverse ( 3D Graphics environment )
simpleUniverse = new SimpleUniverse( this );
// set viewing distance for 3D scene
ViewingPlatform viewPlatform =
simpleUniverse.getViewingPlatform();
viewPlatform.setNominalViewingTransform();
// create 3D scene
BranchGroup branchGroup = createScene();
5
// attach BranchGroup to SimpleUniverse
simpleUniverse.addBranchGraph( branchGroup );
} // end Java3DWorld constructor
// create 3D scene
public BranchGroup createScene()
{
BranchGroup scene = new BranchGroup();
// initialize TransformGroup
transformGroup = new TransformGroup();
// set TransformGroup's WRITE permission
transformGroup.setCapability(
TransformGroup.ALLOW_TRANSFORM_WRITE );
transformGroup.setCapability(
TransformGroup.ALLOW_TRANSFORM_READ );
1
// add TransformGroup to BranchGroup
scene.addChild( transformGroup );
// create BoundingSphere
BoundingSphere bounds = new BoundingSphere(
new Point3d( 0.0f, 0.0f, 0.0f ), 100.0 );
appearance = new Appearance(); // create object appearance
material = new Material(); // create texture matieral
appearance.setMaterial( material );
String rgb = new String( "RGB" );
// load texture for scene object
textureLoader = new TextureLoader(
Java3DWorld.class.getResource( imageName ), rgb, this );
// set capability bits for enabling texture
textureLoader.getTexture().setCapability(
Texture.ALLOW_ENABLE_WRITE );
// initial texture will not show
textureLoader.getTexture().setEnable( false );
// set object's texture
appearance.setTexture( textureLoader.getTexture() );
Box.GENERATE_NORMALS | Box.GENERATE_TEXTURE_COORDS,
appearance );
// add geometry to TransformGroup
2
transformGroup.addChild( shape );
// initialize Ambient lighting
ambientLight = new AmbientLight();
ambientLight.setInfluencingBounds( bounds );
// initialize directionalLight
directionalLight = new DirectionalLight();
lightColor = new Color3f(); // initialize light color
// set initial DirectionalLight color
directionalLight.setColor( lightColor );
// set capability bits to allow DirectionalLight's
// Color and Direction to be changed
directionalLight.setCapability(
DirectionalLight.ALLOW_DIRECTION_WRITE );
directionalLight.setCapability(
DirectionalLight.ALLOW_DIRECTION_READ );
directionalLight.setCapability(
DirectionalLight.ALLOW_COLOR_WRITE );
directionalLight.setCapability(
DirectionalLight.ALLOW_COLOR_READ );
directionalLight.setInfluencingBounds( bounds );
3
// add light nodes to BranchGroup
scene.addChild( ambientLight );
scene.addChild( directionalLight );
// initialize rotation behavior
MouseRotate rotateBehavior = new MouseRotate();
rotateBehavior.setTransformGroup( transformGroup );
rotateBehavior.setSchedulingBounds( bounds );
// initialize translation behavior
MouseTranslate translateBehavior = new MouseTranslate();
translateBehavior.setTransformGroup( transformGroup );
translateBehavior.setSchedulingBounds(
new BoundingBox( new Point3d( -1.0f, -1.0f, -1.0f ),
new Point3d( 1.0f, 1.0f, 1.0f ) ) );
// initialize scaling behavior
MouseZoom scaleBehavior = new MouseZoom();
scaleBehavior.setTransformGroup( transformGroup );
scaleBehavior.setSchedulingBounds( bounds );
4
// add behaviors to BranchGroup
scene.addChild( scaleBehavior );
scene.addChild( rotateBehavior );
scene.addChild( translateBehavior );
scene.compile();
return scene;
} // end method createScene
Scene Graph of sample code
5
BG
3
1
L
4
B
TG
2
S
Appearance
Geometry
Demo
• Java 3D demo
• Java 3D Fly Through v 1.0
References
• Sun Microsystem Java 3D
http://java.sun.com/products/java-media/3D/
• Java 3D Tutorial
• Java 3D Scene Graph Editor
http://java3d.netbeans.org/
• http://java.sun.com/products/javamedia/3D/collateral/presentation/index.html
• Sample code: Advanced Java how to program
Related documents