Преглед изворни кода

Fixed mesh particle emitter to work with new mesh system

Ivan Safrin пре 11 година
родитељ
комит
213fd02556
1 измењених фајлова са 19 додато и 13 уклоњено
  1. 19 13
      Core/Contents/Source/PolyParticleEmitter.cpp

+ 19 - 13
Core/Contents/Source/PolyParticleEmitter.cpp

@@ -240,30 +240,36 @@ void SceneParticleEmitter::rebuildParticles() {
                     mesh->setMeshType(Mesh::TRI_MESH);
                     
                     int indexOffset = 0;
+
+					mesh->indexedMesh = true;
                     
                     int meshIndex = particles[i].varianceIndex;
                     if(meshIndex < sourceMeshes.size()) {
                         
-                        indexOffset = mesh->getVertexCount();
+						indexOffset = mesh->vertexPositionArray.data.size()/3;
                         
-                        // TODO: fix
-                        /*
-                        for(int v=0; v <  sourceMeshes[meshIndex]->getVertexCount(); v++) {
-                            Vertex *sv = sourceMeshes[meshIndex]->getVertex(v);
-                            
-                            Vector3 vpos = Vector3(sv->x, sv->y, sv->z) * finalParticleSize;
+						Mesh *sourceMesh = sourceMeshes[meshIndex];
+
+						mesh->setMeshType(sourceMesh->getMeshType());
+
+                        for(int v=0; v <  sourceMesh->getVertexCount(); v++) {
+                           
+							Vector3 vpos = Vector3(sourceMesh->vertexPositionArray.data[(v * 3)], sourceMesh->vertexPositionArray.data[(v * 3)+1], sourceMesh->vertexPositionArray.data[(v * 3)+2]) * finalParticleSize;
                             vpos = q.applyTo(vpos);
                             
                             vpos += particlePosition;
-                            mesh->addVertexWithUV(vpos.x, vpos.y, vpos.z, sv->texCoord.x, sv->texCoord.y);
-                            mesh->addColor(vertexColor);
-                            mesh->addNormal(q.applyTo(sv->normal);
+							mesh->addVertex(vpos.x, vpos.y, vpos.z);
+							mesh->addTexCoord(sourceMesh->vertexTexCoordArray.data[(v * 2)], sourceMesh->vertexTexCoordArray.data[(v * 2) + 1]);
+							mesh->addColor(vertexColor);
+							Vector3 svNormal = Vector3(sourceMesh->vertexNormalArray.data[(v * 3)], sourceMesh->vertexNormalArray.data[(v * 3) + 1], sourceMesh->vertexNormalArray.data[(v * 3) + 2]);
+							svNormal = q.applyTo(svNormal);
+							mesh->addNormal(svNormal.x, svNormal.y, svNormal.z);
                         }
                         
-                        for(int v=0; v < sourceMeshes[meshIndex]->getIndexCount(); v++) {
-                            mesh->addIndex(indexOffset + sourceMeshes[meshIndex]->getIndexAt(v));
+						for (int v = 0; v < sourceMesh->indexArray.data.size(); v++) {
+							mesh->addIndex(indexOffset + sourceMesh->indexArray.data[v]);
                         }
-                         */
+                         
                     }
                     
                 } else {