- Timestamp:
- Jun 17, 2006, 1:33:05 AM (18 years ago)
- Location:
- branches/bsp_model/src/lib/graphics/importer/md3
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/bsp_model/src/lib/graphics/importer/md3/md3_data.cc
r8490 r8549 38 38 { 39 39 40 40 this->parentTagIndex = -1; 41 this->parent = NULL; 41 42 42 43 this->loadModel(modelFileName); … … 55 56 } 56 57 58 59 /** 60 * link a model at the specified tag position to this model. if the position is allready 61 * occupied, the old submodel will be replaced 62 * 63 * @param tagIndex: tag to link the submodel to 64 * @param child: the submodel that should be linked to this model 65 */ 66 void MD3Data::addLinkedModel(int tagIndex, MD3Data* child) 67 { 68 this->sortedMap[tagIndex] = child; 69 child->parentTagIndex = tagIndex; 70 } 57 71 58 72 -
branches/bsp_model/src/lib/graphics/importer/md3/md3_data.h
r8547 r8549 69 69 virtual ~MD3Data(); 70 70 71 void addLinkedModel(int tagIndex, MD3Data* child); 72 71 73 72 74 private: … … 85 87 int readMeshVertices(FILE* pFile, int fileOffset, int mesh); 86 88 89 87 90 public: 88 91 89 92 MD3Header* header; //!< the header file 93 94 std::map<int, MD3Data*> sortedMap; //!< map 95 int parentTagIndex; //!< the tag index of the parent model 96 MD3Data* parent; //!< the parent model 90 97 91 98 std::string filename; //!< the name of the file as recorded in the .md3 file … … 108 115 MD3Mesh** meshes; //!< array of meshes in the model. each containing the mesh for each of the animation 109 116 110 int parentTagIndex; //!< tag index111 112 //MD3Model* parent; //!< reference to the MD3Model113 114 115 117 }; 116 118 -
branches/bsp_model/src/lib/graphics/importer/md3/md3_model.cc
r8533 r8549 40 40 41 41 42 43 /** 44 * this draws the md3 model 45 */ 46 void MD3Model::draw() 47 { 48 //draw current bone frame 49 #if 0 50 if( this->bDrawBones) 51 { 52 //get bone frame, interpolate if necessary 53 if( model.interpolationFraction!=0.0 && model.currentFrame!=model.nextFrame) 54 //interpolate bone frame 55 drawBoneFrame(interpolateBoneFrame(model.boneFrames[model.currentFrame], model.boneFrames[model.nextFrame], model.interpolationFraction)); 56 else 57 //stick with current bone frame 58 drawBoneFrame(model.boneFrames[model.currentFrame]); 59 } 60 61 //draw all meshes of current frame of this model 62 for (int i=0; i<model.meshNum; i++) { 63 MD3GLMesh mesh = (MD3GLMesh)model.meshes[i]; 64 65 gl.glBlendFunc(mesh.GLSrcBlendFunc, mesh.GLDstBlendFunc); 66 gl.glDepthMask(mesh.GLDepthMask); 67 if (mesh.textureNum > 0 && mesh.textures[0]!=null) 68 gl.glBindTexture(GLEnum.GL_TEXTURE_2D, ((MD3GLTexture)mesh.textures[0]).bind); 69 else 70 gl.glBindTexture(GLEnum.GL_TEXTURE_2D, 0); 71 72 //get mesh frame, do interpolation if necessary 73 Vec3[] frame; 74 if (model.interpolationFraction!=0.0 && model.currentFrame!=model.nextFrame) 75 //interpolate mesh frame between the 2 current mesh frames 76 frame=interpolateMeshFrame(mesh.meshFrames[model.currentFrame], mesh.meshFrames[model.nextFrame], model.interpolationFraction); 77 else 78 //no interpolation needed, just draw current frame 79 frame=mesh.meshFrames[model.currentFrame]; 80 81 drawMesh(mesh, frame); 82 83 //draw vertex normals 84 if (canvas.showVertexNormals) { 85 //get vertex normals, interpolate if necessary 86 if (model.interpolationFraction!=0.0 && model.currentFrame!=model.nextFrame) 87 //interpolate vertex normals 88 drawVertexNormals(frame, interpolateVertexNormals(mesh.meshVertexNormals[model.currentFrame], mesh.meshVertexNormals[model.nextFrame], model.interpolationFraction)); 89 else 90 //stick with current vertex normals 91 drawVertexNormals(frame, mesh.meshVertexNormals[model.currentFrame]); 92 } 93 } 94 95 //draw all models linked to this model 96 97 Iterator it=model.linkedModels(); 98 while (it.hasNext()) { 99 MD3Model child=(MD3Model)it.next(); 100 101 //build transformation array m from matrix, interpolate if necessary 102 float[] m=new float[16]; 103 MD3Tag currFrameTag=model.boneFrames[model.currentFrame].tags[child.getParentTagIndex()]; 104 if (model.interpolationFraction!=0.0f && model.currentFrame!=model.nextFrame) { 105 //we need to interpolate 106 MD3Tag nextFrameTag=model.boneFrames[model.nextFrame].tags[child.getParentTagIndex()]; 107 m=interpolateTransformation(currFrameTag, nextFrameTag, model.interpolationFraction); 108 } 109 else { 110 //no interpolation needed, stay with last transformation 111 //OpenGL matrix is in column-major order 112 m[0] = currFrameTag.matrix[0][0]; m[4] = currFrameTag.matrix[0][1]; m[8] = currFrameTag.matrix[0][2]; m[12] = currFrameTag.position.x; 113 m[1] = currFrameTag.matrix[1][0]; m[5] = currFrameTag.matrix[1][1]; m[9] = currFrameTag.matrix[1][2]; m[13] = currFrameTag.position.y; 114 m[2] = currFrameTag.matrix[2][0]; m[6] = currFrameTag.matrix[2][1]; m[10]= currFrameTag.matrix[2][2]; m[14] = currFrameTag.position.z; 115 m[3] = 0.0f; m[7] = 0.0f; m[11]= 0.0f; m[15] = 1.0f; 116 } 117 118 //switch to child coord system and draw child 119 gl.glPushMatrix(); 120 gl.glMultMatrixf(m); 121 child.accept(this); 122 gl.glPopMatrix(); 123 } 124 #endif 125 } 126 127 128 129 42 130 } -
branches/bsp_model/src/lib/graphics/importer/md3/md3_model.h
r8490 r8549 26 26 ~MD3Model(); 27 27 28 virtual void setAnimation(int animNum, int playbackMode = 0) {} 29 28 30 virtual void tick(float dt) {} 29 virtual void setAnimation(int animNum, int playbackMode = 0) {} 31 32 virtual void draw(); 30 33 31 34 private: 32 35 MD3Data* md3Data; //!< reference to the md3 model data 36 37 bool bDrawBones; //!< draws the bone frames too 33 38 }; 34 39
Note: See TracChangeset
for help on using the changeset viewer.