0

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

我试图让我的 Shape3D 受到光线的影响。让我解释一下我在做什么以及到目前为止我所做的尝试。

我有几个GeometryArrays(特别是 oneQuadArray和 two s),我使用maskTriangleArray进行了初始化。COLOR_3 | COORDINATES然后我setCoordinatessetColors我需要的。我还尝试添加| NORMALS和计算法线。

都是物体GeometryArrays的几何形状。对象本身是 a 的孩子,Shape3D后者直接是 Universe 的孩子。Shape3DBranchGroup

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

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是有效的,,。但是我必须使用s 重新实现它,因为我需要为每个点设置不同的颜色。POLYGON_ARRAYsetCoordinatessetStripCountssetContourCountsGeometryArray

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

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

4

1 回答 1

0

我想到了。问题是我只在其中一种几何形状上进行试验(同时拥有其中三种)。我认为当我| NORMALS只在其中一个几何图形上使用蒙版时,这个会使用法线,而另一个不会。但是,当我在所有几何图形上设置此蒙版并设置其正常工作时,就会发生这种情况。

于 2013-02-28T11:19:28.003 回答