2012-08-09 3 views
0

내 문제는 다음과 같습니다JME : jMonkey PROJEKT에 텍스처와 시네마 4D 모델을 가져

지금 내가 원하는 :

난 (http://preview.turbosquid.com/Preview/2011/03/30__13_54_17/space%20shuttle%206.jpgeec17db2-6651-453c-9d27-ea1908e3c7dfLarge.jpg 이것과 비슷한) 시네마 4D의 텍스처와 3D 모델을 만들었습니다 내 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을 내보내는 스크립트를 작성할 수도 있습니다. 다음은 참조를 위해 파이썬 코드 조각입니다 :

#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 파이썬 API 함께주의, 구문 이제 조금 다른, 그래서 업데이트 된 문서 및 위 이상을 사용 찾으려는 속성에 대한 일반적인 방향으로

'코드가없는'대안은 예를 들어 Blender과 같이 .obj (및 .mtl)을 제대로 내보내는 다른 3D 패키지에 모델을 가져 오는 것입니다. 재료 데이터를 보존 할 중간 형식을 찾아야합니다 (3DS, Collada, FBX를 사용해보십시오). 그러나 단위와 좌표계의 차이점을 알고 있어야합니다. 다행히도 필요한 모델 기능은 C4D에서 내보내고 다른 3D 패키지로 제대로 가져온 파일 형식으로 보존됩니다.

+0

안녕하세요? 하지만 난이 스크립트를 실행하는 방법을 몰라! 너 나 좀 도와 줄 수있어? – JavaNullPointer

+0

코드없는 대안이 작동하지 않습니다! 내 모든 메쉬가 파괴되었습니다! – JavaNullPointer