Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. if (!visible) return true;
  2.  
  3. glPushMatrix();
  4. std::vector<BoneClass*>* bones = skeleton->GetBones();
  5.  
  6. bones->at(0)->SetPosition(position);
  7. bones->at(0)->SetRotation(rotation);
  8. bones->at(0)->Update();
  9. for (int i=1;i<bones->size();i++) {
  10. bones->at(i)->SetKeyFrame(frame);
  11. bones->at(i)->Update();
  12. };
  13.  
  14. std::vector<sf::Vector3f>* vertices = mesh->GetVertices();
  15. std::vector<sf::Vector3f>* normals = mesh->GetNormals();
  16. std::vector<float>* vertexArray = mesh->GetVertexArray();
  17. std::vector<float>* normalArray = mesh->GetNormalArray();
  18.  
  19. float mat1[16];
  20. float mat2[16];
  21.  
  22. glMatrixMode(GL_MODELVIEW);
  23. //Transforming vertices
  24. for (int i=0;i<vertices->size();i++) {
  25. int num = i*3;
  26. sf::Vector3f vert = vertices->at(i);
  27. sf::Vector3f norm = normals->at(i);
  28.  
  29. BoneClass* bone = bones->at(meshBoneIndices.at(weights->at(i).x));
  30. float* tm = bone->GetTransformationMatrix();
  31. glLoadIdentity();
  32.  
  33. glMultMatrixf(tm);
  34. glMultMatrixf(bone->GetLocalBindPoseMatrix());
  35. glTranslatef(vert.x, vert.y, vert.z);
  36. glGetFloatv(GL_MODELVIEW_MATRIX, mat1);
  37.  
  38. /*if (weights->at(i).y!=1) {
  39. for (int j=0;j<16;j++) {
  40. mat1[j]*=weights->at(i).y;
  41. };
  42. bone = bones->at(meshBoneIndices.at(weights->at(i).z));
  43. float* tm2 = bone->GetTransformationMatrix();
  44. glLoadIdentity();
  45. glMultMatrixf(tm2);
  46. glMultMatrixf(bone->GetLocalBindPoseMatrix());
  47. glTranslatef(vert.x, vert.y, vert.z);
  48. glGetFloatv(GL_MODELVIEW_MATRIX, mat2);
  49. for (int j=0;j<16;j++) {
  50. mat2[j]*=1-weights->at(i).y;
  51. };
  52. for (int j=0;j<16;j++) {
  53. mat1[j]+=mat2[j];
  54. };
  55. };*/
  56.  
  57. vertexArray->at(num) = mat1[12];
  58. vertexArray->at(num+1) = mat1[13];
  59. vertexArray->at(num+2) = mat1[14];
  60.  
  61. //Rotating normals
  62. float rotM[16];
  63. for (int j=0;j<16;j++) {
  64. rotM[j]=mat1[j];
  65. };
  66. rotM[3]=0; rotM[7]=0; rotM[11]=0;
  67. rotM[12]=0; rotM[13]=0; rotM[14]=0; rotM[15]=1;
  68. glLoadIdentity();
  69. glMultMatrixf(rotM);
  70. glTranslatef(norm.x, norm.y, norm.z);
  71. glGetFloatv(GL_MODELVIEW_MATRIX, mat1);
  72.  
  73. normalArray->at(num) = mat1[12];
  74. normalArray->at(num+1) = mat1[13];
  75. normalArray->at(num+2) = mat1[14];
  76. };
  77. glPopMatrix();
  78. /*std::vector<BoneClass*>* bones = skeleton->GetBones();
  79. for (int i=0; i<bones->size();i++) {
  80. bones->at(i)->Render();
  81. };*/
  82.  
  83. glPushMatrix();
  84. glScalef(scale.x, scale.y, scale.z);
  85. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  86. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  87. glEnableClientState(GL_NORMALIZE);
  88. glEnableClientState(GL_VERTEX_ARRAY);
  89. glEnableClientState(GL_NORMAL_ARRAY);
  90. glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  91. glVertexPointer(3, GL_FLOAT, 0, &vertexArray->at(0));
  92. glNormalPointer(GL_FLOAT, 0, &normalArray->at(0));
  93. glTexCoordPointer(2, GL_FLOAT, 0, &textureCoordsArray->at(0));
  94. glDrawElements(GL_TRIANGLES, indexArray->size(), GL_UNSIGNED_SHORT, &indexArray->at(0));
  95. glDisableClientState(GL_VERTEX_ARRAY);
  96. glDisableClientState(GL_NORMAL_ARRAY);
  97. glDisableClientState(GL_TEXTURE_COORD_ARRAY);
  98. glDisableClientState(GL_NORMALIZE);
  99. glPopMatrix();
  100. return true;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement