Away3d 4, создание плоского затененного материала

В настоящее время я пытаюсь создать «плоский» затененный ColorMaterial внутри Away3d 4 для использования в качестве сетки в загруженном файле .obj.

Это скриншот того, чего я пытаюсь достичь. Плоская заштрихованная модель слева. Это скриншот того, чего я пытаюсь добиться. Плоская заштрихованная модель слева.

Я загрузил тот же файл .obj, с которым работаю в Away, в программу MeshLab. В MeshLab есть две настройки режима рендеринга: плоский или гладкий.

Режим плоского рендеринга находится слева, а плавный — справа. Когда я загружаю свой .obj в Away3D, результат выглядит точно так же, как в режиме плавного рендеринга MeshLab.

Чтобы получить плоский результат, я попытался установить флажок Smooth в моем 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;  

Может ли кто-нибудь помочь мне в правильном направлении?

Спасибо!


person francis    schedule 16.03.2012    source источник


Ответы (2)


ColorMaterial не имеет атрибута smooth, потому что у него нет текстуры, а smooth указывает, должны ли какие-либо используемые текстуры использовать сглаживание. Скорее всего, атрибут Smooth унаследован от MaterialBase и не влияет. Ваша проблема заключается в векторах нормалей, когда поверхность плоская, они нормали, когда она сглаживается, они смешиваются, поэтому он выглядит более гладким. Я предполагаю, что проблема может быть в файле obj. Если у него нет нормалей, Away3d может генерировать их сам, а также MeshLab, но Away3d, по-видимому, делает это только в сглаженном режиме по умолчанию. Или файл obj содержит сглаженные нормали и MeshLab переопределяет их в плоском режиме. Откройте файл obj в текстовом редакторе и найдите нормали, попробуйте другой файл obj с плоской поверхностью. Но я могу ошибаться.

Это сглаженный объект

А этот плоский

person JAre    schedule 07.11.2012

То, что вы ищете, вероятно, является классом Explode. Вызовите Explode.apply(<your loaded mesh>), чтобы удалить сглаженные нормали.

person Felix Ekenstam    schedule 18.03.2013