fix UV problems

This commit is contained in:
Perfare 2020-08-06 12:34:59 +08:00
parent 9d34f668d5
commit 0a41615763
4 changed files with 28 additions and 9 deletions

View File

@ -462,7 +462,7 @@ AS_API(void) AsFbxMeshCreateElementNormal(FbxMesh* pMesh)
pNormal->SetReferenceMode(FbxGeometryElement::eDirect); pNormal->SetReferenceMode(FbxGeometryElement::eDirect);
} }
AS_API(void) AsFbxMeshCreateElementUV(FbxMesh* pMesh, int32_t uv) AS_API(void) AsFbxMeshCreateDiffuseUV(FbxMesh* pMesh, int32_t uv)
{ {
if (pMesh == nullptr) if (pMesh == nullptr)
{ {
@ -474,6 +474,18 @@ AS_API(void) AsFbxMeshCreateElementUV(FbxMesh* pMesh, int32_t uv)
pUV->SetReferenceMode(FbxGeometryElement::eDirect); pUV->SetReferenceMode(FbxGeometryElement::eDirect);
} }
AS_API(void) AsFbxMeshCreateNormalMapUV(FbxMesh* pMesh, int32_t uv)
{
if (pMesh == nullptr)
{
return;
}
auto pUV = pMesh->CreateElementUV(FbxString("UV") + FbxString(uv), FbxLayerElement::eTextureNormalMap);
pUV->SetMappingMode(FbxGeometryElement::eByControlPoint);
pUV->SetReferenceMode(FbxGeometryElement::eDirect);
}
AS_API(void) AsFbxMeshCreateElementTangent(FbxMesh* pMesh) AS_API(void) AsFbxMeshCreateElementTangent(FbxMesh* pMesh)
{ {
if (pMesh == nullptr) if (pMesh == nullptr)
@ -613,7 +625,7 @@ AS_API(void) AsFbxMeshElementUVAdd(FbxMesh* pMesh, int32_t elementIndex, float u
return; return;
} }
auto pElem = pMesh->GetElementUV(elementIndex); auto pElem = pMesh->GetElementUV(FbxString("UV") + FbxString(elementIndex));
auto& array = pElem->GetDirectArray(); auto& array = pElem->GetDirectArray();
array.Add(FbxVector2(u, v)); array.Add(FbxVector2(u, v));

View File

@ -66,7 +66,9 @@ AS_API(void) AsFbxMeshInitControlPoints(fbxsdk::FbxMesh* pMesh, int32_t vertexCo
AS_API(void) AsFbxMeshCreateElementNormal(fbxsdk::FbxMesh* pMesh); AS_API(void) AsFbxMeshCreateElementNormal(fbxsdk::FbxMesh* pMesh);
AS_API(void) AsFbxMeshCreateElementUV(fbxsdk::FbxMesh* pMesh, int32_t uv); AS_API(void) AsFbxMeshCreateDiffuseUV(fbxsdk::FbxMesh* pMesh, int32_t uv);
AS_API(void) AsFbxMeshCreateNormalMapUV(fbxsdk::FbxMesh* pMesh, int32_t uv);
AS_API(void) AsFbxMeshCreateElementTangent(fbxsdk::FbxMesh* pMesh); AS_API(void) AsFbxMeshCreateElementTangent(fbxsdk::FbxMesh* pMesh);

View File

@ -142,7 +142,10 @@ namespace AssetStudio.FbxInterop
private static extern void AsFbxMeshCreateElementNormal(IntPtr mesh); private static extern void AsFbxMeshCreateElementNormal(IntPtr mesh);
[DllImport(FbxDll.DllName, CallingConvention = CallingConvention.Winapi)] [DllImport(FbxDll.DllName, CallingConvention = CallingConvention.Winapi)]
private static extern void AsFbxMeshCreateElementUV(IntPtr mesh, int uv); private static extern void AsFbxMeshCreateDiffuseUV(IntPtr mesh, int uv);
[DllImport(FbxDll.DllName, CallingConvention = CallingConvention.Winapi)]
private static extern void AsFbxMeshCreateNormalMapUV(IntPtr mesh, int uv);
[DllImport(FbxDll.DllName, CallingConvention = CallingConvention.Winapi)] [DllImport(FbxDll.DllName, CallingConvention = CallingConvention.Winapi)]
private static extern void AsFbxMeshCreateElementTangent(IntPtr mesh); private static extern void AsFbxMeshCreateElementTangent(IntPtr mesh);

View File

@ -255,12 +255,14 @@ namespace AssetStudio.FbxInterop
AsFbxMeshCreateElementNormal(mesh); AsFbxMeshCreateElementNormal(mesh);
} }
for (var i = 0; i < 2; i += 1) if (importedMesh.hasUV[0])
{ {
if (importedMesh.hasUV[i]) AsFbxMeshCreateDiffuseUV(mesh, 0);
{
AsFbxMeshCreateElementUV(mesh, i);
} }
if (importedMesh.hasUV[1])
{
AsFbxMeshCreateNormalMapUV(mesh, 1);
} }
if (importedMesh.hasTangent) if (importedMesh.hasTangent)