Raffi,

Thanks for the bug report. We'll look into the problems.

-Charmaine Lee
Java3D Engineering Team



> MIME-Version: 1.0
> Date: Wed, 23 Aug 2000 12:46:39 -0400
> From: "Kasparian, Raffi J." <[EMAIL PROTECTED]>
> Subject: [JAVA3D] Immediate Mode Bugs
> To: [EMAIL PROTECTED]
>
> I am attaching a program that illustrates quite a number of problems I have
> encountered in the last couple of days working with immediate-mode
> rendering. There are three final variables (boolean immediate, int
> textureMode and boolean silentCrash) that can be changed to bring to light
> various issues. Edit and recompile as necessary.
>
> Bug 1:
> Make a selection from the Choice on top of the Applet to change the
> TextureAttributes of the Sphere's Appearance. If boolean immediate = false,
> the Appearance updates correctly. If boolean immediate = true there is no
> response to the Event.
>
> Bug2: (immediate = true)
> Appearance of sphere affects appearance of ColorCube. Change int textureMode
> between DECAL, MODULATE and BLEND recompiling each time to observe various
> problems.
>
> Bug 3 (immediate = true, textureMode = MODULATE):
> Sphere looks blue. What happened? compare to immediate = false.
>
> Bug 4 or possibly my confusion (immediate = true):
> Desired behavior: stationary light with rotating sphere.
> Actual behavior: Light rotates with sphere.
> If this is the correct behavior, it's certainly unintuitive and I haven't
> figured out a way to get the light to remain stationary. Perhaps someone
> could help me out here.
>
> Bug 5 (immediate = true, silentCrash = true)
> It seems to matter when a light is added to a GraphicsContext3D. If added to
> early, the program silently crashes. Set silentCrash = true to see the
> program hang before it has even brought up a window.
>
> Months ago, I wouldn't have considered using immediate mode. Later, I began
> trying immediate mode to see if I could avoid some of J3D's rendering
> problems by taking matters more into my own hands. But now it looks like
> immediate mode is more buggy than normal mode. :-(
>
> Dear Sun Java3D Team, I like Java3D a lot (I think). I'm looking forward to
> 1.2.1 and to its continuing improvement.
>
> Raffi
>
> /******Immediate.java*********/
> import java.applet.Applet;
> import java.awt.*;
> import java.awt.event.*;
> import com.sun.j3d.utils.applet.MainFrame;
> import com.sun.j3d.utils.geometry.*;
> import com.sun.j3d.utils.universe.*;
> import javax.media.j3d.*;
> import javax.vecmath.*;
> import com.sun.j3d.utils.image.*;
> import java.awt.image.*;
>
> public class Immediate extends Applet implements Runnable{
>         final boolean immediate = true;
>         final int textureMode =
>                 TextureAttributes.BLEND;
>                 //TextureAttributes.MODULATE;
>                 //TextureAttributes.DECAL;
>         final boolean silentCrash = false;
>
>         Transform3D T = new Transform3D();
>         double theta = 0;
>         Canvas3D canvas;
>         GraphicsContext3D gc;
>         ColorCube cube;
>         Sphere sphere;
>         Shape3D sphereShape;
>         PointLight pl;
>
>         public void render() {
>                 gc.clear();
>                 T.set( new Vector3d( -0.3, 0, 0 ) );
>                 gc.setModelTransform(T);
>                 gc.draw(cube);
>                 theta += 0.1;
>                 T.rotY( theta );
>                 T.setTranslation( new Vector3d( 0.3, 0, 0 ) );
>                 gc.setModelTransform(T);
>                 gc.draw(sphereShape);
>                 canvas.swap();
>         }
>         public void run() {
>                 while (true) {
>                         if( pl == null ){
>                                 pl = new PointLight();
>                                 pl.setPosition( 0, 0, 10 );
>                                 gc.addLight( pl );
>                         }
>                         render();
>                         Thread.yield();
>                 }
>         }
>         public Immediate() {
>                 setLayout(new BorderLayout());
>                 canvas = new
> Canvas3D(SimpleUniverse.getPreferredConfiguration());
>                 add("Center", canvas);
>
>                 SimpleUniverse u = new SimpleUniverse(canvas);
>                 u.getViewingPlatform().setNominalViewingTransform();
>                 gc = canvas.getGraphicsContext3D();
>
>                 Appearance app = new Appearance();
>                 app.setMaterial( new Material() );
>
>                 BufferedImage bi = new BufferedImage( 1, 1,
> BufferedImage.TYPE_INT_RGB );
>                 Graphics g = bi.getGraphics();
>                 g.setColor( Color.pink );
>                 g.fillRect( 0, 0, 1, 1 );
>                 ImageComponent2D im2D = new ImageComponent2D(
> ImageComponent.FORMAT_RGB, bi );
>                 Texture2D tex = new Texture2D( Texture.BASE_LEVEL,
> Texture.RGB, 1, 1 );
>                 tex.setImage( 0, im2D );
>                 app.setTexture( tex );
>
>                 final TextureAttributes ta = new TextureAttributes();
>                 ta.setCapability( ta.ALLOW_MODE_WRITE );
>                 ta.setTextureMode( textureMode );
>                 app.setTextureAttributes( ta );
>
>                 cube = new ColorCube(0.25);
>                 sphere = new Sphere(0.25f, Primitive.GENERATE_NORMALS |
> Primitive.GENERATE_TEXTURE_COORDS, app);
>                 sphereShape = sphere.getShape();
>
>                 final Choice choice = new Choice();
>                 choice.addItemListener( new ItemListener(){
>                         public void itemStateChanged( ItemEvent e ){
>                                 String s = choice.getSelectedItem();
>                                 if( s.equals( "BLEND" ) ){
>                                         ta.setTextureMode( ta.BLEND );
>                                 }else if( s.equals( "MODULATE" ) ){
>                                         ta.setTextureMode( ta.MODULATE );
>                                 }else if( s.equals( "DECAL" ) ){
>                                         ta.setTextureMode( ta.DECAL );
>                                 }
>                         }
>                 });
>                 choice.addItem( "BLEND" );
>                 choice.addItem( "MODULATE" );
>                 choice.addItem( "DECAL" );
>                 add( "North", choice );
>
>                 if( immediate ){
>                         canvas.stopRenderer();
>                         if( silentCrash ){
>                                 pl = new PointLight();
>                                 pl.setPosition( 10, 0, 10 );
>                                 gc.addLight( pl );
>                         }
>                         new Thread(this).start();
>                 }else{
>                         BranchGroup BG = new BranchGroup();
>                         BG.addChild( sphere );
>                         PointLight pl = new PointLight();
>                         pl.setPosition( 0, 0, 10 );
>                         pl.setInfluencingBounds( new BoundingSphere() );
>                         BG.addChild( pl );
>                         u.addBranchGraph( BG );
>                 }
>         }
>         public static void main(String[] args) {
>                 new MainFrame(new Immediate(), 256, 256);
>         }
> }
>

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to