0

Blenderで行われた基本的なエイリアンをレンダリングしようとすると、さまざまな結果が得られます。

ここに画像の説明を入力してください

Ogre 3Dにエクスポートして、Eclipseにロードします。

ここに画像の説明を入力してください

次に、コードにロードしてレンダリングしようとすると、マテリアルはレンダリングされません。

ここに画像の説明を入力してください

私のシーンで完全なエイリアンを達成するために私がしなければならないことを教えてください。Jmonkeyengineで使用するコードは

    Spatial model3 = assetManager
            .loadModel("objects/creatures/alien/alien.mesh.xml");
    model3.scale(0.3f, 0.3f, 0.3f);
    model3.setLocalTranslation(-40.0f, 3.5f, -20.0f);
    rootNode.attachChild(model3);

アップデート

エクスポートから次のようなマテリアルファイルを取得しました。

dev@dev-OptiPlex-745:~$ ls workspace/DungeonWorld2/assets/objects/creatures/alien/
alien.mesh          Material.002.material  Material.005.material
alien.mesh.xml      Material.003.material
alien.skeleton.xml  Material.004.material
dev@dev-OptiPlex-745:~$ 

このマテリアルコードは実際にシーンでマテリアルを生成しますが、blenderからのものではありません。

model3.setMaterial( new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md") );

結果:

ここに画像の説明を入力してください

ただし、マテリアルを定義せずに象の3Dモデルをロードすると、機能します。

Spatial elephant = (Spatial) assetManager.loadModel("Models/Elephant/Elephant.mesh.xml");
float scale = 0.05f;
elephant.scale(scale,scale,scale);
elephant.setLocalTranslation(-50.0f, 3.5f, -20.0f);

    control = elephant.getControl(AnimControl.class);
    control.addListener(this);
    channel = control.createChannel();

    for (String anim : control.getAnimationNames())
        System.out.println("elephant can:"+anim);

上記のコードは象を正しくレンダリングするのに、なぜエイリアンのためにそのようなメッシュをエクスポートできないのですか?マテリアルを明示的にロードしようとしましたが、機能しません。

    Spatial model3 = assetManager
            .loadModel("objects/creatures/alien/alien.mesh.xml");
    model3.scale(0.3f, 0.3f, 0.3f);
    model3.setLocalTranslation(-40.0f, 3.5f, -20.0f);
    model3.setMaterial( new Material(assetManager,  
            "objects/creatures/alien/alien.material") );
    rootNode.attachChild(model3);

上記は例外を生成しますが、ロードしているマテリアルファイルと、エクスポートによって生成された他の2つまたは3つのマテリアルファイルをどうするかはわかりません。

java.lang.ClassCastException: com.jme3.material.MaterialList cannot be cast to com.jme3.material.MaterialDef
    at com.jme3.material.Material.<init>(Material.java:116)
    at adventure.Main.simpleInitApp(Main.java:309)
    at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:225)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:129)
    at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:205)
    at java.lang.Thread.run(Thread.java:679)

アップデート

この方法で他のモデルをロードすることは機能しています:

    BlenderKey blenderKey = new BlenderKey(
            "objects/creatures/troll/troll.mesh.xml");

    Spatial troll = (Spatial) assetManager.loadModel(blenderKey);
    troll.setLocalTranslation(new Vector3f(-145, 15, -10));
    rootNode.attachChild(troll);

    BlenderKey blenderKey2 = new BlenderKey(
            "objects/creatures/spaceman/man.mesh.xml");

    Spatial man = (Spatial) assetManager.loadModel(blenderKey2);
    man.setLocalTranslation(new Vector3f(-140, 15, -10));
    rootNode.attachChild(man);

私はゲーム内にモデルを入れましたが、元々.blendファイルであったトロールと宇宙飛行士の両方が問題なく見えます。 ここに画像の説明を入力してください

今、私がそれをやり直して、それが材料をロードしているとき、それははるかに良くなっています。現在残っているエイリアンの唯一の問題は、ここでも答えられた頭の穴です。

    BlenderKey blenderKey = new BlenderKey(
            "objects/creatures/alien/alien.mesh.xml");

    Spatial alien = (Spatial) assetManager.loadModel(blenderKey);
    alien.setLocalTranslation(new Vector3f(-145, 15, -10));
    rootNode.attachChild(alien);

ここに画像の説明を入力してください

4

1 に答える 1

1

あなたは自分の資料について何も書いていませんでした-あなたはそれを書き、それを正しく使用しましたか?あなたが得る問題は私には材料の不足であるように思われます。

一般に、いくつかの* .materialファイルとおそらくいくつかのテクスチャが必要になります(Blenderで使用した場合)。最初に、Ogreに付属しているマテリアルの1つを使用できます。追加する必要があるのは、次のとおりです。

model3.setMaterialName( "Examples / Rockwall");

次に、何かが変わるかどうかを確認します。それでも問題が発生する場合は、「Ogre.log」ファイルを調べることができます。すべてのエラーがそこにあるため、常に確認する価値があります。


2番目の問題もここにあります-オブジェクトを「片面」としてレンダリングしますが、blenderはおそらく両面メッシュとしてレンダリングするので、頭に穴ができます。マテリアルで両面を選択することもできますが、穴のないモデルを作成する方が良いです(レンダリング中は高速です):)。

于 2012-07-26T09:59:57.307 に答える