LibGDX fbx 导出不显示图像纹理 — 显示为黑色
LibGDX fbx export not displaying image texture — shows up as black
不太确定问题出在哪里。我在 Blender 中有一个看起来像这样的模型:
并且我将其全部映射为 UV 等 — 蓝色突出显示的边缘来自透明的 .png 纹理。这是节点编辑器:
现在,当我按照 LibGDX 建议导出为 .fbx 时,我使用这些设置:
但是当我通过 fbx-convert 运行 生成我的 g3dj 文件时,material 显示如下:
"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 无法将其 material 导出到 FBX(不确定是否正确?或者只是非常基本 materials 至少)并尝试使用 Blender Render 并能够加载纹理,但模型看起来仍然不太像使用 Blender 时应有的样子。
有人可以告诉我在 libGDX 中执行 material 的正确方法吗?我应该从头开始写我自己的吗?我觉得在 Blender 中完成所有这些然后导出可能不是我应该做的方式。
看起来很酷的着色器山灵。
我会从这里尝试一些事情。首先,从 Blender 中将 FBX 导出为 ASCII。查看您是否可以从那里找到您的文件路径。我敢打赌它会在 fbx->g3dj 过程之前丢失。
其次,我认为使用节点构建着色器可能会影响 FBX 导出器。 Blender 很棒,但它仍然是开源的并且存在缺陷。 (所有其他软件包也是如此,但没有公司会承认这一点!)尝试在着色器构建器窗格中构建相同的着色器,看看是否有帮助。
否则,您将不得不在 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"
}
]
}
]
希望对您有所帮助!
不太确定问题出在哪里。我在 Blender 中有一个看起来像这样的模型:
并且我将其全部映射为 UV 等 — 蓝色突出显示的边缘来自透明的 .png 纹理。这是节点编辑器:
现在,当我按照 LibGDX 建议导出为 .fbx 时,我使用这些设置:
但是当我通过 fbx-convert 运行 生成我的 g3dj 文件时,material 显示如下:
"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 无法将其 material 导出到 FBX(不确定是否正确?或者只是非常基本 materials 至少)并尝试使用 Blender Render 并能够加载纹理,但模型看起来仍然不太像使用 Blender 时应有的样子。
有人可以告诉我在 libGDX 中执行 material 的正确方法吗?我应该从头开始写我自己的吗?我觉得在 Blender 中完成所有这些然后导出可能不是我应该做的方式。
看起来很酷的着色器山灵。
我会从这里尝试一些事情。首先,从 Blender 中将 FBX 导出为 ASCII。查看您是否可以从那里找到您的文件路径。我敢打赌它会在 fbx->g3dj 过程之前丢失。
其次,我认为使用节点构建着色器可能会影响 FBX 导出器。 Blender 很棒,但它仍然是开源的并且存在缺陷。 (所有其他软件包也是如此,但没有公司会承认这一点!)尝试在着色器构建器窗格中构建相同的着色器,看看是否有帮助。
否则,您将不得不在 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"
}
]
}
]
希望对您有所帮助!