不太确定这里出现问题的地方。我在Blender中有一个看起来像这样的模型:
我将它全部用于UV映射等 - 蓝色突出显示的边缘来自透明的.png纹理。这是节点编辑器:
现在,当我按照LibGDX建议导出到.fbx时,我使用以下设置:
但是当我通过fbx-convert运行并生成我的g3dj文件时,材料显示如下:
"materials": [
{
"id": "blue_wireframe_glow",
"ambient": [ 0.200000, 0.200000, 0.200000],
"diffuse": [ 0.800000, 0.800000, 0.800000],
"emissive": [ 0.000000, 0.000000, 0.000000],
"opacity": 0.000000,
"specular": [ 0.200000, 0.200000, 0.200000],
"shininess": 20.000000
}
],
看不到图像纹理(即使将不透明度更改为1.0)。还有其他我应该做的事情会使图像纹理出现在g3dj文件中吗?我是否附加错误或Blender中的某些内容?我正在使用Blender Cycles,如果这很重要的话。我还将图像文件放在与项目中的g3dj文件相同的文件夹中。这是我用来加载它的代码:
modelBatch = new ModelBatch();
modelLoader = new G3dModelLoader(new JsonReader());
heatExchangerModel = modelLoader.loadModel(Gdx.files.internal("models/heat_exchanger.g3dj"));
modelInstance = new ModelInstance(heatExchangerModel);
当我在桌面Java应用程序中查看它时,在g3dj文件中手动将不透明度设置为1.0后,它只显示为没有纹理的黑色模型。不知道我在哪里出错了 - 有什么想法吗?
编辑:我一直在阅读更多内容并发现Blender Cycles无法将其材料导出到FBX(不确定是否为真?或至少只有非常基本的材料)并尝试使用Blender渲染并且能够加载纹理,但模型仍然不像Blender那样。
有人可以指出我在libGDX中执行材料的正确方法吗?我应该从头开始写自己的吗?我想在Blender中做这一切,然后导出可能不是我应该这样做的方式。
答案 0 :(得分:1)
酷炫的着色器shanling。
我会从这里尝试一些事情。首先,将您的FBX作为ASCII从Blender导出。看看你是否可以从那里发现你的文件路径。我敢打赌它在fbx-> g3dj进程之前迷路了。
其次,我认为用节点构建着色器可能会抛弃FBX导出器。搅拌机很棒,但它仍然是开源的,并且不完美。 (所有其他包也是如此,但没有公司会承认这一点!)尝试在着色器构建器窗格中构建相同的着色器,看看是否有帮助。
否则,您只需要在libGDX中重建着色器。用Java编写它。或者,我打赌你可以修改你的g3dj以包含文件路径作为自发光地图。
例如:这是我的一个g3dj文件的一部分,我添加了一个法线贴图。将类型更改为" EMISSIVE"或者" EMIT",我想。你应该在那之后做生意。
"materials": [
{
"id": "background",
"ambient": [ 0.000000, 0.000000, 0.000000],
"diffuse": [ 0.800000, 0.800000, 0.800000],
"emissive": [ 0.800000, 0.800000, 0.800000],
"opacity": 1.000000,
"reflection": [ 0.100000, 0.100000, 0.100000],
"shininess": 65.098038,
"textures": [
{
"id": "Texture.005",
"filename": "carbonClr.png",
"type": "DIFFUSE"
},
{
"id": "Texture.006",
"filename": "carbonNormal.png",
"type": "NORMAL"
}
]
}
]
希望有所帮助!