Away3d 4, создавая плоский затененный материал - PullRequest
1 голос
/ 16 марта 2012

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

Это скриншот того, чего я пытаюсь достичь,Плоская затененная модель находится слева.This is a screenshot of what I'm trying to achieve. The flat shaded model is on the left.

Я загрузил тот же файл .obj, с которым я работаю в Away, в программу 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 ]

1 голос
/ 07 ноября 2012

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

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

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

0 голосов
/ 19 марта 2013

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

...