gpt4 book ai didi

java - 如何渲染从 Blender 导入的 3D 外星人?

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

我在尝试渲染在 Blender 中完成的基本外星人时得到了混合结果:

enter image description here

我导出到 Ogre 3D 并将其加载到 Eclipse 中:

enter image description here

然后,当我将其加载到代码中并尝试渲染它时, Material 将不会渲染:

enter image description here

你能告诉我我必须做什么才能在我的场景中实现完整的外星人吗?我在Jmonkeyengine中使用的代码是

    Spatial model3 = assetManager
.loadModel("objects/creatures/alien/alien.mesh.xml");
model3.scale(0.3f, 0.3f, 0.3f);
model3.setLocalTranslation(-40.0f, 3.5f, -20.0f);
rootNode.attachChild(model3);

更新

我从导出中获得了如下 Material 文件:

dev@dev-OptiPlex-745:~$ ls workspace/DungeonWorld2/assets/objects/creatures/alien/
alien.mesh Material.002.material Material.005.material
alien.mesh.xml Material.003.material
alien.skeleton.xml Material.004.material
dev@dev-OptiPlex-745:~$

此 Material 代码实际上在场景中生成一种 Material ,但它不是来自 blender 的 Material :

model3.setMaterial( new Material(assetManager,<br/>
"Common/MatDefs/Misc/Unshaded.j3md") );

结果:

enter image description here

但是,在不定义 Material 的情况下加载大象的 3D 模型确实有效:

Spatial elephant = (Spatial) assetManager.loadModel("Models/Elephant/Elephant.mesh.xml");
float scale = 0.05f;
elephant.scale(scale,scale,scale);
elephant.setLocalTranslation(-50.0f, 3.5f, -20.0f);

control = elephant.getControl(AnimControl.class);
control.addListener(this);
channel = control.createChannel();

for (String anim : control.getAnimationNames())
System.out.println("elephant can:"+anim);

上面的代码正确渲染了大象,那么为什么我不能为外星人导出这样的网格呢?我尝试显式加载 Material ,但它对我不起作用:

    Spatial model3 = assetManager
.loadModel("objects/creatures/alien/alien.mesh.xml");
model3.scale(0.3f, 0.3f, 0.3f);
model3.setLocalTranslation(-40.0f, 3.5f, -20.0f);
model3.setMaterial( new Material(assetManager,
"objects/creatures/alien/alien.material") );
rootNode.attachChild(model3);

上面生成了一个异常,我真的不知道我正在加载什么 Material 文件以及如何处理导出生成的其他两个或三个 Material 文件:

java.lang.ClassCastException: com.jme3.material.MaterialList cannot be cast to com.jme3.material.MaterialDef
at com.jme3.material.Material.<init>(Material.java:116)
at adventure.Main.simpleInitApp(Main.java:309)
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:225)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:129)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:205)
at java.lang.Thread.run(Thread.java:679)

更新

以这种方式加载其他模型是有效的:

    BlenderKey blenderKey = new BlenderKey(
"objects/creatures/troll/troll.mesh.xml");

Spatial troll = (Spatial) assetManager.loadModel(blenderKey);
troll.setLocalTranslation(new Vector3f(-145, 15, -10));
rootNode.attachChild(troll);

BlenderKey blenderKey2 = new BlenderKey(
"objects/creatures/spaceman/man.mesh.xml");

Spatial man = (Spatial) assetManager.loadModel(blenderKey2);
man.setLocalTranslation(new Vector3f(-140, 15, -10));
rootNode.attachChild(man);

我在游戏中获取了模型,它们看起来不错,无论是巨魔还是太空人,它们最初都是 .blend 文件。 enter image description here

现在,当我重做一遍并且正在加载 Material 时,情况好多了。现在外星人剩下的唯一问题是头上的洞,这也在这里得到了解答。

    BlenderKey blenderKey = new BlenderKey(
"objects/creatures/alien/alien.mesh.xml");

Spatial alien = (Spatial) assetManager.loadModel(blenderKey);
alien.setLocalTranslation(new Vector3f(-145, 15, -10));
rootNode.attachChild(alien);

enter image description here

最佳答案

您没有写任何有关您的 Material 的内容 - 您是否写了一份 Material 并正确使用了它?您遇到的问题对我来说似乎是缺乏 Material 。

一般来说,您需要一些 *.material 文件,可能还需要一些纹理(如果您在 Blender 中使用它们)。一开始你可以使用 Ogre 附带的 Material 之一,你只需要添加:

model3.setMaterialName( "示例/Rockwall");

然后看看它是否改变了什么。如果您仍然遇到问题,您可以查看“Ogre.log”文件 - 它总是值得检查,因为所有错误都在那里。

<小时/>

我在这里还看到了第二个问题 - 您将对象渲染为“单面”,而 blender 可能渲染为双面网格,因此您会在头上看到孔。您可以在 Material 中选择两侧,但最好(并且在渲染过程中更快)创建没有孔的模型:)。

关于java - 如何渲染从 Blender 导入的 3D 外星人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663335/

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