我有一个FBX模型,我想在Blender中打开,但是当我尝试导入模型时,它说:不支持ASCII FBX文件.有没有办法以某种方式将模型导入Blender?我无法访问任何Autodesk软件.
我正在尝试将FBX文件的解析器编写为我的自定义模型格式,可以在我的游戏引擎中使用,但我目前只是在提取每个骨骼所需的矩阵.我想我也可能会在皮肤理论中迷失...
我设法提取了网格的骨骼层次结构,并将变形聚类的权重和索引附加到我的顶点.现在我需要提取我需要在引擎中进行蒙皮的(两个?)矩阵.
基本上,在我的格式中,我希望它看起来像这样:
// BoneID
// ParentBoneID
//矩阵1
//矩阵2
现在,对于矩阵......我是否正确地假设它们中至少有一个应该是"绑定姿势矩阵",即我骨架的默认位置?如何从FBX中提取此内容?整个网格的矩阵是否均匀?
至于第二个,我真的不知道,我已经尝试过查看ViewScene和ImportScene示例,但是我没有得到它.我读了一些关于"局部空间矩阵"的东西,我猜这是每个骨骼的个别位置,旋转和比例?
任何帮助或建议都表示赞赏,我现在感到很茫然,可能是因为我对此视而不见.几乎在放弃FBX而转向COLLADA的时候.
编辑1:引擎没有绘图功能,因为我想在继续之前完成这项工作.我找到了一个我认为理解的例子,也许这里有人可以确认它是否正确.
//TEST CODE
//This lFbxLinkMatrix is the skeleton's transform when the binding happened.
//It is the same as the matrix in bindpose if the bindpose is complete.
// Multiply lClusterGlobalInitPosition by Geometric Transformation
FbxAMatrix clusterGlobalInitPosition;
cluster->GetTransformLinkMatrix(clusterGlobalInitPosition);
FbxAMatrix clusterGeometry = GetGeometry(cluster->GetLink());
clusterGlobalInitPosition *= clusterGeometry;
skeleton->at(boneListPosition).bindMatrix = clusterGlobalInitPosition;
// Compute the shift of the link relative to the reference.
//lVertexTransformMatrix = RGCP.Inverse() * CGCP * CGIP.Inverse() * RGIP * RG; …Run Code Online (Sandbox Code Playgroud) 我正在尝试导出蒙皮网格.由于某些原因,如果我将一个皮肤簇添加到网格中,FbxSDK会破坏段边缘的法线.没有皮肤,一切看起来都很好.
码:
FbxLayerElementNormal *layerElementNormal = FbxLayerElementNormal::Create(mesh, "");
layerElementNormal->SetMappingMode(FbxLayerElement::eByControlPoint);
layerElementNormal->SetReferenceMode(FbxLayerElement::eDirect);
for (int vertIndex = 0; vertIndex < vertexCount; ++vertIndex)
{
PackedNormal normal = vertices[vertIndex].normal;
double x,y,z;
x = (( (normal.data) & 0xFF) / 127.5f - 1.0f);
y = ((((normal.data) >> 8 ) & 0xFF) / 127.5f - 1.0f);
z = ((((normal.data) >> 16) & 0xFF) / 127.5f - 1.0f);
layerElementNormal->GetDirectArray().Add(FbxVector4(x,-y,z));
}
layer->SetNormals(layerElementNormal);
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的映射mods(例如eByPolygonVertex)和参考mods,但到目前为止没有任何帮助.如果网格具有皮肤簇,则看起来像法线一样被完全忽略.我评论了上面的代码,皮肤模型看起来像左图上的一个.
我还尝试了不同的3D软件(Maya 2015,Maya 2013和3ds Max 2013)来检查导出的模型,但所有这些都给了我相同的结果.
PS此问题会影响任何蒙皮网格.
编辑 似乎这个问题是FBX管道中的一个错误:Autodesk论坛.为了绕过这个问题,我需要"传输属性".有人能帮忙吗?
我想从fbx文件中读取3d模型并openGL es 2.0在iPhone上的引擎内显示它(不使用Unity),我也想显示读取3d对象的动画.
我如何从fbx文件中获取动画?
目前我能够获得姿势名称列表,据我所知,它带有变换矩阵,图层,堆栈,图层和许多曲线中的姿势的完整列表.
如何将所有信息组合起来以显示正确的动画?
我也尝试解析其中的一些信息TakeInfo,但结果有点奇怪,例如:
FbxTakeInfo *ltakeInfo = pScene->GetTakeInfo(lAnimStack->GetName());
FbxTime start = ltakeInfo->mLocalTimeSpan.GetStart();
FbxTime end = ltakeInfo->mLocalTimeSpan.GetStop();
self.startTime = start.GetSecondDouble();
self.endTime = end.GetSecondDouble();
Run Code Online (Sandbox Code Playgroud)
在这里我得到start = 0并end = 0.014为每个解析的图层,所以我猜这是不正确的(fbx我要显示的文件包含1个网格与简单的5秒持续时间动画).
更新
经过几个小时的调查后,我接下来的事情:
作为参考,这是我想要显示的测试obj的结构:
在这里你可以看到很多骨头(更具体 - 19)我能够得到(如上所述)列表中的19个动画obj(如骨骼/ obj的名称)和每组151帧内的19组曲线(具有帧速率) 30正好5秒的动画 - 30*5 = 150 + 1最后一个单位矩阵).
如果我尝试逐个使用每个曲线组到我的网格(我只能解析1个网格)我看到网格的不同部分的动画应用于所有网格(例如垂直旋转或水平平移),所以我认为这个每组中的曲线应该精确地应用于特定骨骼,因此我将获得我的网格动画.问题是我不知道如何仅为选定的骨骼顶点部分设置动画.
现在的问题是如何应用这个所有动画分为将特定于骨的组分离到整个obj(因为我只有一个网格)?
如何从包含所有曲线组的列表中为每个帧获得1个全局曲线列表?
UPDATE2
感谢@codetiger的建议,我遵循评论中提供的链接中的指令,并且通过该技术,我能够检索具有开始和结束时间以及所需变换的骨骼特定垫片列表,但这几乎与我之前使用曲线相同 - 与曲线的唯一区别我应该从9条曲线创建mat(对于xyz进行平移/缩放/旋转)而不是使用完整矩阵,但问题仍然存在 - 如何将它们组合在1个全局矩阵中?
我使用的代码(找到几个链接):
FbxNode* modelNode = _fbxScene->GetRootNode();
FbxAMatrix geometryTransform = GetGeometryTransformation(modelNode);
for (unsigned …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用位于此处的three.js项目的utils/converter/fbx /文件夹中的FBX转换器工具:
https://github.com/mrdoob/three.js/
我已经安装了FBX SDK Python 2013.3绑定(至少我认为我正确地做了那部分)
我在C:\ Python26上安装了Python 2.6
我将"FBX SDK"文件夹从C:\ Program Files\Autodesk\FBX复制到C:\ Pythons26\Lib\site-packages中
但是当我运行以下命令时:
converty_to_threejs.py my_fbx_file.fbx test_output_file.js
我收到以下错误:
找不到python FBX SDK!您需要将FBX SDK复制到python安装文件夹,例如"Python26/Lib/site-packages"文件夹.
我还确保将C:\ Python26添加到我的PATH系统变量中.
有谁知道为什么它找不到FBX SDK文件夹?我把它准确地放在了它想要的地方,但它找不到它.
提前致谢!
Blender似乎不想导入FBX 6100文件.有什么方法可以转换文件,甚至更好,直接从Blender打开它?
我买了一个房间的3D模型.该模型采用的.obj格式.现在,我正在尝试将此模型导入Unity3D.
该模型带有:
5x .obj档案 5x .mtl档案nx .jpg档案nx .tga档案The .mtl files contained paths that do not exist on my PC. So I removed the paths. The images files (.jpg & .mtl) are in the same directory as the .obj files. When I tried to import the .obj files, the room has no material on it.
I then tried to use the FBX converter (with "Embed media" …
问题很简单:如何在 WebGL 中渲染 FBX/3DS 模型?我试过谷歌搜索,但这似乎是一个相当新的领域。
不太确定问题出在哪里。我在 Blender 中有一个看起来像这样的模型:
\n\n\n\n我把它全部UV映射了,这样的\xe2\x80\x94\xc2\xa0蓝色突出显示的边缘来自透明的.png纹理。这是节点编辑器:
\n\n\n\n现在,当我按照 LibGDX 建议导出到 .fbx 时,我使用以下设置:
\n\n\n\n但是当我通过 fbx-convert 运行它并生成我的 g3dj 文件时,材料显示如下:
\n\n"materials": [\n {\n "id": "blue_wireframe_glow", \n "ambient": [ 0.200000, 0.200000, 0.200000], \n "diffuse": [ 0.800000, 0.800000, 0.800000], \n "emissive": [ 0.000000, 0.000000, 0.000000], \n "opacity": 0.000000,\n "specular": [ 0.200000, 0.200000, 0.200000], \n "shininess": 20.000000\n }\n], \nRun Code Online (Sandbox Code Playgroud)\n\n看不到图像纹理(即使将不透明度更改为 1.0)。我还应该做其他事情来使图像纹理出现在 g3dj 文件中吗?我是否附加了错误或 Blender 中的某些内容?我正在使用 Blender Cycles,如果这很重要的话。我还将图像文件放在与项目中的 g3dj 文件相同的文件夹中。这是我用来加载它的代码:
\n\nmodelBatch = new ModelBatch();\nmodelLoader = new G3dModelLoader(new JsonReader());\nheatExchangerModel = …Run Code Online (Sandbox Code Playgroud) 使用 autodesk 的 fbx sdk 和 python 插件,似乎应该可以创建一个小的 jpg 作为 fbx 文件的预览图像。但是,我不知道该怎么做。
我需要使用/设置哪些方法来为 fbx 文件创建小缩略图 jpg?
最后,我想要一个过程,允许用户将 fbx 文件上传到他们的库中,并从 Web 界面显示该文件的预览/缩略图。