Package javax.media.j3d
Class GraphicsContext3D
- java.lang.Object
-
- javax.media.j3d.GraphicsContext3D
-
public class GraphicsContext3D extends java.lang.Object
A GraphicsContext3D object is used for immediate mode rendering into a 3D canvas. It is created by, and associated with, a specific Canvas3D object. A GraphicsContext3D defines methods to set 3D graphics state and draw 3D geometric primitives. There are no public constructors of GraphicsContext3D. An application obtains a 3D graphics context object from the Canvas3D object that the application wishes to render into by using the getGraphicsContext3D method. A new graphics context is created if one does not already exist. A new GraphicsContext3D initializes its state variables to the following defaults:- Background object: null
- Fog object: null
- ModelClip object: null
- Appearance object: null
- List of Light objects: empty
- high-res coordinate: (0, 0, 0)
- modelTransform: identity
- AuralAttributes object: null
- List of Sound objects: empty
- buffer override: false
- front buffer rendering: false
- stereo mode:
STEREO_BOTH
Note that the drawing methods in this class are not necessarily executed immediately. They may be buffered up for future execution. Applications must call the
flush(boolean)
method to ensure that the rendering actually happens. The flush method is implicitly called in the following cases:- The
readRaster
method callsflush(true)
- The
Canvas3D.swap
method callsflush(true)
- The Java 3D renderer calls
flush(true)
prior to swapping the buffer for a double buffered on-screen Canvas3D - The Java 3D renderer calls
flush(true)
prior to copying into the off-screen buffer of an off-screen Canvas3D - The Java 3D renderer calls
flush(false)
after calling the preRender, renderField, postRender, and postSwap Canvas3D callback methods.
A single-buffered, pure-immediate mode application must explicitly call flush to ensure that the graphics will be rendered to the Canvas3D.
- See Also:
Canvas3D.getGraphicsContext3D()
-
-
Field Summary
Fields Modifier and Type Field Description static int
STEREO_BOTH
Specifies that rendering is done to both eyes.static int
STEREO_LEFT
Specifies that rendering is done to the left eye.static int
STEREO_RIGHT
Specifies that rendering is done to the right eye.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addLight(Light light)
Appends the specified light to this graphics context's list of lights.void
addSound(Sound sound)
Appends the specified sound to this graphics context's list of sounds.void
clear()
Clear the Canvas3D to the color or image specified by the current background node.void
draw(Geometry geometry)
Draw the specified Geometry component object.void
draw(Shape3D shape)
Draw the specified Shape3D leaf node object.void
flush(boolean wait)
Flushes all previously executed rendering operations to the drawing buffer for this 3D graphics context.java.util.Enumeration
getAllLights()
Retrieves the enumeration object of all the lights.java.util.Enumeration
getAllSounds()
Retrieves the enumeration object of all the sounds.Appearance
getAppearance()
Retrieves the current Appearance component object.AuralAttributes
getAuralAttributes()
Retrieves the current AuralAttributes component object.Background
getBackground()
Retrieves the current Background leaf node object.boolean
getBufferOverride()
Returns the current buffer override flag.Canvas3D
getCanvas3D()
Gets the Canvas3D that created this GraphicsContext3D.Fog
getFog()
Retrieves the current Fog leaf node object.boolean
getFrontBufferRendering()
Returns the current front buffer rendering flag.void
getHiRes(HiResCoord hiRes)
Retrieves the current HiRes coordinate of this context.Light
getLight(int index)
Retrieves the index selected light.ModelClip
getModelClip()
Retrieves the current ModelClip leaf node object.void
getModelTransform(Transform3D t)
Retrieves the current model transform.Sound
getSound(int index)
Retrieves the index selected sound.int
getStereoMode()
Returns the current stereo mode.void
insertLight(Light light, int index)
Inserts the specified light at the specified index location.void
insertSound(Sound sound, int index)
Inserts the specified sound at the specified index location.boolean
isSoundPlaying(int index)
Retrieves the sound playing flag.void
multiplyModelTransform(Transform3D t)
Multiplies the current model transform by the specified transform and stores the result back into the current transform.int
numLights()
Retrieves the current number of lights in this graphics context.int
numSounds()
Retrieves the current number of sounds in this graphics context.void
readRaster(Raster raster)
Read an image from the frame buffer and copy it into the ImageComponent and/or DepthComponent objects referenced by the specified Raster object.void
removeLight(int index)
Removes the light at the specified index location.void
removeSound(int index)
Removes the sound at the specified index location.void
setAppearance(Appearance appearance)
Sets the current Appearance object to the specified Appearance component object.void
setAuralAttributes(AuralAttributes attributes)
Sets the current AuralAttributes object to the specified AuralAttributes component object.void
setBackground(Background background)
Sets the current Background to the specified Background leaf node object.void
setBufferOverride(boolean bufferOverride)
Sets a flag that specifies whether the double buffering and stereo mode from the Canvas3D are overridden.void
setFog(Fog fog)
Sets the current Fog to the specified Fog leaf node object.void
setFrontBufferRendering(boolean frontBufferRendering)
Sets a flag that enables or disables immediate mode rendering into the front buffer of a double buffered Canvas3D.void
setHiRes(int[] x, int[] y, int[] z)
Sets the HiRes coordinate of this context to the location specified by the parameters provided.void
setHiRes(HiResCoord hiRes)
Sets the HiRes coordinate of this context to the location specified by the HiRes argument.void
setLight(Light light, int index)
Replaces the specified light with the light provided.void
setModelClip(ModelClip modelClip)
Sets the current ModelClip leaf node to the specified object.void
setModelTransform(Transform3D t)
Sets the current model transform to a copy of the specified transform.void
setSound(Sound sound, int index)
Replaces the specified sound with the sound provided.void
setStereoMode(int stereoMode)
Sets the stereo mode for immediate mode rendering.
-
-
-
Field Detail
-
STEREO_LEFT
public static final int STEREO_LEFT
Specifies that rendering is done to the left eye.- Since:
- Java 3D 1.2
- See Also:
setStereoMode(int)
, Constant Field Values
-
STEREO_RIGHT
public static final int STEREO_RIGHT
Specifies that rendering is done to the right eye.- Since:
- Java 3D 1.2
- See Also:
setStereoMode(int)
, Constant Field Values
-
STEREO_BOTH
public static final int STEREO_BOTH
Specifies that rendering is done to both eyes. This is the default.- Since:
- Java 3D 1.2
- See Also:
setStereoMode(int)
, Constant Field Values
-
-
Method Detail
-
getCanvas3D
public Canvas3D getCanvas3D()
Gets the Canvas3D that created this GraphicsContext3D.- Returns:
- the Canvas3D that created this GraphicsContext3D
-
setAppearance
public void setAppearance(Appearance appearance)
Sets the current Appearance object to the specified Appearance component object. The graphics context stores a reference to the specified Appearance object. This means that the application may modify individual appearance attributes by using the appropriate methods on the Appearance object. If the Appearance object is null, default values will be used for all appearance attributes - it is as if an Appearance node were created using the default constructor.- Parameters:
appearance
- the new Appearance object- Throws:
IllegalSharingException
- if the specified appearance refers to an ImageComponent2D that is being used by a Canvas3D as an off-screen buffer.
-
getAppearance
public Appearance getAppearance()
Retrieves the current Appearance component object.- Returns:
- the current Appearance object
-
setBackground
public void setBackground(Background background)
Sets the current Background to the specified Background leaf node object. The graphics context stores a reference to the specified Background node. This means that the application may modify the background color or image by using the appropriate methods on the Background node. The Background node must not be part of a live scene graph, nor may it subsequently be made part of a live scene graph-an IllegalSharingException is thrown in such cases. If the Background object is null, the default background color of black (0,0,0) is used to clear the canvas prior to rendering a new frame. The Background node's application region is ignored for immediate-mode rendering.- Parameters:
background
- the new Background object- Throws:
IllegalSharingException
- if the Background node is part of or is subsequently made part of a live scene graph.IllegalSharingException
- if the specified background node refers to an ImageComponent2D that is being used by a Canvas3D as an off-screen buffer.
-
getBackground
public Background getBackground()
Retrieves the current Background leaf node object.- Returns:
- the current Background object
-
setFog
public void setFog(Fog fog)
Sets the current Fog to the specified Fog leaf node object. The graphics context stores a reference to the specified Fog node. This means that the application may modify the fog attributes using the appropriate methods on the Fog node object. The Fog node must not be part of a live scene graph, nor may it subsequently be made part of a live scene graph-an IllegalSharingException is thrown in such cases. If the Fog object is null, fog is disabled. Both the region of influence and the hierarchical scope of the Fog node are ignored for immediate-mode rendering.- Parameters:
fog
- the new Fog object- Throws:
IllegalSharingException
- if the Fog node is part of or is subsequently made part of a live scene graph.
-
getFog
public Fog getFog()
Retrieves the current Fog leaf node object.- Returns:
- the current Fog object
-
setModelClip
public void setModelClip(ModelClip modelClip)
Sets the current ModelClip leaf node to the specified object. The graphics context stores a reference to the specified ModelClip node. This means that the application may modify the model clipping attributes using the appropriate methods on the ModelClip node object. The ModelClip node must not be part of a live scene graph, nor may it subsequently be made part of a live scene graph-an IllegalSharingException is thrown in such cases. If the ModelClip object is null, model clipping is disabled. Both the region of influence and the hierarchical scope of the ModelClip node are ignored for immediate-mode rendering.- Parameters:
modelClip
- the new ModelClip node- Throws:
IllegalSharingException
- if the ModelClip node is part of or is subsequently made part of a live scene graph.- Since:
- Java 3D 1.2
-
getModelClip
public ModelClip getModelClip()
Retrieves the current ModelClip leaf node object.- Returns:
- the current ModelClip object
- Since:
- Java 3D 1.2
-
setLight
public void setLight(Light light, int index)
Replaces the specified light with the light provided. The graphics context stores a reference to each light object in the list of lights. This means that the application may modify the light attributes for any of the lights using the appropriate methods on that Light node object. None of the Light nodes in the list of lights may be part of a live scene graph, nor may they subsequently be made part of a live scene graph - an IllegalSharingException is thrown in such cases.- Parameters:
light
- the new lightindex
- which light to replace- Throws:
IllegalSharingException
- if the Light node is part of or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Light object is null.
-
insertLight
public void insertLight(Light light, int index)
Inserts the specified light at the specified index location.- Parameters:
light
- the new lightindex
- at which location to insert- Throws:
IllegalSharingException
- if the Light node is part of or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Light object is null.
-
removeLight
public void removeLight(int index)
Removes the light at the specified index location.- Parameters:
index
- which light to remove
-
getLight
public Light getLight(int index)
Retrieves the index selected light.- Parameters:
index
- which light to return- Returns:
- the light at location index
-
getAllLights
public java.util.Enumeration getAllLights()
Retrieves the enumeration object of all the lights.- Returns:
- the enumeration object of all the lights
-
addLight
public void addLight(Light light)
Appends the specified light to this graphics context's list of lights. Adding a null Light object to the list will result in a NullPointerException. Both the region of influence and the hierarchical scope of all lights in the list are ignored for immediate-mode rendering.- Parameters:
light
- the light to add- Throws:
IllegalSharingException
- if the Light node is part of or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Light object is null.
-
numLights
public int numLights()
Retrieves the current number of lights in this graphics context.- Returns:
- the current number of lights
-
setHiRes
public void setHiRes(int[] x, int[] y, int[] z)
Sets the HiRes coordinate of this context to the location specified by the parameters provided. The parameters x, y, and z are arrays of eight 32-bit integers that specify the high-resolution coordinates point.- Parameters:
x
- an eight element array specifying the x positiony
- an eight element array specifying the y positionz
- an eight element array specifying the z position- See Also:
HiResCoord
-
setHiRes
public void setHiRes(HiResCoord hiRes)
Sets the HiRes coordinate of this context to the location specified by the HiRes argument.- Parameters:
hiRes
- the HiRes coordinate specifying the a new location
-
getHiRes
public void getHiRes(HiResCoord hiRes)
Retrieves the current HiRes coordinate of this context.- Parameters:
hiRes
- a HiResCoord object that will receive the HiRes coordinate of this context
-
setModelTransform
public void setModelTransform(Transform3D t)
Sets the current model transform to a copy of the specified transform. A BadTransformException is thrown if an attempt is made to specify an illegal Transform3D.- Parameters:
t
- the new model transform- Throws:
BadTransformException
- if the transform is not affine.
-
multiplyModelTransform
public void multiplyModelTransform(Transform3D t)
Multiplies the current model transform by the specified transform and stores the result back into the current transform. The specified transformation must be affine.- Parameters:
t
- the model transform to be concatenated with the current model transform- Throws:
BadTransformException
- if the transform is not affine.
-
getModelTransform
public void getModelTransform(Transform3D t)
Retrieves the current model transform.- Parameters:
t
- the model transform that will receive the current model transform
-
setSound
public void setSound(Sound sound, int index)
Replaces the specified sound with the sound provided. The graphics context stores a reference to each sound object in the list of sounds. This means that the application may modify the sound attributes for any of the sounds by using the appropriate methods on that Sound node object.- Parameters:
sound
- the new soundindex
- which sound to replace- Throws:
IllegalSharingException
- if the Sound node is part of or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Sound object is null.
-
insertSound
public void insertSound(Sound sound, int index)
Inserts the specified sound at the specified index location. Inserting a sound to the list of sounds implicitly starts the sound playing. Once a sound is finished playing, it can be restarted by setting the sound's enable flag to true. The scheduling region of all sounds in the list is ignored for immediate-mode rendering.- Parameters:
sound
- the new soundindex
- at which location to insert- Throws:
IllegalSharingException
- if the Sound node is part or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Sound object is null.
-
removeSound
public void removeSound(int index)
Removes the sound at the specified index location.- Parameters:
index
- which sound to remove
-
getSound
public Sound getSound(int index)
Retrieves the index selected sound.- Parameters:
index
- which sound to return- Returns:
- the sound at location index
-
getAllSounds
public java.util.Enumeration getAllSounds()
Retrieves the enumeration object of all the sounds.- Returns:
- the enumeration object of all the sounds
-
addSound
public void addSound(Sound sound)
Appends the specified sound to this graphics context's list of sounds. Adding a sound to the list of sounds implicitly starts the sound playing. Once a sound is finished playing, it can be restarted by setting the sound's enable flag to true. The scheduling region of all sounds in the list is ignored for immediate-mode rendering.- Parameters:
sound
- the sound to add- Throws:
IllegalSharingException
- if the Sound node is part of or is subsequently made part of a live scene graph.java.lang.NullPointerException
- if the Sound object is null.
-
numSounds
public int numSounds()
Retrieves the current number of sounds in this graphics context.- Returns:
- the current number of sounds
-
isSoundPlaying
public boolean isSoundPlaying(int index)
Retrieves the sound playing flag.- Parameters:
index
- which sound- Returns:
- flag denoting if sound is currently playing
-
setAuralAttributes
public void setAuralAttributes(AuralAttributes attributes)
Sets the current AuralAttributes object to the specified AuralAttributes component object. This means that the application may modify individual audio attributes by using the appropriate methods in the Aural-Attributes object.- Parameters:
attributes
- the new AuralAttributes object
-
getAuralAttributes
public AuralAttributes getAuralAttributes()
Retrieves the current AuralAttributes component object.- Returns:
- the current AuralAttributes object
-
setBufferOverride
public void setBufferOverride(boolean bufferOverride)
Sets a flag that specifies whether the double buffering and stereo mode from the Canvas3D are overridden. When set to true, this attribute enables thefrontBufferRendering
andstereoMode
attributes.- Parameters:
bufferOverride
- the new buffer override flag- Since:
- Java 3D 1.2
- See Also:
setFrontBufferRendering(boolean)
,setStereoMode(int)
-
getBufferOverride
public boolean getBufferOverride()
Returns the current buffer override flag.- Returns:
- true if buffer override is enabled; otherwise, false is returned
- Since:
- Java 3D 1.2
-
setFrontBufferRendering
public void setFrontBufferRendering(boolean frontBufferRendering)
Sets a flag that enables or disables immediate mode rendering into the front buffer of a double buffered Canvas3D. This attribute is only used when thebufferOverride
flag is enabled.Note that this attribute has no effect if double buffering is disabled or is not available on the Canvas3D.
- Parameters:
frontBufferRendering
- the new front buffer rendering flag- Since:
- Java 3D 1.2
- See Also:
setBufferOverride(boolean)
-
getFrontBufferRendering
public boolean getFrontBufferRendering()
Returns the current front buffer rendering flag.- Returns:
- true if front buffer rendering is enabled; otherwise, false is returned
- Since:
- Java 3D 1.2
-
setStereoMode
public void setStereoMode(int stereoMode)
Sets the stereo mode for immediate mode rendering. The parameter specifies which stereo buffer or buffers is rendered into. This attribute is only used when thebufferOverride
flag is enabled.-
STEREO_LEFT
specifies that rendering is done into the left eye. -
STEREO_RIGHT
specifies that rendering is done into the right eye. -
STEREO_BOTH
specifies that rendering is done into both eyes. This is the default.
Note that this attribute has no effect if stereo is disabled or is not available on the Canvas3D.
- Parameters:
stereoMode
- the new stereo mode- Since:
- Java 3D 1.2
- See Also:
setBufferOverride(boolean)
-
-
getStereoMode
public int getStereoMode()
Returns the current stereo mode.- Returns:
- the stereo mode, one of
STEREO_LEFT
,STEREO_RIGHT
, orSTEREO_BOTH
. - Since:
- Java 3D 1.2
-
clear
public void clear()
Clear the Canvas3D to the color or image specified by the current background node.
-
draw
public void draw(Geometry geometry)
Draw the specified Geometry component object.- Parameters:
geometry
- the Geometry object to draw.- Throws:
IllegalSharingException
- if the specified geometry is a Raster that refers to an ImageComponent2D that is being used by a Canvas3D as an off-screen buffer.
-
draw
public void draw(Shape3D shape)
Draw the specified Shape3D leaf node object. This is a convenience method that is identical to calling the setAppearance(Appearance) and draw(Geometry) methods passing the appearance and geometry component objects of the specified shape node as arguments.- Parameters:
shape
- the Shape3D node containing the Appearance component object to set and Geometry component object to draw- Throws:
IllegalSharingException
- if the Shape3D node is part of or is subsequently made part of a live scene graph.IllegalSharingException
- if the Shape3D node's Appearance refers to an ImageComponent2D that is being used by a Canvas3D as an off-screen buffer.
-
readRaster
public void readRaster(Raster raster)
Read an image from the frame buffer and copy it into the ImageComponent and/or DepthComponent objects referenced by the specified Raster object. All parameters of the Raster object and the component ImageComponent and/or DepthComponentImage objects must be set to the desired values prior to calling this method. These values determine the location, size, and format of the pixel data that is read. This method callsflush(true)
prior to reading the frame buffer.- Parameters:
raster
- the Raster object used to read the contents of the frame buffer- Throws:
java.lang.IllegalArgumentException
- if the image class of the specified Raster's ImageComponent2D is not ImageClass.BUFFERED_IMAGE.java.lang.IllegalArgumentException
- if the specified Raster's ImageComponent2D is in by-reference mode and its RenderedImage is null.java.lang.IllegalArgumentException
- if the the Raster's ImageComponent2D format is not a 3-component format (e.g., FORMAT_RGB) or a 4-component format (e.g., FORMAT_RGBA).IllegalSharingException
- if the Raster object is part of a live scene graph, or if the Raster's ImageComponent2D is part of a live scene graph.IllegalSharingException
- if the Raster's ImageComponent2D is being used by an immediate mode context, or by a Canvas3D as an off-screen buffer.- See Also:
flush(boolean)
,ImageComponent
,DepthComponent
-
flush
public void flush(boolean wait)
Flushes all previously executed rendering operations to the drawing buffer for this 3D graphics context.- Parameters:
wait
- flag indicating whether or not to wait for the rendering to be complete before returning from this call.- Since:
- Java 3D 1.2
-
-