Corrected tangent and normal import from FBX files. FBX Import now functional.
--HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4022
This commit is contained in:
@@ -385,34 +385,15 @@ void LoadMesh(std::vector<KRResource *> &resources, KFbxGeometryConverter *pGeom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----====---- Read Normals ----====----
|
// ----====---- Read Normals ----====----
|
||||||
for(int l = 0; l < normal_count; ++l)
|
|
||||||
{
|
KFbxVector4 new_normal;
|
||||||
KFbxVector4 new_normal;
|
if(pMesh->GetPolygonVertexNormal(iPolygon, iVertex, new_normal)) {
|
||||||
KFbxGeometryElementNormal* leNormal = pMesh->GetElementNormal(l);
|
normals.push_back(KRVector3(new_normal[0], new_normal[1], new_normal[2]));
|
||||||
|
|
||||||
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]));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----====---- Read Tangents ----====----
|
// ----====---- Read Tangents ----====----
|
||||||
for(int l = 0; l < tangent_count; ++l)
|
for(int l = 0; l < tangent_count; ++l)
|
||||||
{
|
{
|
||||||
@@ -422,11 +403,11 @@ void LoadMesh(std::vector<KRResource *> &resources, KFbxGeometryConverter *pGeom
|
|||||||
if(leTangent->GetMappingMode() == KFbxGeometryElement::eBY_POLYGON_VERTEX) {
|
if(leTangent->GetMappingMode() == KFbxGeometryElement::eBY_POLYGON_VERTEX) {
|
||||||
switch (leTangent->GetReferenceMode()) {
|
switch (leTangent->GetReferenceMode()) {
|
||||||
case KFbxGeometryElement::eDIRECT:
|
case KFbxGeometryElement::eDIRECT:
|
||||||
new_tangent = leTangent->GetDirectArray().GetAt(source_vertex_id);
|
new_tangent = leTangent->GetDirectArray().GetAt(lControlPointIndex);
|
||||||
break;
|
break;
|
||||||
case KFbxGeometryElement::eINDEX_TO_DIRECT:
|
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);
|
new_tangent = leTangent->GetDirectArray().GetAt(id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -439,6 +420,7 @@ void LoadMesh(std::vector<KRResource *> &resources, KFbxGeometryConverter *pGeom
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,8 @@
|
|||||||
KRModelManager *pModelManager = [renderEngine getModelManager];
|
KRModelManager *pModelManager = [renderEngine getModelManager];
|
||||||
//m_scene.addInstance(pModelManager->getModel("fachwerkhaus12"), KRMat4());
|
//m_scene.addInstance(pModelManager->getModel("fachwerkhaus12"), KRMat4());
|
||||||
//m_scene.addInstance(pModelManager->getModel("ballroom"), 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 setNearZ: 25.0];
|
||||||
[renderEngine setFarZ: 5000.0];
|
[renderEngine setFarZ: 5000.0];
|
||||||
|
|||||||
Reference in New Issue
Block a user