I don't have this problem on my pc (ATI radeon 9000 mobile)

HTH,

Fausto Mancini

----- Original Message -----
From: "Rob Nugent" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, June 05, 2003 5:03 PM
Subject: [JAVA3D] Possible lighting bug


> Hi All,
>
> I've hit what may be a lighting bug, and I wonder if someone could try to
> confirm my results on their system please.
>
> The testcase is based on one of Florin's performance tests, and displays a
> number of cubes.
>
> Each cube is in its own TransformGroup. Each TransformGroup has a yellow
point
> light added to it. The PointLight is scoped to only affect that
TransformGroup.
>
> There are additionally a single ambient light and a single directional
light
> each with default (universal) scope.
>
> Each cube should therefore lit by exactly 3 lights (1 ambient, 1
directional, 1
> point). The trouble is on my system, that only some of the cubes are lit
by
> their point lights. See the attached JPEG for details.
>
> Can anyone say if they get the same problem - I'm trying to work out if
this is
> a general Java3D issue, or an issue with my machine/video card.
>
> Thanks !
>
> Rob
> --
>
>
> Rob Nugent
> Sun Microsystems, Southampton, UK
>
> [EMAIL PROTECTED]
>
> Tel: +44 (0) 1489 585503
> Fax: +44 (0) 1489 881363
>


----------------------------------------------------------------------------
----






----------------------------------------------------------------------------
----


