2012-08-09 28 views
0

我的問題是:JME:導入CINEMA 4D的模型紋理jMonkey Projekt的

我與質感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 
    } 
} 

回答

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

它的this old script一部分,但請注意,這是與舊R11.5 C4D的Python API,語法現在是有點不同的,所以使用更新的文檔和上述多作爲尋找什麼屬性的一般方向。

「無代碼」替代方案是將模型導入不同的3D軟件包,該軟件包可正確導出.obj(和.mtl),例如Blender。你將需要找到一箇中間格式來保存材料數據(你可以嘗試3DS,Collada,FBX我認爲),但要注意單位和座標系統的差異。希望您需要的模型功能可以保存爲從C4D導出的文件格式,並正確導入到其他3D軟件包中。

+0

嘿,看起來畢業!但我不知道如何執行這個腳本!你能幫我嗎? – JavaNullPointer 2012-08-17 09:36:36

+0

無代碼替代方案無效!我的所有網格都被破壞了! – JavaNullPointer 2012-08-17 10:17:16