Alpha Channel in a Texture

Hi,
I have a Shape3D and inside this Shape3D I have another Shape.
What I want to do is to put a texture with an alpha in the first shape3d so that I can see the other shape – the one that is inside.
I’m trying to use TextureAttributes and TransparencyAttributes but I’m not having any success.

Does anybody know how to do it??
If you know how to change the alpha channel of the texture so that I will be able to see the other shape, please tell me!!!

Thanks

I had an absolute nightmare with this!

Hold on…

Found some code that I think did that, but it is really horrible and almost certainly filled with stuff that I put in as an experiment and never got around to taking out. It references CloudBlack.gif, which is an image that literally contains just a white cloud on a black background- the black then get’s alpha’d out, as I recall.

 
Appearance apster=new Appearance();
Material bob= new Material();
bob.setEmissiveColor(0.9f, 0.9f, 0.9f);
bob.setAmbientColor(0.9f, 0.9f, 0.9f);
apster.setMaterial(bob);
    
BufferedImage bi = new BufferedImage(128, 128, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g = bi.createGraphics();
Image inImage = new ImageIcon("C:\\java3dExperiment\\cloudBlack.gif").getImage();
g.drawImage(inImage, null, null);
g.dispose();
ImageComponent2D alpha2D = new ImageComponent2D(ImageComponent2D.FORMAT_CHANNEL8, bi, true, false);
Texture2D texter=new Texture2D(Texture2D.BASE_LEVEL, Texture.ALPHA, 128, 128);			
texter.setImage(0, alpha2D);
TextureAttributes texatt=new TextureAttributes();
texatt.setTextureMode(TextureAttributes.COMBINE);
texatt.setCombineRgbMode(TextureAttributes.COMBINE_REPLACE);
texatt.setCombineAlphaMode(TextureAttributes.COMBINE_REPLACE);
texatt.setCombineRgbSource(0, TextureAttributes.COMBINE_OBJECT_COLOR);
texatt.setCombineAlphaSource(0, TextureAttributes.COMBINE_TEXTURE_COLOR);
texatt.setCombineRgbFunction(0, TextureAttributes.COMBINE_SRC_COLOR);
texatt.setCombineAlphaFunction(0, TextureAttributes.COMBINE_SRC_ALPHA);

TransparencyAttributes transp = new TransparencyAttributes();
transp.setTransparencyMode(TransparencyAttributes.BLENDED);

apster.setTexture(texter);	
apster.setTextureAttributes(texatt);
apster.setTransparencyAttributes(transp);	

This is old code, I don’t recall how well it worked but probably it wasn’t great- I’m mostly posting it in the hope you can get some idea of a way to go…

Thanx for the Help!!

The result that I got is that, it doesn’t matter if your image has an alpha on it, you will have a shape with an alpha texture, meaning that your are not going to see the shape.

I had the same result using this code:


		TransparencyAttributes transAtt =  new TransparencyAttributes(TextureAttributes.COMBINE_REPLAXE,0.6f,TransparencyAttributes.BLEND_SRC_ALPHA,TransparencyAttributes.BLEND_SRC_ALPHA);	
		

the alpha scale 0.6f doesn’t matter.

But now I was wondering if I could see the other shape (the one that is inside) just by loading an image with an alpha on it.
Let me explain better:
In the texture of the front shape I would put an image with a draw and a part o this image just with an alpha. So then I would be able to see something of the other shape because the loaded image had an alpha on it.

Sorry, yes, the code I gave you was a bit confusing like that, perhaps- it uses black as the alpha channel, in fact I think it’s using the image in that purely as an alpha-mask with white parts of it visible and black parts invisible. It should be possible to combine with a normal texture as well, but as I said before that is fairly old code and I haven’t really done any more work with it in the last few years so I can’t guarantee very much about it at all!

I’m sure there are better ways to work with alpha channels by now, and hopefully someone will chip in with one any minute…

See if this discussion helps you: http://forums.java.net/jive/thread.jspa?forumID=70&threadID=16195.

Mike