1

現在、ロードされた .obj ファイルのメッシュとして使用するために、Away3d 4 内に「フラットな」シェーディング ColorMaterial を作成しようとしています。

これは私が達成しようとしているもののスクリーンショットです。フラット シェーディング モデルは左側にあります。 これは私が達成しようとしているもののスクリーンショットです。 フラット シェーディング モデルは左側にあります。

Away で作業しているのと同じ .obj ファイルを、MeshLab というプログラムにロードしました。MeshLab のレンダリング モードには、フラットまたはスムーズの 2 つの設定があります。

左側がフラット レンダリング モード、右側がスムーズ レンダリング モードです。.obj を Away3D にロードすると、結果は MeshLab のスムーズ レンダリング モードとまったく同じように見えます。

フラットな結果を得るために、ColorMaterial のスムーズ フラグを false に設定しようとしましたが、何も変わらないようです。 http://away3d.com/livedocs/away3d/4.0/away3d/materials/MaterialBase.html

ShadingMethodBase で滑らかなブール値を見つけることができたので、マテリアルの shadowMethod を調べ始めていますが、これがこれを処理する場所であるかどうかは正直わかりません。

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;  

誰かが私を正しい方向に向けるのを手伝ってくれますか?

ありがとう!

4

2 に答える 2

1

ColorMaterial にはテクスチャがなく、使用されているテクスチャがスムージングを使用する必要があるかどうかを Smooth が示すため、 Smooth 属性はありません。Smooth アトリビュートはMaterialBaseから継承されている可能性が高く、影響はありません。あなたの問題は、表面が平らな場合の法線ベクトルにあります。それらは法線であり、平滑化されている場合はブレンドされるため、より滑らかに見えます。問題はobjファイルにあると推測しています。法線がない場合、Away3d は MeshLab と同様にそれ自身で法線を生成する可能性がありますが、Away3d はデフォルトで平滑化モードでのみそれを行っているようです。または、obj ファイルには平滑化された法線が含まれており、MeshLab はそれらをフラット モードでオーバーライドします。テキスト エディタで obj ファイルを開き、法線を探します。平面のある別の obj ファイルを試してください。しかし、私は間違っているかもしれません。

これが平滑化されたオブジェクトです

そして、これはフラットです

于 2012-11-07T12:54:24.210 に答える
0

あなたが探しているのはおそらくExplodeクラスです。Explode.apply(<your loaded mesh>)平滑化された法線を削除するために呼び出します。

于 2013-03-18T22:38:27.890 に答える