BabylonNode.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "BabylonNode.h"
  2. #include "BabylonNode.h"
  3. #include "stdafx.h"
  4. #include "BabylonNode.h"
  5. #include "NodeHelpers.h"
  6. BabylonNode::BabylonNode(FbxNode* fbxNode) : _node(fbxNode){
  7. _localTransform = ConvertToBabylonCoordinateSystem(CalculateLocalTransform( fbxNode));
  8. _globalTransform = ConvertToBabylonCoordinateSystem(CalculateLocalTransform(fbxNode));
  9. auto childCount = fbxNode->GetChildCount();
  10. for (int i = 0; i < childCount; ++i){
  11. _children.emplace_back(fbxNode->GetChild(i));
  12. }
  13. }
  14. BabylonNodeType BabylonNode::nodeType(){
  15. if (_node->GetMesh()){
  16. return BabylonNodeType::Mesh;
  17. }
  18. if (_node->GetCamera()){
  19. return BabylonNodeType::Camera;
  20. }
  21. if (_node->GetSkeleton()){
  22. return BabylonNodeType::Skeleton;
  23. }
  24. if (_node->GetLight()) {
  25. return BabylonNodeType::Light;
  26. }
  27. return BabylonNodeType::Empty;
  28. }
  29. bool BabylonNode::isEmptySkeletonOrEmptyMesh()
  30. {
  31. auto type = nodeType();
  32. switch (type)
  33. {
  34. case BabylonNodeType::Mesh:
  35. {
  36. auto mesh = _node->GetMesh();
  37. if (mesh->GetPolygonCount() == 0) {
  38. return true;
  39. }
  40. else {
  41. return false;
  42. }
  43. }
  44. case BabylonNodeType::Skeleton:
  45. case BabylonNodeType::Empty:
  46. return true;
  47. default:
  48. return false;
  49. }
  50. }
  51. bool BabylonNode::isEmptySkeletonOrEmptyMeshRecursive()
  52. {
  53. if (!isEmptySkeletonOrEmptyMesh()) {
  54. return false;
  55. }
  56. for (auto& c : children()) {
  57. if (!c.isEmptySkeletonOrEmptyMeshRecursive()) {
  58. return false;
  59. }
  60. }
  61. return true;
  62. }
  63. babylon_vector3 BabylonNode::localScale(FbxTime time){
  64. auto transform = ConvertToBabylonCoordinateSystem(CalculateLocalTransform(_node,time));
  65. return transform.GetS();
  66. }
  67. babylon_vector4 BabylonNode::localRotationQuat(){
  68. auto ret = _localTransform.GetQ();
  69. return babylon_vector4(ret[0], ret[1], ret[2], ret[3]);
  70. }
  71. babylon_vector4 BabylonNode::localRotationQuat(FbxTime time){
  72. auto transform = ConvertToBabylonCoordinateSystem(CalculateLocalTransform(_node, time));
  73. auto ret = transform.GetQ();
  74. return babylon_vector4(ret[0], ret[1], ret[2], ret[3]);
  75. }
  76. babylon_vector3 BabylonNode::localTranslate(FbxTime time){
  77. auto transform = ConvertToBabylonCoordinateSystem(CalculateLocalTransform(_node, time));
  78. return transform.GetT();
  79. }