PolyVertex.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * PolyVertex.cpp
  3. * Poly
  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 = Vector2(0,0);
  13. normal = 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 = Vector3(nor_x, nor_y, nor_z);
  18. texCoord = 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 = Vector3(nor_x, nor_y, nor_z);
  24. texCoord = 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. useVertexColor = false;
  30. restPosition.set(x, y, z);
  31. }
  32. Vertex::Vertex(Number x, Number y, Number z, Number u, Number v) : Vector3(x,y,z) {
  33. texCoord = Vector2(u,v);
  34. useVertexColor = false;
  35. restPosition.set(x, y, z);
  36. }
  37. void Vertex::addBoneAssignment(unsigned int boneID, Number boneWeight) {
  38. BoneAssignment *newBas = new BoneAssignment();
  39. newBas->boneID = boneID;
  40. if(boneWeight > 1)
  41. boneWeight = 1;
  42. if(boneWeight < 0)
  43. boneWeight = 0;
  44. newBas->weight = boneWeight;
  45. boneAssignments.push_back(newBas);
  46. }
  47. void Vertex::setNormal(Number x, Number y, Number z) {
  48. normal.x = x;
  49. normal.y = y;
  50. normal.z = z;
  51. }
  52. void Vertex::normalizeWeights() {
  53. Number allWeights = 0;
  54. // if(boneAssignments.size() == 1)
  55. // if(boneAssignments[0]->weight < 1)
  56. // return;
  57. for(int i =0 ;i < boneAssignments.size(); i++) {
  58. allWeights += boneAssignments[i]->weight;
  59. }
  60. for(int i =0 ;i < boneAssignments.size(); i++) {
  61. boneAssignments[i]->weight *= 1.0f/allWeights;
  62. }
  63. }
  64. int Vertex::getNumBoneAssignments() {
  65. return boneAssignments.size();
  66. }
  67. BoneAssignment *Vertex::getBoneAssignment(unsigned int index) {
  68. return boneAssignments[index];
  69. }
  70. Vertex::~Vertex() {
  71. // delete normal;
  72. // delete texCoord;
  73. }
  74. Vector2 Vertex::getTexCoord() {
  75. return texCoord;
  76. }
  77. void Vertex::setTexCoord(Number u, Number v) {
  78. texCoord.x = u;
  79. texCoord.y = v;
  80. }