0

私はこれをJava3Dで実装していますが、質問は3Dグラフィックスの実装に関連していると思います。

Shape3D が光の影響を受けるようにしようとしています。私が何をしているか、これまでに試したことを説明させてください。

マスクを使用して初期化するいくつかGeometryArrayの s (特に 1 つとQuadArray2 つの s) があります。それから私とそれが必要です。また、法線を追加して計算してみました。TriangleArrayCOLOR_3 | COORDINATESsetCoordinatessetColors| NORMALS

すべてGeometryArraysShape3Dオブジェクトのジオメトリです。Shape3Dオブジェクト自体は、BranchGroupユニバースの直接の子である の子です。

次の方法を使用して外観を設定します。

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);
}

これは、マスクを使用し、メソッド、、、を使用しShape3DGeometryInfoときに機能していました。しかし、ポイントごとに異なる色を設定する必要があるため、sを使用してこれを再実装する必要がありました。POLYGON_ARRAYsetCoordinatessetStripCountssetContourCountsGeometryArray

initAppearance はほとんど何もしない (少なくとも何も見えない) ことは知っていますが、どのように見えるべきかわかりません

うまく説明できたと思いますが、必要に応じてさらに説明し、さらにコードを提供できます。

4

1 に答える 1

0

私はそれを考え出した。問題は、ジオメトリの 1 つだけで実験していたことです (3 つあるのに)。| NORMALSジオメトリの1つだけにマスクを使用すると、これは法線を使用しますが、もう1つは使用しないと思いました。しかし、このマスクをすべてのジオメトリに設定し、法線を設定すると、うまくいきました。

于 2013-02-28T11:19:28.003 に答える