> /*
>  * $Id: $
>  * c. 2002 publity AG
>  */
>
> import java.awt.BorderLayout;
> import java.awt.Color;
> import java.util.Enumeration;
>
> import javax.media.j3d.Canvas3D;
> import javax.media.j3d.BranchGroup;
> import javax.media.j3d.TransformGroup;
> import javax.media.j3d.Transform3D;
> import javax.media.j3d.BoundingSphere;
> import javax.media.j3d.Appearance;
> import javax.media.j3d.Material;
> import javax.media.j3d.AmbientLight;
> import javax.media.j3d.DirectionalLight;
> import javax.media.j3d.PointLight;
> import javax.media.j3d.Alpha;
> import javax.media.j3d.Behavior;
> import javax.media.j3d.WakeupCondition;
> import javax.media.j3d.WakeupOnElapsedFrames;
> import javax.media.j3d.Shape3D;
> import javax.media.j3d.QuadArray;
> import javax.media.j3d.Geometry;
> import javax.swing.JFrame;
> import javax.swing.JLabel;
> import javax.vecmath.Vector3f;
> import javax.vecmath.Point3d;
> import javax.vecmath.Color3f;
> import javax.vecmath.Point3f;
>
> import com.sun.j3d.utils.universe.SimpleUniverse;
> import com.sun.j3d.utils.timer.J3DTimer;
>
> /**
>  *
>  * @author  fherinean
>  * @version $Revision: $
>  */
> public class LTest extends JFrame
> {
>     private JLabel label = new JLabel("FPS: ");
>     private Appearance app = null;
>     private QuadArray geom = null;
>
>     // box size
>     float size = 0.1f;
>     Point3f lower = new Point3f(-size, -size, -size);
>     Point3f upper = new Point3f(size, size, size);
>
>     // normals for a simple box
>     float[] normals = {
>         0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
1.0f,
>         1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,
0.0f,
>         0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
0.0f, -1.0f,
>         -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f,
0.0f, 0.0f,
>         0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
0.0f, -1.0f, 0.0f,
>         0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
0.0f,
>     };
>
>     // box coords
>     float[] coords = {
>         lower.x, lower.y, upper.z, upper.x, lower.y, upper.z, upper.x,
upper.y, upper.z, lower.x, upper.y, upper.z,
>         upper.x, lower.y, upper.z, upper.x, lower.y, lower.z, upper.x,
upper.y, lower.z, upper.x, upper.y, upper.z,
>         upper.x, lower.y, lower.z, lower.x, lower.y, lower.z, lower.x,
upper.y, lower.z, upper.x, upper.y, lower.z,
>         lower.x, lower.y, lower.z, lower.x, lower.y, upper.z, lower.x,
upper.y, upper.z, lower.x, upper.y, lower.z,
>         lower.x, lower.y, lower.z, upper.x, lower.y, lower.z, upper.x,
lower.y, upper.z, lower.x, lower.y, upper.z,
>         upper.x, upper.y, lower.z, lower.x, upper.y, lower.z, lower.x,
upper.y, upper.z, upper.x, upper.y, upper.z,
>     };
>
>     public LTest()
>     {
>         super();
>
>         // create canvas & universe
>         Canvas3D c3d = new
Canvas3D(SimpleUniverse.getPreferredConfiguration());
>         SimpleUniverse universe = new SimpleUniverse(c3d);
>         universe.addBranchGraph(createBranchBroup());
>
>         // show the window
>         getContentPane().add(c3d, BorderLayout.CENTER);
>         getContentPane().add(label, BorderLayout.SOUTH);
>         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>         setSize(400, 400);
>         setVisible(true);
>     }
>
>     private BranchGroup createBranchBroup()
>     {
>         BranchGroup objRoot = new BranchGroup();
>         FPSCounter counter = new FPSCounter(6 * 6);
>         for (int k = 0; k < 6; k++)
>         {
>             for (int l = 0; l < 6; l++)
>             {
>                 Vector3f position = new Vector3f(-1.0f + k * 0.05f, -0.9f
+ 0.38f * l, -3.5f - (k * 0.3f));
>                 TransformGroup objSpin = new TransformGroup();
>
objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
>
objSpin.setCapabilityIsFrequent(TransformGroup.ALLOW_TRANSFORM_WRITE);
>                 objSpin.addChild(new Shape3D(getGeometry(1, 0.4f, 0.0f),
getAppearance()));
>                 counter.addTarget(objSpin, position);
>
>                 BoundingSphere bounds = new BoundingSphere(new
Point3d(0.0,0.0,0.0),
>                                 Double.POSITIVE_INFINITY);
>
>                 PointLight pl = new PointLight();
>                 pl.setCapability(PointLight.ALLOW_STATE_WRITE);
>                 pl.setColor(new Color3f(1.0f,1.0f,0.0f));
>                 Point3f pos = new Point3f(1.25f,0.0f, 0.0f);
>                 pl.setPosition(pos);
>
>                 pl.setAttenuation(0.0f,0.0f,0.015f);
>                 pl.setInfluencingBounds(bounds);
>                 objSpin.addChild(pl);
>                 pl.addScope(objSpin);
>
>                 objRoot.addChild(objSpin);
>             }
>         }
>         objRoot.addChild(counter);
>
>         BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0,
0.0), 1000.0);
>         Color3f ambientColor = new Color3f(0.3f, 0.3f, 0.3f);
>         AmbientLight ambientLightNode = new AmbientLight(ambientColor);
>         ambientLightNode.setInfluencingBounds(bounds);
>         objRoot.addChild(ambientLightNode);
>
>         //Skapa en direktionell ljusk�alla
>         Color3f light1Color = new Color3f(0.1f, 0.1f, 0.1f);
>         Vector3f light1Direction = new Vector3f(0.0f, 0.0f, -1.0f);
>         DirectionalLight light1 = new DirectionalLight();
>         light1.setInfluencingBounds(bounds);
>         light1.setDirection(light1Direction);
>         light1.setColor(light1Color);
>         objRoot.addChild(light1);
>
>         //objRoot.compile();
>         return objRoot;
>     }
>
>     private Appearance getAppearance()
>     {
>         if (app == null)
>         {
>             app = new Appearance();
>             Color3f ambient = new Color3f(Color.LIGHT_GRAY);
>             Color3f emissive = new Color3f(Color.BLACK);
>             Color3f diffuse = new Color3f(Color.LIGHT_GRAY);
>             Color3f specular = new Color3f(Color.WHITE);
>             Material material = new Material(ambient, emissive, diffuse,
specular, 10);
>             app.setMaterial(material);
>         }
>         return app;
>     }
>
>     private Geometry getGeometry(int count, float dx, float dy)
>     {
>         if (geom == null)
>         {
>             Point3f coord = new Point3f();
>             Vector3f norm = new Vector3f();
>             geom = new QuadArray(24 * count,
>                 QuadArray.COORDINATES | QuadArray.NORMALS);
>             int d = 0;
>             for (int i = 0; i < count; i++)
>             {
>                 Transform3D trans = new Transform3D();
>                 trans.setTranslation(new Vector3f(dx * i, dy * i, 0));
>                 int d1 = 0;
>                 for (int j = 0; j < 24; j++)
>                 {
>                     coord.set(coords[d1], coords[d1 + 1], coords[d1 + 2]);
>                     trans.transform(coord);
>                     geom.setCoordinate(d, coord);
>                     norm.set(normals[d1], normals[d1 + 1], normals[d1 +
2]);
>                     geom.setNormal(d++, norm);
>                     d1 += 3;
>                 }
>             }
>         }
>         return geom;
>     }
>
>     public static void main(String[] args)
>     {
>         new LTest();
>     }
>
>     public class FPSCounter
>         extends Behavior
>     {
>         private int nFrames;
>         private long startTime;
>         private final WakeupCondition w;
>         private int count = 0;
>         private Transform3D transform = new Transform3D();
>         private Alpha alpha = new Alpha(-1, 8000);
>         private Vector3f[] posArray;
>         private TransformGroup[] tgArray;
>         private int size = 0;
>
>         public FPSCounter(int size)
>         {
>             nFrames = 200;
>             this.size = size;
>             tgArray = new TransformGroup[size];
>             posArray = new Vector3f[size];
>             w = new WakeupOnElapsedFrames(0);
>         }
>
>         public void initialize()
>         {
>             count = 0;
>             setSchedulingBounds(new BoundingSphere(new Point3d(), 1000));
>             startTime = J3DTimer.getValue();
>             wakeupOn(w);
>         }
>
>         public void processStimulus(Enumeration criteria)
>         {
>             count++;
>             if (count == nFrames)
>             {
>                 long time = J3DTimer.getValue();
>                 label.setText("FPS: " + (1000000000.0f * nFrames / (time -
startTime)));
>                 startTime = time;
>                 count = 0;
>             }
>             transform.rotX(alpha.value() * Math.PI * 2);
>             for (int i = 0; i < size; i++)
>             {
>                 transform.setTranslation(posArray[i]);
>                 tgArray[i].setTransform(transform);
>             }
>             wakeupOn(w);
>         }
>
>         public void addTarget(TransformGroup tg, Vector3f position)
>         {
>             tgArray[count] = tg;
>             posArray[count++] = position;
>         }
>     }
> }
>

<<attachment: testResult.jpg>>

Reply via email to