Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (!visible) return true;
- glPushMatrix();
- std::vector<BoneClass*>* bones = skeleton->GetBones();
- bones->at(0)->SetPosition(position);
- bones->at(0)->SetRotation(rotation);
- bones->at(0)->Update();
- for (int i=1;i<bones->size();i++) {
- bones->at(i)->SetKeyFrame(frame);
- bones->at(i)->Update();
- };
- std::vector<sf::Vector3f>* vertices = mesh->GetVertices();
- std::vector<sf::Vector3f>* normals = mesh->GetNormals();
- std::vector<float>* vertexArray = mesh->GetVertexArray();
- std::vector<float>* normalArray = mesh->GetNormalArray();
- float mat1[16];
- float mat2[16];
- glMatrixMode(GL_MODELVIEW);
- //Transforming vertices
- for (int i=0;i<vertices->size();i++) {
- int num = i*3;
- sf::Vector3f vert = vertices->at(i);
- sf::Vector3f norm = normals->at(i);
- BoneClass* bone = bones->at(meshBoneIndices.at(weights->at(i).x));
- float* tm = bone->GetTransformationMatrix();
- glLoadIdentity();
- glMultMatrixf(tm);
- glMultMatrixf(bone->GetLocalBindPoseMatrix());
- glTranslatef(vert.x, vert.y, vert.z);
- glGetFloatv(GL_MODELVIEW_MATRIX, mat1);
- /*if (weights->at(i).y!=1) {
- for (int j=0;j<16;j++) {
- mat1[j]*=weights->at(i).y;
- };
- bone = bones->at(meshBoneIndices.at(weights->at(i).z));
- float* tm2 = bone->GetTransformationMatrix();
- glLoadIdentity();
- glMultMatrixf(tm2);
- glMultMatrixf(bone->GetLocalBindPoseMatrix());
- glTranslatef(vert.x, vert.y, vert.z);
- glGetFloatv(GL_MODELVIEW_MATRIX, mat2);
- for (int j=0;j<16;j++) {
- mat2[j]*=1-weights->at(i).y;
- };
- for (int j=0;j<16;j++) {
- mat1[j]+=mat2[j];
- };
- };*/
- vertexArray->at(num) = mat1[12];
- vertexArray->at(num+1) = mat1[13];
- vertexArray->at(num+2) = mat1[14];
- //Rotating normals
- float rotM[16];
- for (int j=0;j<16;j++) {
- rotM[j]=mat1[j];
- };
- rotM[3]=0; rotM[7]=0; rotM[11]=0;
- rotM[12]=0; rotM[13]=0; rotM[14]=0; rotM[15]=1;
- glLoadIdentity();
- glMultMatrixf(rotM);
- glTranslatef(norm.x, norm.y, norm.z);
- glGetFloatv(GL_MODELVIEW_MATRIX, mat1);
- normalArray->at(num) = mat1[12];
- normalArray->at(num+1) = mat1[13];
- normalArray->at(num+2) = mat1[14];
- };
- glPopMatrix();
- /*std::vector<BoneClass*>* bones = skeleton->GetBones();
- for (int i=0; i<bones->size();i++) {
- bones->at(i)->Render();
- };*/
- glPushMatrix();
- glScalef(scale.x, scale.y, scale.z);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glEnableClientState(GL_NORMALIZE);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, &vertexArray->at(0));
- glNormalPointer(GL_FLOAT, 0, &normalArray->at(0));
- glTexCoordPointer(2, GL_FLOAT, 0, &textureCoordsArray->at(0));
- glDrawElements(GL_TRIANGLES, indexArray->size(), GL_UNSIGNED_SHORT, &indexArray->at(0));
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisableClientState(GL_NORMALIZE);
- glPopMatrix();
- return true;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement