PolyBone.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /*
  2. * PolyBone.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 9/5/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyBone.h"
  10. using namespace Polycode;
  11. Bone::Bone(String boneName) : SceneEntity() {
  12. this->boneName = boneName;
  13. // boneMesh = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 0.1, 0.1, 0.1);
  14. this->depthTest = false;
  15. parentBone = NULL;
  16. boneMatrix.init();
  17. // addChild(boneMesh);
  18. boneMesh = new Mesh(Mesh::QUAD_MESH);
  19. boneMesh->createBox(0.2,0.2,0.2);
  20. }
  21. Bone::~Bone() {
  22. }
  23. void Bone::setParentBone(Bone *bone) {
  24. parentBone = bone;
  25. }
  26. void Bone::addChildBone(Bone *bone) {
  27. childBones.push_back(bone);
  28. }
  29. Bone* Bone::getParentBone() {
  30. return parentBone;
  31. }
  32. int Bone::getNumChildBones() {
  33. return childBones.size();
  34. }
  35. Bone *Bone::getChildBone(unsigned int index) {
  36. if(index > childBones.size()-1)
  37. index = childBones.size()-1;
  38. return childBones[index];
  39. }
  40. Matrix4 Bone::getBoneMatrix() {
  41. if(parentBone)
  42. return boneMatrix * parentBone->getBoneMatrix();
  43. else {
  44. return boneMatrix;
  45. }
  46. }
  47. Matrix4 Bone::getFinalMatrix() {
  48. Matrix4 final = boneMatrix;
  49. if(parentBone) {
  50. final = final * parentBone->getFinalMatrix();
  51. }
  52. return final;
  53. }
  54. void Bone::setBoneMatrix(Matrix4 matrix) {
  55. boneMatrix = matrix;
  56. }
  57. void Bone::setBaseMatrix(Matrix4 matrix) {
  58. baseMatrix = matrix;
  59. }
  60. Matrix4 Bone::getRestMatrix() {
  61. return restMatrix;
  62. }
  63. Matrix4 Bone::getParentRestMatrix() {
  64. if(parentBone)
  65. return parentBone->getFullRestMatrix();
  66. else {
  67. Matrix4 ident;
  68. ident.identity();
  69. return ident;
  70. }
  71. }
  72. Matrix4 Bone::getFullBaseMatrix() {
  73. if(parentBone)
  74. return baseMatrix * parentBone->getFullBaseMatrix();
  75. else {
  76. return baseMatrix;
  77. }
  78. }
  79. Matrix4 Bone::getFullRestMatrix() {
  80. if(parentBone)
  81. return restMatrix * parentBone->getFullRestMatrix();
  82. else {
  83. return restMatrix;
  84. }
  85. }
  86. void Bone::setRestMatrix(Matrix4 matrix) {
  87. restMatrix = matrix;
  88. }
  89. String Bone::getName() {
  90. return boneName;
  91. }
  92. void Bone::enableBoneLabel(String fontLabel, Number size, Number scale, Color labelColor) {
  93. SceneLabel *label = new SceneLabel(fontLabel, boneName, size, scale, Label::ANTIALIAS_FULL);
  94. label->setColor(labelColor);
  95. label->billboardMode = true;
  96. label->depthTest = false;
  97. addEntity(label);
  98. }
  99. void Bone::Render() {
  100. CoreServices::getInstance()->getRenderer()->setTexture(NULL);
  101. // renderer->pushDataArrayForMesh(boneMesh, RenderDataArray::COLOR_DATA_ARRAY);
  102. renderer->pushDataArrayForMesh(boneMesh, RenderDataArray::VERTEX_DATA_ARRAY);
  103. renderer->pushDataArrayForMesh(boneMesh, RenderDataArray::TEXCOORD_DATA_ARRAY);
  104. renderer->pushDataArrayForMesh(boneMesh, RenderDataArray::NORMAL_DATA_ARRAY);
  105. renderer->drawArrays(boneMesh->getMeshType());
  106. }