0

私の問題は:

Cinema 4dでテクスチャを使用して3Dモデルを作成しました(これと同様:http://preview.turbosquid.com/Preview/2011/03/30__13_54_17/space%20shuttle%206.jpgeec17db2-6651-453c-9d27-ea1908e3c7dfLarge .jpg

次に、それをjMonkeyEngineにエクスポートして、シーンに設定し、アニメーション化します。

モデルを.objファイルとしてエクスポートし、プロジェクト(.objファイルのみ)にロードしようとしました。

その結果、テクスチャがなくなりました。私は何が間違っていますか?

 package mygame;


import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Box;

/**
 * test
 * @author normenhansen
 */
public class Main extends SimpleApplication {

    public static void main(String[] args) {
        Main app = new Main();
        app.start();
    }

    @Override
    public void simpleInitApp() {

        //Modell laden
        Spatial spaceShuttle =assetManager.loadModel("Models/test/space.obj");


        //Skalieren
        spaceShuttle.scale(0.005f, 0.005f, 0.005f);


        //Szenenbaum erstellen
        Node sceneNode = new Node("sceneNode");
        Node geometryNode = new Node("geometryNode");
        Node lightNode = new Node("lightNode");

        sceneNode.attachChild(lightNode);
        sceneNode.attachChild(geometryNode);
        rootNode.attachChild(sceneNode);   

        //neue Elemente in den Baum Einfügen
        geometryNode.attachChild(spaceShuttle);

        DirectionalLight sun = new DirectionalLight();
        sun.setDirection(new Vector3f(1,0,-2).normalizeLocal());
        sun.setColor(ColorRGBA.White);
        rootNode.addLight(sun);


    }

    @Override
    public void simpleUpdate(float tpf) {
        //TODO: add update code
    }

    @Override
    public void simpleRender(RenderManager rm) {
        //TODO: add render code
    }
}
4

1 に答える 1

1

あなたは何も悪いことをしていません。デフォルトでは、C4D は .obj のみをエクスポートし、.mtl はエクスポートしませんそれは C4D R11.5 と R12 に当てはまることは知っていますが、新しいものについてはわかりません。

スクリプトを記述して .mtl をエクスポートすることもできます。参照用の Python スニペットを次に示します。

#save mtl
mcount = 0;
mtl = ''
for tag in op.GetTags():  
    if(tag.GetType() == 5616): #texture tag
       mcount += 1
       m = tag.GetMaterial()
       mtl += 'newmtl '+clean(m.GetName())+'\n'
       if(m[sy.MATERIAL_COLOR_COLOR]):   mtl += 'Kd ' + str(m[sy.MATERIAL_COLOR_COLOR].x) + ' ' + str(m[sy.MATERIAL_COLOR_COLOR].y) + ' ' + str(m[sy.MATERIAL_COLOR_COLOR].z) + '\n'
       if(m[sy.MATERIAL_SPECULAR_COLOR]):    mtl += 'Ks ' + str(m[sy.MATERIAL_SPECULAR_COLOR].x) + ' ' + str(m[sy.MATERIAL_SPECULAR_COLOR].y) + ' ' + str(m[sy.MATERIAL_SPECULAR_COLOR].z) + '\n'
       if(m[sy.MATERIAL_SPECULAR_BRIGHTNESS]):   mtl += 'Ns ' + str(m[sy.MATERIAL_SPECULAR_BRIGHTNESS]) + '\n'
       if(m[sy.MATERIAL_TRANSPARENCY_BRIGHTNESS]):   mtl += 'd ' + str(m[sy.MATERIAL_TRANSPARENCY_BRIGHTNESS]) + '\n'
       if(m[sy.MATERIAL_COLOR_SHADER]):  mtl += 'map_Kd ' + str(m[sy.MATERIAL_COLOR_SHADER][sy.BITMAPSHADER_FILENAME]) + '\n'
       if(m[sy.MATERIAL_TRANSPARENCY_SHADER]):   mtl += 'map_d ' + str(m[sy.MATERIAL_COLOR_SHADER][sy.BITMAPSHADER_FILENAME]) + '\n'
       if(m[sy.MATERIAL_BUMP_SHADER]):   mtl += 'map_bump ' + str(m[sy.MATERIAL_BUMP_SHADER][sy.BITMAPSHADER_FILENAME]) + '\n'
       mtl += 'illum 0\n\n\n'#TODO: setup the illumination, ambient and optical density
mtl = '# Material Count: '+str(mcount)+'\n'+mtl
file = open(mtlPath,'w')
file.write(mtl)
file.close()

これはこの古いスクリプトの一部ですが、これは古い R11.5 C4D Python API を使用していることに注意してください。現在は構文が少し異なります。そのため、更新されたドキュメントと、検索するプロパティの一般的な指示として上記を使用してください。

「コードレス」の代替手段は、たとえばBlenderのような .obj (および .mtl) を適切にエクスポートする別の 3D パッケージにモデルを持ち込むことです。マテリアル データを保持する中間形式を見つける必要があります (3DS、Collada、FBX を試すことができます) が、単位と座標系の違いに注意してください。必要なモデル機能が C4D からエクスポートしたファイル形式で保存され、他の 3D パッケージに適切にインポートされることを願っています。

于 2012-08-09T21:13:45.457 に答える