Class GraphicsContext3D

java.lang.Object
javax.media.j3d.GraphicsContext3D

public class GraphicsContext3D extends 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 calls flush(true)
  • The Canvas3D.swap method calls flush(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:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Specifies that rendering is done to both eyes.
    static final int
    Specifies that rendering is done to the left eye.
    static final int
    Specifies that rendering is done to the right eye.
  • Method Summary

    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 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.
    Retrieves the enumeration object of all the lights.
    Retrieves the enumeration object of all the sounds.
    Retrieves the current Appearance component object.
    Retrieves the current AuralAttributes component object.
    Retrieves the current Background leaf node object.
    boolean
    Returns the current buffer override flag.
    Gets the Canvas3D that created this GraphicsContext3D.
    Retrieves the current Fog leaf node object.
    boolean
    Returns the current front buffer rendering flag.
    void
    Retrieves the current HiRes coordinate of this context.
    getLight(int index)
    Retrieves the index selected light.
    Retrieves the current ModelClip leaf node object.
    void
    Retrieves the current model transform.
    getSound(int index)
    Retrieves the index selected sound.
    int
    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
    Multiplies the current model transform by the specified transform and stores the result back into the current transform.
    int
    Retrieves the current number of lights in this graphics context.
    int
    Retrieves the current number of sounds in this graphics context.
    void
    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
    Sets the current Appearance object to the specified Appearance component object.
    void
    Sets the current AuralAttributes object to the specified AuralAttributes component object.
    void
    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
    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
    Sets the current ModelClip leaf node to the specified object.
    void
    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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Method Details

    • 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 light
      index - which light to replace
      Throws:
      IllegalSharingException - if the Light node is part of or is subsequently made part of a live scene graph.
      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 light
      index - at which location to insert
      Throws:
      IllegalSharingException - if the Light node is part of or is subsequently made part of a live scene graph.
      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 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.
      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 position
      y - an eight element array specifying the y position
      z - an eight element array specifying the z position
      See Also:
    • 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 sound
      index - which sound to replace
      Throws:
      IllegalSharingException - if the Sound node is part of or is subsequently made part of a live scene graph.
      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 sound
      index - at which location to insert
      Throws:
      IllegalSharingException - if the Sound node is part or is subsequently made part of a live scene graph.
      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 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.
      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 the frontBufferRendering and stereoMode attributes.
      Parameters:
      bufferOverride - the new buffer override flag
      Since:
      Java 3D 1.2
      See Also:
    • 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 the bufferOverride 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:
    • 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 the bufferOverride 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:
    • getStereoMode

      public int getStereoMode()
      Returns the current stereo mode.
      Returns:
      the stereo mode, one of STEREO_LEFT, STEREO_RIGHT, or STEREO_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 calls flush(true) prior to reading the frame buffer.
      Parameters:
      raster - the Raster object used to read the contents of the frame buffer
      Throws:
      IllegalArgumentException - if the image class of the specified Raster's ImageComponent2D is not ImageClass.BUFFERED_IMAGE.
      IllegalArgumentException - if the specified Raster's ImageComponent2D is in by-reference mode and its RenderedImage is null.
      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

      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