我在Java3D中实现了这个,但我认为这个问题与3D图形的任何实现有关。
我试图让我的Shape3D受到光线的影响。让我解释一下我到底在做什么以及到目前为止我尝试了什么。
我有几个GeometryArray
s(特别是一个QuadArray
和两个TriangleArray
s)我使用COLOR_3 | COORDINATES
掩码初始化。然后我需要setCoordinates
和setColors
。我还尝试添加| NORMALS
并计算法线。
所有GeometryArrays
都是Shape3D
对象的几何。 Shape3D
对象本身是BranchGroup
的子项,它直接是Universe的子项。
我使用以下方法设置外观:
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_ARRAY
掩码并使用方法setCoordinates
,setStripCounts
时, 这是有效的, setContourCounts
。但是我必须使用GeometryArray
重新实现它,因为我需要为每个点设置不同的颜色。
我知道initAppearance几乎什么也没做(至少我什么都看不到),但我不知道它应该是什么样子
我希望我解释得很好,但如果需要,我可以解释更多并提供更多代码。
答案 0 :(得分:0)
我明白了。问题是我只在一个几何体上进行实验(同时有三个)。我认为当我在其中一个Geometries上使用| NORMALS
蒙版时,这个将使用法线,但另一个则不会。但是当我在所有几何上设置这个蒙版并设置它正常的法线时会发生这种情况。