Jefferson Samuel wrote:

Hello All,

Shape3D objects are created using GeometryArray subclasses that contains separate arrays of positional coordinates. I have another new set of positional coordinates that I need to use to update or deform the Shape3D objects. I wish to have this deformation of shape3D's as a smooth animation in correspondence with changes in the node component(like Material,TransparencyAttributes,..)

I want the same Shape3D to be deformed into a new one. No Morphing.
I have this process done in two ways I) By copying vetex data & using setCoordinates() & 
II) by passing a reference & using setCoordRef3f().

Both methods update the coordinates of the Shape3D's in each frame. Animation (deformation) is very slow. I'm using javax.swing.Timer to control the deformation of the Shape3D's in each frame.

1) Is animation is slow due to rendering frames through Timer control??


2) SetCoordinates or setCoordRef3f ? Which of these to methods update the shape3D faster??


For large amount of geometry data to update, using by reference is faster.

3) Can we change the NodeComponent (changing the Material Component) attached to a Shape3D when updating the vertex data of the same inside GeometryUpdater.updateData() method??

   public void updateData(Geometry geometry)
{
..
((Shape3D.getAppearance()).getMaterial()).setEmissiveColor(DarkBlue);
..
}

I tried doing this in Java3D->demo /GeometryByReferenceTest.java and I was able to 
change the Material property of that Shape3D inside the updataData() method.
But when trying the same in my program with all the capabilities set, it doesn't work 
more than once. The program just hangs without throwing any error or exception after 
setting the Material property once.


This is bug 4686527 - Deadlock between MasterControl and user thread when using ByRef updateData()

Workaround is only update geometry data in the updateData() callback but
not others.


Copying data: m_OriginalGeometryArray = (GeometryArray)SHAPE3D.getGeometry( ); //new positional coordinates are stored under deformedVerts (double) m_OriginalGeometryArray.setCoordinates(0,deformedBulbVerts ); SHAPE3D.setGeometry(m_OriginalGeometryArray); SHAPE3D.setAppearance(bulbApp);

By Reference:
// new positional coordinates are stored under m_OrgPoint3f (Point3f)
((GeometryArray)( SHAPE3D.getGeometry())).setCoordRef3f(m_OrgPoint3f);


Capability Set: Shape3D.ALLOW_GEOMETRY_READ/WRITE Shape3D.ALLOW_APPEARANCE_OVERRIDE_READ/WRITE Shape3D.ALLOW_APPEARANCE_READ/WRITE GeometryArray.ALLOW_COORDINATE_READ/WRITE GeometryArray.ALLOW_REF_DATA_READ/WRITE Appearance.ALLOW_MATERIAL_READ/WRITE Material.ALLOW_COMPONENT_READ


Any kind of help is greatly appreciable. Thank u.





- Kelvin
----------
Java 3D Team
Sun Microsystems Inc.

===========================================================================
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