3d 带颜色和照明的几何射线

3d 带颜色和照明的几何射线,3d,java-3d,3d,Java 3d,我正在用Java3D实现这个,但我认为这个问题与任何3D图形的实现有关 我试图让我的形状受到光线的影响。让我解释一下我正在做什么,以及迄今为止我尝试了什么 我有几个s(特别是一个quadraray和两个TriangleArrays),我使用COLOR\u 3 |坐标mask初始化它们。然后我需要设置坐标和颜色。我还尝试添加|法线并计算法线 所有几何体射线都是对象的几何体。Shape3D对象本身是分支组的子对象,分支组直接是宇宙的子对象 我使用以下方法设置外观: private void init

我正在用Java3D实现这个,但我认为这个问题与任何3D图形的实现有关

我试图让我的形状受到光线的影响。让我解释一下我正在做什么,以及迄今为止我尝试了什么

我有几个s(特别是一个
quadraray
和两个
TriangleArray
s),我使用
COLOR\u 3 |坐标
mask初始化它们。然后我需要设置坐标和颜色。我还尝试添加
|法线
并计算法线

所有
几何体射线
都是对象的几何体。
Shape3D
对象本身是分支组的子对象,分支组直接是宇宙的子对象

我使用以下方法设置外观:

private void initAppearance() {
    Appearance app = new Appearance();
    Color3f objColor = new Color3f(0.3f, 0.2f, 0.1f);
    Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
    app.setMaterial(new Material(black, objColor, objColor, black, 100.0f));
    setAppearance(app);
}
我使用以下方法设置灯光:

private void makeLight(BranchGroup group) {
        Color3f lightColor = new Color3f(2f, 2f, 2f);

        Vector3f direction1 = new Vector3f(4.0f, -7.0f, -8.0f);
        Vector3f direction2 = new Vector3f(-4.0f, 7.0f, 10.0f);
        DirectionalLight light1 = new DirectionalLight(lightColor, direction1);
        DirectionalLight light2 = new DirectionalLight(lightColor, direction2);

        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 50.0);
        light1.setInfluencingBounds(bounds);
        light2.setInfluencingBounds(bounds);

        group.addChild(light1);
        group.addChild(light2);
}
当我的
Shape3D
使用
GeometryInfo
POLYGON_数组
掩码,并使用方法
设置坐标
设置TripCounts
设置轮廓计数
时,这是有效的。但是我必须使用
GeometryArray
s重新实现它,因为我需要为每个点设置不同的颜色

我知道initAppearance几乎什么都不做(至少我看不到),但我不知道它应该是什么样子


我希望我解释得很好,但如果需要,我可以解释得更多,并提供更多的代码。

我明白了。问题是我只在其中一个几何体上做实验(同时有三个几何体)。我想,当我只在其中一个几何体上使用
|法线
遮罩时,这一个将使用法线,而另一个不会。但是,当我在所有的几何体上设置这个遮罩并设置法线时,它就起作用了