Hi,
In Java3D there is also View-level option for that:
Quote from Java3D JavaDoc:
public void setDepthBufferFreezeTransparent(boolean flag)
Enables or disables automatic freezing of the depth buffer for objects rendered during the transparent rendering pass (i.e., objects rendered using alpha blending) for this view. If enabled, depth buffer writes will be disabled during the transparent rendering pass regardless of the value of the depth buffer write enable flag in the RenderingAttributes object for a particular node. This flag is enabled by default.
In Java3D, behavior of RenderingAttributes.setDepthBufferWriteEnable can be overriden by option in View, but I don't think this is a good idea, because of if option in View is set, we loose fine-grained control over transparent pass.
does it make sense to have transparent objects which at the same time write to depth buffer ?
Just in some rare cases.
If not, it might be good to automagically avoid writes to depth buffer for anything with transparency set to BLENDED.
Two points:
1. In this case, we will loose some predictability of behavior, where single OpenGL state flag controlled from different places, which may cause some confusion (say, "I enable writing to depth buffer, and it is still disabled").
2. In current Xith3D implementation, Transparency and Rendering attributes are independent units and handled by separate independent shaders. Introducing dependency of RenderingAttributes on TransparencyAttributes will also require non-trivial change in OpenGL state management code.
Yuri