gpt4 book ai didi

java - 简单的透明度示例在 Java 3D 中不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:51 38 4
gpt4 key购买 nike

我是 j3d 的完全 n00b(但 Java 专家)。刚刚开始,我在玩透明度时遇到了问题。我有一个绘制旋转平面四边形的简单示例(显示背面时消失,因为我没有禁用背面剔除)。

取消注释 Color3b 和 COLOR_3 行(以及注释相应的 Color4b 和 COLOR_4 行),我看到旋转四边形,颜色为红色。

但是,当我注释 color-3 行并取消注释 color-4 行时,我看到一个黑色方 block (白色背景),即使 alpha 值设置为 255(完全不透明)。

我做错了什么? Google 没有帮助,甚至 java.forums.net 上的 Java3D 论坛也没有帮助。 StackOverflow,救救我!您可以复制并粘贴以下程序,运行它,看看会发生什么。

这是我的规范:

OSX 10.5.5 上的 Java 6J3D 1.5.2JOGL 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);
}
}

最佳答案

用 Color4f 替换 Color4b,对我有用。用下面的行替换代码中的相应行,

Color color = new Color(255, 0, 0, 50);

Color4f c = new Color4f(color);
QuadArray quads = new QuadArray(4,
GeometryArray.COORDINATES | GeometryArray.COLOR_4);

我使用了 AWT Color,发现传递所有 ColorNx() 构造函数更容易,即 Color3b()、Color4b() 和 Color4f() 等。您可以直接使用 float 参数,如果这对您来说很自然。实际修复是使用 Color4f,而不是 AWT 东西。即使使用 AWT Color 也不能解决 Color4b 的问题。只需使用 Color4f,我看不出有任何问题。

我的平台:Java 版本“1.6.0_10”、Java 3D 1.5.2、Core2 Duo、OpenSUSE 11.0、Intel G33 显卡。

关于java - 简单的透明度示例在 Java 3D 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365755/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com