Revert "FBXConverter : import FbxCamera correctly"

This reverts commit cdfdd75a66.
pull/5057/head
Suhajda Tamás 2023-04-05 12:19:39 +02:00
parent 23a3e8cf2d
commit 74509ef8bd
2 changed files with 12 additions and 27 deletions

View File

@ -152,7 +152,7 @@ void FBXConverter::ConvertRootNode() {
mSceneOut->mRootNode->mName.Set(unique_name); mSceneOut->mRootNode->mName.Set(unique_name);
// root has ID 0 // root has ID 0
ConvertNodes(0L, mSceneOut->mRootNode, mSceneOut->mRootNode, aiMatrix4x4()); ConvertNodes(0L, mSceneOut->mRootNode, mSceneOut->mRootNode);
} }
static std::string getAncestorBaseName(const aiNode *node) { static std::string getAncestorBaseName(const aiNode *node) {
@ -196,7 +196,7 @@ struct FBXConverter::PotentialNode {
/// todo: get bone from stack /// todo: get bone from stack
/// todo: make map of aiBone* to aiNode* /// todo: make map of aiBone* to aiNode*
/// then update convert clusters to the new format /// then update convert clusters to the new format
void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node, const aiMatrix4x4 &globalTransform) { void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node) {
const std::vector<const Connection *> &conns = doc.GetConnectionsByDestinationSequenced(id, "Model"); const std::vector<const Connection *> &conns = doc.GetConnectionsByDestinationSequenced(id, "Model");
std::vector<PotentialNode> nodes; std::vector<PotentialNode> nodes;
@ -290,15 +290,14 @@ void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node,
} }
// recursion call - child nodes // recursion call - child nodes
aiMatrix4x4 newGlobalMatrix = globalTransform * nodes_chain.front().mNode->mTransformation; ConvertNodes(model->ID(), last_parent, root_node);
ConvertNodes(model->ID(), last_parent, root_node, newGlobalMatrix);
if (doc.Settings().readLights) { if (doc.Settings().readLights) {
ConvertLights(*model, node_name); ConvertLights(*model, node_name);
} }
if (doc.Settings().readCameras) { if (doc.Settings().readCameras) {
ConvertCameras(*model, node_name, newGlobalMatrix); ConvertCameras(*model, node_name);
} }
nodes.push_back(std::move(nodes_chain.front())); nodes.push_back(std::move(nodes_chain.front()));
@ -328,14 +327,12 @@ void FBXConverter::ConvertLights(const Model &model, const std::string &orig_nam
} }
} }
void FBXConverter::ConvertCameras(const Model &model, void FBXConverter::ConvertCameras(const Model &model, const std::string &orig_name) {
const std::string &orig_name,
const aiMatrix4x4 &transform) {
const std::vector<const NodeAttribute *> &node_attrs = model.GetAttributes(); const std::vector<const NodeAttribute *> &node_attrs = model.GetAttributes();
for (const NodeAttribute *attr : node_attrs) { for (const NodeAttribute *attr : node_attrs) {
const Camera *const cam = dynamic_cast<const Camera *>(attr); const Camera *const cam = dynamic_cast<const Camera *>(attr);
if (cam) { if (cam) {
ConvertCamera(*cam, orig_name, transform); ConvertCamera(*cam, orig_name);
} }
} }
} }
@ -416,9 +413,7 @@ void FBXConverter::ConvertLight(const Light &light, const std::string &orig_name
} }
} }
void FBXConverter::ConvertCamera(const Camera &cam, void FBXConverter::ConvertCamera(const Camera &cam, const std::string &orig_name) {
const std::string &orig_name,
aiMatrix4x4 transform) {
cameras.push_back(new aiCamera()); cameras.push_back(new aiCamera());
aiCamera *const out_camera = cameras.back(); aiCamera *const out_camera = cameras.back();
@ -426,16 +421,9 @@ void FBXConverter::ConvertCamera(const Camera &cam,
out_camera->mAspect = cam.AspectWidth() / cam.AspectHeight(); out_camera->mAspect = cam.AspectWidth() / cam.AspectHeight();
aiVector3D pos = cam.Position();
out_camera->mLookAt = cam.InterestPosition();
out_camera->mUp = pos + cam.UpVector();
transform.Inverse();
pos *= transform;
out_camera->mLookAt *= transform;
out_camera->mUp *= transform;
out_camera->mLookAt -= pos;
out_camera->mUp -= pos;
out_camera->mPosition = aiVector3D(0.0f); out_camera->mPosition = aiVector3D(0.0f);
out_camera->mLookAt = aiVector3D(1.0f, 0.0f, 0.0f);
out_camera->mUp = aiVector3D(0.0f, 1.0f, 0.0f);
out_camera->mHorizontalFOV = AI_DEG_TO_RAD(cam.FieldOfView()); out_camera->mHorizontalFOV = AI_DEG_TO_RAD(cam.FieldOfView());

View File

@ -134,22 +134,19 @@ private:
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
// collect and assign child nodes // collect and assign child nodes
void ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node, void ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node);
const aiMatrix4x4 &globalTransform);
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void ConvertLights(const Model& model, const std::string &orig_name ); void ConvertLights(const Model& model, const std::string &orig_name );
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void ConvertCameras(const Model& model, const std::string &orig_name, void ConvertCameras(const Model& model, const std::string &orig_name );
const aiMatrix4x4 &transform);
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void ConvertLight( const Light& light, const std::string &orig_name ); void ConvertLight( const Light& light, const std::string &orig_name );
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void ConvertCamera(const Camera& cam, const std::string &orig_name, void ConvertCamera( const Camera& cam, const std::string &orig_name );
aiMatrix4x4 transform);
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
void GetUniqueName( const std::string &name, std::string& uniqueName ); void GetUniqueName( const std::string &name, std::string& uniqueName );