GraphicsContext3D.[add/set/insert/remove]Light(). The model transform
in place at the time [add/set/insert]Light() is called is used to
transform the light parameters. Region of influence and scoping are
ignored - all lights in the list apply to things that are drawn with draw().
Doug Twilleager
Sun Microsystems
>To: "'Doug Twilleager'" <[EMAIL PROTECTED]>
>Cc: "JAVA3D-INTEREST (E-mail)" <[EMAIL PROTECTED]>
>Subject: RE: [JAVA3D] Range ordering of transparent objects
>MIME-Version: 1.0
>
>Yep, I think I finally got it. I just had some problems computing the
>total xform above the shape. Now I think my problem is lighting... none
>of the objects are lit. How do I do the lighting?? I want these
>objects to be lit just as if they were still in the scene.
>
>-Lee
>
>> -----Original Message-----
>> From: Doug Twilleager [mailto:[EMAIL PROTECTED]]
>> Sent: Tuesday, April 24, 2001 2:32 PM
>> To: [EMAIL PROTECTED]
>> Subject: Re: [JAVA3D] Range ordering of transparent objects
>>
>>
>> What you are doing sounds like it should work. I have attached
>> a modified AppearanceMixed that uses setModelTransform(). It isn't
>> doing what you need it to do, but it gives you an example of
>> using it.
>>
>> Doug Twilleager
>> Sun Microsystems
>>
>> >MIME-Version: 1.0
>> >Subject: Re: [JAVA3D] Range ordering of transparent objects
>> >Comments: To: Doug Twilleager <[EMAIL PROTECTED]>
>> >To: [EMAIL PROTECTED]
>> >
>> >Doug,
>> >
>> >I appreciate your help. I've spent the morning doing some
>> rearranging
>> >and setting up for this. It's not quite working for me yet, but I'm
>> >pretty sure I know why.
>> >
>> >I have the transform from each Shape to virtual world
>> coordinates. But
>> >I think I may be missing the part of the transform to go from virtual
>> >world to eye coordinates. Can you give me what you consider
>> to be the
>> >set of steps to do this?
>> >
>> >For example:
>> >
>> > VW
>> > |
>> > Locale
>> > |
>> > ------------
>> > BG1 BG2
>> > | |
>> > G1 TG3
>> > | |
>> > TG1 ViewPlatform
>> > |
>> > TG2
>> > |
>> > S3D
>> >
>> >Let's say I want to draw the shape S3D in immediate mode
>> after hacking
>> >it off under G1. I compute the transform3D (xform1) for the
>> shape that
>> >includes TG1 and TG2, and I also get the transform from G1 to virtual
>> >world coordinates.
>> >
>> >Right now, my code looks something like:
>> >
>> > G1.getLocalToVworld(parentXform); // G1 to virtual world
>> > tempxform.mul(parentXform, xform1); // make S3D to
>> virtual world
>> > gc.setAppearance( S3D.getAppearance() );
>> > gc.setModelTransform( tempxform );
>> > gc.draw( shape );
>> >
>> >I use TG3 to move the view around in the scene. Am I
>> missing TG3 in my
>> >code? Actually, I guess I'm asking exactly how the argument to
>> >"setModelTransform" should be created.
>> >
>> >I swear if I get this going I'll put it in the FAQ... ;)
>> >
>> >-Lee
>> >
>> >> -----Original Message-----
>> >> From: Doug Twilleager [mailto:[EMAIL PROTECTED]]
>> >> Sent: Monday, April 23, 2001 11:18 PM
>> >> To: [EMAIL PROTECTED]
>> >> Subject: Re: [JAVA3D] Range ordering of transparent objects
>> >>
>> >>
>> >> Well, it looks like you have found a performance trap in
>> detach/attach
>> >> of OrderedGroup. Let's try this a different way. If we
>> examine the
>> >> order of operations in the Renderer thread, it looks like this:
>> >>
>> >> Canvas3D.preRender();
>> >> Render opaque objects
>> >> Render OrderedGroup objects
>> >> Canvas3D.renderField();
>> >> Rendertransparent objects
>> >> Canvas3D.postRender();
>> >> Swap buffers
>> >> Canvas3D.postSwap();
>> >>
>> >> Since you are trying to render a collection of objects in
>> a specific
>> >> order, and they fall into the OrderedGroup catagory, an alternative
>> >> approach is to render your ordered objects using the
>> GraphicsContext3D
>> >> in the Canvas3D.renderField() callback. This is pretty
>> much the same
>> >> place that OrderedGroup would have rendered them. And
>> since you have
>> >> references to all the objects, and are sorting them, it
>> would be easy
>> >> to render them there. As long as the geometry was pretty
>> >> much a one to
>> >> one relationship with OrderedGroup children, you won't loose any
>> >> performance from state sorting. This technique should work well.
>> >>
>> >> Doug Twilleager
>> >> Sun Microsystems
>> >>
>> >> >To: "'Doug Twilleager'" <[EMAIL PROTECTED]>
>> >> >Cc: "JAVA3D-INTEREST (E-mail)" <[EMAIL PROTECTED]>
>> >> >Subject: RE: [JAVA3D] Range ordering of transparent objects
>> >> >MIME-Version: 1.0
>> >> >
>> >> >Doug,
>> >> >I turned off compiling of my scene and placed a
>> BranchGroup above my
>> >> >OrderedGroup. Next, I changed all my child nodes to plain
>> >> Group nodes.
>> >> >Still was very slow. Then I turned off all reordering and
>> >> left *just*
>> >> >the detach/attach of my OrderedGroup. Still slow. Finally,
>> >> I did some
>> >> >profiling....
>> >> >
>> >> >long time1 = System.currentTimeMillis();
>> >> >for(i = 0; i < 5; i++)
>> >> >{
>> >> > myBranch.detach();
>> >> > myParent.addChild( myBranch );
>> >> >}
>> >> >long time2 = System.currentTimeMillis();
>> >> >System.out.println(" AVG TIME = " + ((float)(time2-time1)
>> * 0.2f) );
>> >> >
>> >> >AVG TIME = 46.0
>> >> >AVG TIME = 70.200005
>> >> >AVG TIME = 50.0
>> >> >AVG TIME = 74.200005
>> >> >AVG TIME = 146.2
>> >> >AVG TIME = 84.200005
>> >> >AVG TIME = 66.200005
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 66.200005
>> >> >AVG TIME = 264.4
>> >> >AVG TIME = 76.200005
>> >> >AVG TIME = 108.200005
>> >> >AVG TIME = 86.0
>> >> >
>> >> >These times are in milliseconds. Actually, I even changed
>> it to do a
>> >> >single attach/detach timing:
>> >> >
>> >> >AVG TIME = 70.0
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 60.0
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 841.0
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 151.0
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 140.0
>> >> >AVG TIME = 90.0
>> >> >AVG TIME = 80.0
>> >> >AVG TIME = 120.0
>> >> >
>> >> >I know that Win2k timing is only good for 10ms, but
>> there's a couple
>> >> >pretty big ones in there. What can I do about this? If
>> >> there is no way
>> >> >around this, then how can I *ever* do range-ordering?? If the new
>> >> >capability in 1.3 won't be available until later this year,
>> >> how about an
>> >> >interim release that just allows for *quick* reordering of
>> >> OrderedGroup
>> >> >nodes as a workaround? At least the problem would then
>> be workable.
>> >> >
>> >> >Thx
>> >> >-Lee
>> >> >
>> >> >> -----Original Message-----
>> >> >> From: Doug Twilleager [mailto:[EMAIL PROTECTED]]
>> >> >> Sent: Monday, April 23, 2001 3:17 PM
>> >> >> To: [EMAIL PROTECTED]
>> >> >> Subject: Re: [JAVA3D] Range ordering of transparent objects
>> >> >>
>> >> >>
>> >> >> The only way to get the compile out of the way is to compile the
>> >> >> scene without your OrderedGroup's, and then add them in after
>> >> >> the compile. Other than that, I don't see any other ways
>> >> >> to do this in 1.2.*.
>> >> >>
>> >> >> Doug Twilleager
>> >> >> Sun Microsystems
>> >> >>
>> >> >>
>> >> >> >To: "'Doug Twilleager'" <[EMAIL PROTECTED]>,
>> >> >> [EMAIL PROTECTED]
>> >> >> >Subject: RE: [JAVA3D] Range ordering of transparent objects
>> >> >> >MIME-Version: 1.0
>> >> >> >
>> >> >> >Doug,
>> >> >> >The only way to rearrange the children of the
>> >> OrderedGroup is to do
>> >> >> >attaches and reattaches of BranchGroups since I get an
>> >> >> exception if I do
>> >> >> >a "setChild(Node, index)" without the child being a
>> >> >> BranchGroup. This
>> >> >> >is from the Group.setChild() Javadoc:
>> >> >> >
>> >> >> >"RestrictedAccessException - if this group node is
>> part of live or
>> >> >> >compiled scene graph and the child node being set is not a
>> >> >> BranchGroup
>> >> >> >node"
>> >> >> >
>> >> >> >Since they are BranchGroups, I still get the overhead of doing
>> >> >> >attach/detach with each child. My code for swapping
>> >> >> children looks like
>> >> >> >this:
>> >> >> >
>> >> >> > in constructor...
>> >> >> > {
>> >> >> > ...
>> >> >> > empty = new BranchGroup();
>> >> >> > empty.setCapability(BranchGroup.ALLOW_DETACH);
>> >> >> > ...
>> >> >> > }
>> >> >> >
>> >> >> > private void doReordering()
>> >> >> > {
>> >> >> > myBranch.detach(); // detach OrderedGroup from scene
>> >> >> >
>> >> >> > // Call "swapBranches" as necessary
>> >> >> >
>> >> >> > myParent.addChild( myBranch );
>> >> >> > }
>> >> >> >
>> >> >> > private void swapBranches(int a, int b)
>> >> >> > {
>> >> >> >
>> >> >> > BranchGroup b1 = (BranchGroup)myOrderedGroup.getChild( a );
>> >> >> > BranchGroup b2 = (BranchGroup)myOrderedGroup.getChild( b );
>> >> >> > myOrderedGroup.setChild( empty, a ); // I think this calls
>> >> >> >b1.detach()
>> >> >> > myOrderedGroup.setChild( b1, b );
>> >> >> > myOrderedGroup.setChild( b2, a );
>> >> >> > }
>> >> >> >
>> >> >> >What do you think I can do? Is there a way to prevent my
>> >> >> OrderedGroup
>> >> >> >from being compiled so I don't have to use BranchGroups for the
>> >> >> >children??
>> >> >> >
>> >> >> >Thx
>> >> >> >-Lee
>> >> >> >
>> >> >> >> -----Original Message-----
>> >> >> >> From: Doug Twilleager [mailto:[EMAIL PROTECTED]]
>> >> >> >> Sent: Monday, April 23, 2001 1:23 PM
>> >> >> >> To: [EMAIL PROTECTED]
>> >> >> >> Subject: Re: [JAVA3D] Range ordering of transparent objects
>> >> >> >
>> >> >> ><snip...>
>> >> >> >
>> >> >> >> If you detach the branch graph which contains the
>> >> >> >> OrderedGroup, rearrange
>> >> >> >> the OrderedGroup, then reattach again, you will get better
>> >> >> performance
>> >> >> >> that attaching and reattaching the children of the
>> >> >> >> OrderedGroup individually.
>> >> >> >>
>> >> >> >> Doug Twilleager
>> >> >> >> Sun Microsystems
>> >> >> >>
>> >> >>
>> >> >> ==============================================================
>> >> >> =============
>> >> >> 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".
>> >> >>
>> >>
>> >> ==============================================================
>> >> =============
>> >> 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".
>> >>
>> >
>> >=============================================================
>> ==============
>> >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".
>>
===========================================================================
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".