PolyVertex.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * PolyVertex.cpp
  3. * TAU
  4. *
  5. * Created by Ivan Safrin on 3/14/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyVertex.h"
  10. using namespace Polycode;
  11. Vertex::Vertex() : Vector3(0,0,0) {
  12. texCoord = new Vector2(0,0);
  13. normal = new Vector3(0,0,0);
  14. useVertexColor = false;
  15. }
  16. Vertex::Vertex(Number pos_x, Number pos_y, Number pos_z, Number nor_x, Number nor_y, Number nor_z) : Vector3(pos_x, pos_y, pos_z) {
  17. normal = new Vector3(nor_x, nor_y, nor_z);
  18. texCoord = new Vector2(0,0);
  19. useVertexColor = false;
  20. restPosition.set(pos_x, pos_y, pos_z);
  21. }
  22. Vertex::Vertex(Number pos_x, Number pos_y, Number pos_z, Number nor_x, Number nor_y, Number nor_z, Number u, Number v): Vector3(pos_x, pos_y, pos_z) {
  23. normal = new Vector3(nor_x, nor_y, nor_z);
  24. texCoord = new Vector2(u,v);
  25. useVertexColor = false;
  26. restPosition.set(pos_x, pos_y, pos_z);
  27. }
  28. Vertex::Vertex(Number x, Number y, Number z) : Vector3(x,y,z) {
  29. texCoord = new Vector2(0,0);
  30. normal = new Vector3(0,0,0);
  31. useVertexColor = false;
  32. restPosition.set(x, y, z);
  33. }
  34. Vertex::Vertex(Number x, Number y, Number z, Number u, Number v) : Vector3(x,y,z) {
  35. texCoord = new Vector2(u,v);
  36. normal = new Vector3(0,0,0);
  37. useVertexColor = false;
  38. restPosition.set(x, y, z);
  39. }
  40. void Vertex::addBoneAssignment(unsigned int boneID, Number boneWeight) {
  41. BoneAssignment *newBas = new BoneAssignment();
  42. newBas->boneID = boneID;
  43. if(boneWeight > 1)
  44. boneWeight = 1;
  45. if(boneWeight < 0)
  46. boneWeight = 0;
  47. newBas->weight = boneWeight;
  48. boneAssignments.push_back(newBas);
  49. }
  50. void Vertex::setNormal(Number x, Number y, Number z) {
  51. normal->x = x;
  52. normal->y = y;
  53. normal->z = z;
  54. }
  55. void Vertex::normalizeWeights() {
  56. Number allWeights = 0;
  57. // if(boneAssignments.size() == 1)
  58. // if(boneAssignments[0]->weight < 1)
  59. // return;
  60. for(int i =0 ;i < boneAssignments.size(); i++) {
  61. allWeights += boneAssignments[i]->weight;
  62. }
  63. for(int i =0 ;i < boneAssignments.size(); i++) {
  64. boneAssignments[i]->weight *= 1.0f/allWeights;
  65. }
  66. }
  67. int Vertex::getNumBoneAssignments() {
  68. return boneAssignments.size();
  69. }
  70. BoneAssignment *Vertex::getBoneAssignment(unsigned int index) {
  71. return boneAssignments[index];
  72. }
  73. Vertex::~Vertex() {
  74. // delete normal;
  75. // delete texCoord;
  76. }
  77. Vector2 *Vertex::getTexCoord() {
  78. return texCoord;
  79. }
  80. void Vertex::setTexCoord(Number u, Number v) {
  81. texCoord->x = u;
  82. texCoord->y = v;
  83. }