310 likes | 504 Views
INTRODUCTION TO JAVA 3D. Martin Č adík Czech Technical University in Prague, Czech Republic. Content. Overview Scene graph Java 3D classes Simple application Describing objects Groups, transforms Behaviors, interpolators, picking Lighting, Sound. What Is Java3D?. API
E N D
INTRODUCTION TO JAVA 3D Martin Čadík Czech Technical University in Prague, Czech Republic
Content • Overview • Scene graph • Java 3D classes • Simple application • Describing objects • Groups, transforms • Behaviors, interpolators, picking • Lighting, Sound
What Is Java3D? • API • Applications or Applets • “Write once, run anywhere” • platform independent (IBM AIX, HP-UX, Linux, SGI IRIX, Solaris/Sparc, Windows) • display environments • higher level API • objects instead of vertices • content instead of rendering process • scalable • scene graph - based
Java JRE SDK Java 3D JRE SDK OpenGL DirectX Code examples in distribution Applications scientific visualization, animation, web design, simulations, virtual world construction (CAVE), training, games, design automation Java3D - Overview
Java3D Scene Graph • VirtualUniverse • to contain all 3D data • typically one per application • SimpleUniverse • Locale object • View • describes how to view 3D content • multiple views per universe • View Platform (movable) • Content Branch • describes 3D content
Java 3D Renderer • Canvas 3D • surface onto which a View renders • one canvas per view • there can be multiple canvases per app while (true) { Process input if (exit request)break Check for collisions Perform behaviors Start playing sounds Traverse scene graph and render objects } Cleanup
Java 3D Classes • javax.media.j3d package javax.media.j3d.VirtualUniverse (java.lang.Object) Enumeration getAllLocales( ) javax.media.j3d.Locale VirtualUniverse getVirtualUniverse( ) void addBranchGraph( Branchgroup branchGroup ) removeBranchGraph( Branchgroup branchGroup ) void Enumeration getAllBranchGraphs( ) javax.media.j3d.SceneGraphObject Capabilities (read/write transforms, geometry coords...) javax.media.j3d.Node javax.media.j3d.NodeComponent
Java 3D Classes javax.media.j3d.Node • Shapes, Groups, Sounds, Lights, etc. • parent node • location (local, VWorld transform) • bounding volume (automatical computation) javax.media.j3d.NodeComponent • attributes • Shape geometry, Shape appearance, Shape texture, etc. • javax.vecmath package javax.vecmath.Tuple3d Vector3d Point3d, Color3d, etc.
Coordinate System, Elements • Coordinate system • Right-handed • +X is to the right • +Y is up • +Z is towards the viewer • Angles in radians • Distance in meters • Elements in a Geometry • Coordinates • Normals • Colors • TextureCoordinates
Simple Java3D Application • Construct view branch • Canvas3D • SimpleUniverse • VirtualUniverse, Locale, BranchGroup, TransformGroup, ViewPlatform, View • Construct content branch • BranchGroup • TransformGroup • Shape3D, Light, Sound... • Behavior • SimpleApp3D • code
Shape3D • Fundamental mean of describing object javax.media.j3d.Shape3D (Leaf) • Geometry void setGeometry(Geometry geometry) • Appearance void setAppearance(Appearance appearance)
Geometry javax.media.j3d.Geometry (NodeComponent) • GeometryArray • LineArray, PointArray, TriangleArray, QuadArray • Indexed~ • Stripped versions • Text3D javax.media.j3d.Text3D • example • Raster • raster image
Appearance javax.media.j3d.Appearance (NodeComponent) • Specifies how to render Geometry sibling • Color (intrinsic) and shading (flat, Gouraud) • ColoringAttributes • Material • Transparency • TransparencyAttributes • Line, point, polygon attributes • LineAttributes, PointAttributes, PolygonAttributes • Rendering control • Texture mapping • example
Loader creates scene graph elements from a file com.sun.j3d.loaders only the interface included in Java 3D Usage import loader create loader object Scene variable load file insert Scene into the scene graph Available loaders 3DS, COB, DEM, DXF, IOB, LWS, NFF, OBJ, PDB, PLAY, SLD, VRT, VTK, WRL Loading content
Grouping • exactly one parent, arbitrary children javax.media.j3d.Group (Node) BranchGroup, OrderedGroup, SharedGroup (Link), Switch, TransformGroup • child rendering order determines Java 3D • can perform sorting for better rendering efficiency • BranchGroups • can be attached to Locale -->it makes it live --> constrains by capabilities • can be compiled
Transforming • world coordinate system TransformGroup • new coordinate system relative to parent • transformation accumulate as graph is traversed Transform3D (Object) • 4 x 4 matrix of doubles - Matrix4d • translate, rotate, scale, shear • must be affine (no perspective) • helper methods • setIdentity, rotX.., setScale, setTranslation, setRotation, etc.
Texture mapping • Appearance node Texture2D (abstract Texture (NodeComponent))- image textures, example Texture3D - volume textures • Texture format • Intensity • Luminance, Alpha • RGB, RGBA • TextureAttributes (NodeComponent) • Mode: Blend, Decal, Modulate, Replace • Transform • Perspective correction
Behaviors javax.media.j3d.Behavior • code to run (processStimulus) • wakeup conditions • frame or milliseconds have elapsed • AWT event • transform change • collision, view platform or sensor is close • scheduling bounds • activation radius intersects scheduling bounds • runs only when necessary • common error - forgetting scheduling bounds
Interpolators javax.media.j3d.Interpolator • simple behaviors • vary a parameter from starting to ending value • Time-to-Alpha mapping (Alpha (Object) <0,1>) • Alpha-to-Value mapping • transforms, colors, switches • Target (f.e. TransformGroup) PositionInterpolator, RotationInterpolator, ColorInterpolatorm, etc.
Input devices • joysticks • 6DOF devices (Magellan, Ultrasonic tracker...) • buttons • real / virtual javax.media.j3d.InputDevice interface • implementation maps physical detectors onto Sensor object(process input, return Sensor) javax.media.j3d.Sensor (Object) • SensorRead object • time-stamp • 6DOF value, button state
Picking features • selecting Shapes • interaction methods • designed for speed (Bounds) • Pick methods (Node) • take PickShape (PickPoint, PickRay, PickSegment) • return SceneGraph objects • f.e.: pickAll, pickAllSorted, pickClosest • example
javax.media.j3d.Light Types of lights ambient - AmbientLight directional - DirectionalLight point - PointLight attenuation spot - SpotLight Light attributes on/off color bounding volume and scope by default universal scope again: common error - forgetting scheduling bounds Lighting the environment
javax.media.j3d.Sound Sounds triggered continuous Sound types background - BackgroundSound point - PointSound attenuated cone - ConeSound attenuated Sound properties sound data (MediaContainer) AIF, AU, WAV looping parameters playback priority scheduling bounds Sounds
Misc • Background javax.media.j3d.Background • Fog • exponential, linear javax.media.j3d.Fog
Acceleration • Performance Guide • capability bits • compilation • bounds, activation radius • geometry by reference • unordered rendering
News • FastScript 3D • open source • web applets using Java3D via JavaScript and HTML • Java, Java3D required • fs.jar
Java 3D Thank you for your attention