From 35d138c31c3c1c3f57c0e166bd3562fd90118418 Mon Sep 17 00:00:00 2001 From: kearwood Date: Wed, 28 Mar 2012 23:34:39 +0000 Subject: [PATCH] Corrected tangent and normal import from FBX files. FBX Import now functional. --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4022 --- KREngine/KREngine/Classes/KRResource+fbx.cpp | 36 +++++--------------- objview/Classes/KRObjViewGLView.mm | 3 +- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/KREngine/KREngine/Classes/KRResource+fbx.cpp b/KREngine/KREngine/Classes/KRResource+fbx.cpp index 20ef275..7b0edc6 100644 --- a/KREngine/KREngine/Classes/KRResource+fbx.cpp +++ b/KREngine/KREngine/Classes/KRResource+fbx.cpp @@ -385,34 +385,15 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom } } + // ----====---- Read Normals ----====---- - for(int l = 0; l < normal_count; ++l) - { - KFbxVector4 new_normal; - KFbxGeometryElementNormal* leNormal = pMesh->GetElementNormal(l); - - if(leNormal->GetMappingMode() == KFbxGeometryElement::eBY_POLYGON_VERTEX) { - switch (leNormal->GetReferenceMode()) - { - case KFbxGeometryElement::eDIRECT: - new_normal = leNormal->GetDirectArray().GetAt(source_vertex_id); - break; - case KFbxGeometryElement::eINDEX_TO_DIRECT: - { - int id = leNormal->GetIndexArray().GetAt(source_vertex_id); - new_normal = leNormal->GetDirectArray().GetAt(id); - } - break; - default: - break; // other reference modes not shown here! - } - } - if(l == 0) { - normals.push_back(KRVector3(new_normal[0], new_normal[1], new_normal[2])); - } - + + KFbxVector4 new_normal; + if(pMesh->GetPolygonVertexNormal(iPolygon, iVertex, new_normal)) { + normals.push_back(KRVector3(new_normal[0], new_normal[1], new_normal[2])); } + // ----====---- Read Tangents ----====---- for(int l = 0; l < tangent_count; ++l) { @@ -422,11 +403,11 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom if(leTangent->GetMappingMode() == KFbxGeometryElement::eBY_POLYGON_VERTEX) { switch (leTangent->GetReferenceMode()) { case KFbxGeometryElement::eDIRECT: - new_tangent = leTangent->GetDirectArray().GetAt(source_vertex_id); + new_tangent = leTangent->GetDirectArray().GetAt(lControlPointIndex); break; case KFbxGeometryElement::eINDEX_TO_DIRECT: { - int id = leTangent->GetIndexArray().GetAt(source_vertex_id); + int id = leTangent->GetIndexArray().GetAt(lControlPointIndex); new_tangent = leTangent->GetDirectArray().GetAt(id); } break; @@ -439,6 +420,7 @@ void LoadMesh(std::vector &resources, KFbxGeometryConverter *pGeom } } + diff --git a/objview/Classes/KRObjViewGLView.mm b/objview/Classes/KRObjViewGLView.mm index ce937d5..0d5c8b5 100644 --- a/objview/Classes/KRObjViewGLView.mm +++ b/objview/Classes/KRObjViewGLView.mm @@ -126,7 +126,8 @@ KRModelManager *pModelManager = [renderEngine getModelManager]; //m_scene.addInstance(pModelManager->getModel("fachwerkhaus12"), KRMat4()); //m_scene.addInstance(pModelManager->getModel("ballroom"), KRMat4()); - m_scene.addInstance(pModelManager->getModel("HoganCombined"), KRMat4()); + //m_scene.addInstance(pModelManager->getModel("HoganCombined"), KRMat4()); + m_scene.addInstance(pModelManager->getModel("degagetest"), KRMat4()); [renderEngine setNearZ: 25.0]; [renderEngine setFarZ: 5000.0];