我目前正在尝试在Away3d 4中创建一个“平面”阴影ColorMaterial,用作加载的.obj文件中的网格。
这是我想要实现的截图。平面阴影模型位于左侧。
我将正在使用的同一个.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;
任何人都可以帮我指出正确的方向吗?
谢谢!
答案 0 :(得分:1)
ColorMaterial没有平滑属性,因为它没有纹理和平滑指示任何使用的纹理是否应该使用平滑。最有可能的是,smooth属性是从MaterialBase继承的,没有任何影响。 问题发生在normal vectors,当表面平坦时,它们是法线,当它被平滑时,它们被混合,因此看起来更平滑。 我猜这个问题可能在obj文件中。如果没有法线,Away3d可能会像MeshLab一样自行生成它们,但Away3d显然默认只在平滑模式下执行。或者obj文件包含平滑法线,MeshLab在平面模式下覆盖它们。 用文本编辑器打开obj文件并查找法线,尝试另一个平面的obj文件。 但我可能错了。
答案 1 :(得分:0)
您正在寻找的可能是爆炸类。
致电Explode.apply(<your loaded mesh>)
以删除平滑的法线。