Away3d 4,创造一个平面阴影材料

时间:2012-03-16 13:56:12

标签: actionscript-3 away3d

我目前正在尝试在Away3d 4中创建一个“平面”阴影ColorMaterial,用作加载的.obj文件中的网格。

这是我想要实现的截图。平面阴影模型位于左侧。 This is a screenshot of what I'm trying to achieve. The flat shaded model is on the left.

我将正在使用的同一个.obj文件加载到一个名为MeshLab的程序中。 MeshLab有两种渲染模式设置,平坦或平滑。

平面渲染模式位于左侧,平滑渲染模式位于右侧。当我将.obj加载到Away3D时,结果看起来与MeshLab的平滑渲染模式完全一样。

为了获得平坦的结果,我试图将ColorMaterial上的平滑标志设置为false,但这似乎没有任何改变。 http://away3d.com/livedocs/away3d/4.0/away3d/materials/MaterialBase.html

我现在开始研究材料shadowMethod,因为我能够在ShadingMethodBase上找到一个平滑的布尔值,虽然我真的不确定这是否是你要处理它的地方。

http://away3d.com/livedocs/away3d/4.0/away3d/materials/DefaultMaterialBase.html#shadowMethod http://away3d.com/livedocs/away3d/4.0/away3d/materials/methods/ShadingMethodBase.html

以下是创建灯光和灯光选择器的代码,

dL = new DirectionalLight();
dL.diffuse = 20;
dL.ambient=.6;
dL.specular=15

scene.addChild(dL);

lightPicker= new StaticLightPicker([dL]);
dL.direction = new Vector3D(0,1,-2); 

这是我的材料,我试过玩它的大部分属性:

primitiveMaterial = new ColorMaterial(0xcccccc);
primitiveMaterial.smooth = false;
primitiveMaterial.bothSides = false;
//primitiveMaterial.gloss = 800;
//primitiveMaterial.diffuseLightSources = LightSources.LIGHTS;
primitiveMaterial.diffuseMethod.alphaThreshold = .3;
primitiveMaterial.ambient =.2;
primitiveMaterial.lightPicker=lightPicker;  

任何人都可以帮我指出正确的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

ColorMaterial没有平滑属性,因为它没有纹理和平滑指示任何使用的纹理是否应该使用平滑。最有可能的是,smooth属性是从MaterialBase继承的,没有任何影响。 问题发生在normal vectors,当表面平坦时,它们是法线,当它被平滑时,它们被混合,因此看起来更平滑。 我猜这个问题可能在obj文件中。如果没有法线,Away3d可能会像MeshLab一样自行生成它们,但Away3d显然默认只在平滑模式下执行。或者obj文件包含平滑法线,MeshLab在平面模式下覆盖它们。 用文本编辑器打开obj文件并查找法线,尝试另一个平面的obj文件。 但我可能错了。

Here is smoothed obj

And this one is flat

答案 1 :(得分:0)

您正在寻找的可能是爆炸类。 致电Explode.apply(<your loaded mesh>)以删除平滑的法线。