【问题标题】:JME: Import a Cinema 4d Model with texture to jMonkey ProjektJME:将带有纹理的 Cinema 4d 模型导入 jMonkey Projekt
【发布时间】:2012-08-06 14:16:27
【问题描述】:

我的问题是:

我在 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
    }
}

【问题讨论】:

    标签: java jmonkeyengine 3d-model cinema-4d


    【解决方案1】:

    你没有做错任何事。 C4D 仅导出 .obj,但默认不导出 .mtl。 我知道 C4D R11.5 和 R12 是这样的,但对于较新的则不确定。

    您也可以编写一个脚本来导出 .mtl。 这是一个 Python sn-p 供参考:

    #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()
    

    它是this old script 的一部分,但请注意这是旧的 R11.5 C4D Python API,语法现在有点不同,所以使用更新的文档和以上更多作为寻找哪些属性的一般方向.

    “无代码”替代方法是将您的模型放入不同的 3D 包中,该包可以正确导出 .obj(和 .mtl),例如 Blender。您将需要找到一种可以保留材质数据的中间格式(我认为您可以尝试 3DS、Collada、FBX),但要注意单位和坐标系的差异。希望您需要的模型特征以您从 C4D 导出的文件格式保留,并正确导入回其他 3D 包。

    【讨论】:

    • 嘿,看起来毕业了!但我不知道如何执行这个脚本!你能帮帮我吗?
    • 无代码替代方案不起作用!我所有的网格都被破坏了!
    猜你喜欢
    • 2016-02-24
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2017-05-09
    • 2011-12-19
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多