java透明度_简单的透明度示例不适用于Java 3D

一位Java专家在使用Java3D创建一个简单的旋转四边形时遇到透明度问题。当尝试使用Color4b设置颜色及透明度时,四边形显示为黑色而非预期的红色。该问题与代码中透明度属性的设置有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是j3d中的完整n00b(但是

Java专家).刚刚开始,我遇到了一个透明度问题.我有一个简单的例子,绘制一个旋转的平面四边形(显示背面消失,因为我没有禁用背面剔除).

将Color3b和COLOR_3线取消注释(以及相应的Color4b和COLOR_4线注释),我看到旋转的四边形,红色.

但是,当我评论color-3线并取消注释color-4线时,我看到一个黑色正方形(相对于白色背景),即使alpha值设置为255(完全不透明).

我究竟做错了什么?谷歌没有帮助,甚至java.forums.net上的Java3D论坛都没有帮助. StackOverflow,救救我!您可以复制并通过以下程序,运行它,看看会发生什么.

这是我的规格:

OSX 10.5.5上的Java 6

J3D 1.5.2

JOGL 1.1.1

谢谢,

– 抢

这是代码:

import com.sun.j3d.utils.applet.MainFrame;

import com.sun.j3d.utils.geometry.ColorCube;

import com.sun.j3d.utils.universe.SimpleUniverse;

import java.applet.Applet;

import java.awt.*;

import javax.media.j3d.*;

import javax.vecmath.*;

public class Hello extends Applet

{

public Hello() throws Exception

{

setLayout(new BorderLayout());

GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

Canvas3D canvas3D = new Canvas3D(config);

add("Center", canvas3D);

BranchGroup scene = createSceneGraph();

scene.compile();

SimpleUniverse univ = new SimpleUniverse(canvas3D);

univ.getViewingPlatform().setNominalViewingTransform();

univ.addBranchGraph(scene);

}

public BranchGroup createSceneGraph() throws Exception

{

BranchGroup root = new BranchGroup();

// A white background.

Background bgd = new Background(1.0f, 1.0f, 1.0f);

root.addChild(bgd);

// This will spin the quad around

TransformGroup spin = new TransformGroup();

spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

root.addChild(spin);

// define the quad:

Point3d p1 = new Point3d(-0.5, -0.5, 0);

Point3d p2 = new Point3d(0.5, -0.5, 0);

Point3d p3 = new Point3d(0.5, 0.5, 0);

Point3d p4 = new Point3d(-0.5, 0.5, 0);

// colors

Color4b c = new Color4b((byte)255, (byte)0, (byte)0, (byte)255);

//Color3b c = new Color3b((byte)255, (byte)0, (byte)0);

QuadArray quads = new QuadArray(4,

GeometryArray.COORDINATES | GeometryArray.COLOR_4);

// GeometryArray.COORDINATES | GeometryArray.COLOR_3);

quads.setCoordinate(0, p1);

quads.setCoordinate(1, p2);

quads.setCoordinate(2, p3);

quads.setCoordinate(3, p4);

quads.setColor(0, c);

quads.setColor(1, c);

quads.setColor(2, c);

quads.setColor(3, c);

// Not sure if I need this. Doesn't seem to make a difference.

Appearance appearance = new Appearance();

TransparencyAttributes trans = new TransparencyAttributes();

trans.setTransparencyMode(TransparencyAttributes.BLENDED);

appearance.setTransparencyAttributes(trans);

// Create the shape...

Shape3D shape = new Shape3D();

shape.setGeometry(quads);

shape.setAppearance(appearance);

spin.addChild(shape);

Alpha rotationAlpha = new Alpha(-1, 4000);

RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, spin);

BoundingSphere bounds = new BoundingSphere();

rotator.setSchedulingBounds(bounds);

spin.addChild(rotator);

return root;

}

public static void main(String[] args) throws Exception

{

Frame frame = new MainFrame(new Hello(), 256, 256);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值