gpt4 book ai didi

java - JME : Import a Cinema 4d Model with texture to jMonkey Projekt

转载 作者:行者123 更新时间:2023-12-01 15:14:07 25 4
gpt4 key购买 nike

我的问题是:

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

最佳答案

你没有做错任何事。 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例如。您需要找到一种中间格式来保存 Material 数据(我认为您可以尝试 3DS、Collada、FBX),但要注意单位和坐标系的差异。希望您需要的模型功能能够以从 C4D 导出的文件格式保留,并正确导入回其他 3D 包中。

关于java - JME : Import a Cinema 4d Model with texture to jMonkey Projekt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11881996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com