Столкнулся со странной проблемой, вроде "ставлю" нормали но в итоге мешь не сглаженный.... Толи макс переопределяет их, то ли я, что-то упустил... Пс когда писал на скрипте там нормали ставились нормально..... Правда так же пересчитывались, стоило только набросить едит мешь.....
CODE
TriObject *OBJMesh::BuildMesh(MeshDataT *MeshData) {
mtri = CreateNewTriObject();
Mesh mesh;
int PrimitiveSize = (int)MeshData->size();
int VertexSize = 0;
int FaceSize = 0;
for (int i = 0; i < PrimitiveSize; i++){ // Get amount of all Vertex and all Faces
VertexSize += (int) MeshData->at(i).second.size();
if (MeshData->at(i).first == 0) //TRI
FaceSize += (int) MeshData->at(i).second.size()/3;
if (MeshData->at(i).first == 2) //FAN
FaceSize += (int) MeshData->at(i).second.size()-2;
}
mesh.setNumVerts (VertexSize);
mesh.setNumTVerts(VertexSize);
mesh.setNumFaces (FaceSize);
mesh.setNumTVFaces (FaceSize);
int vertindex = 0;
int fvertindex = 0;
int FanVertCorrection = 0;
int faceindex = 0;
for ( int i = 0; i < PrimitiveSize; i++) {
for (int j = 0; j < MeshData->at(i).second.size(); j++) {
mesh.setVert (vertindex, MeshData->at(i).second.at(j).Position);
mesh.setNormal (vertindex, MeshData->at(i).second.at(j).Normal);
mesh.setTVert (vertindex, MeshData->at(i).second.at(j).Texture);
vertindex++;
}
switch (MeshData->at(i).first) {
case DSF_TRI: //-- 012 234 567 8910 ......
for (int n = 0; n < MeshData->at(i).second.size() / 3; n++ ) {
mesh.faces[faceindex].setVerts(fvertindex+2,fvertindex+1,fvertindex);
mesh.faces[faceindex].setEdgeVisFlags(1,1,1);
mesh.tvFace[faceindex].setTVerts(fvertindex+2,fvertindex+1,fvertindex);
mesh.faces[faceindex].setSmGroup(1);
faceindex +=1;
fvertindex+=3;
}
break;
case DSF_TRISTRIP:
break;
case DSF_TRIFAN: // --012 023 034 045 056......
FanVertCorrection = fvertindex; // Correction first vertex of FAN patch, this is need shift after any loop (after and before)
for (int n = 0; n < MeshData->at(i).second.size()-2; n++ ) {
mesh.faces[faceindex].setVerts(fvertindex+2,fvertindex+1, FanVertCorrection);
mesh.faces[faceindex].setEdgeVisFlags(1,1,1);
mesh.tvFace[faceindex].setTVerts(fvertindex+2,fvertindex+1, FanVertCorrection);
mesh.faces[faceindex].setSmGroup(1);
faceindex +=1;
fvertindex +=1;
}
fvertindex +=2;
break;
}
}
mtri->mesh = mesh;
return this->mtri;
}
mtri = CreateNewTriObject();
Mesh mesh;
int PrimitiveSize = (int)MeshData->size();
int VertexSize = 0;
int FaceSize = 0;
for (int i = 0; i < PrimitiveSize; i++){ // Get amount of all Vertex and all Faces
VertexSize += (int) MeshData->at(i).second.size();
if (MeshData->at(i).first == 0) //TRI
FaceSize += (int) MeshData->at(i).second.size()/3;
if (MeshData->at(i).first == 2) //FAN
FaceSize += (int) MeshData->at(i).second.size()-2;
}
mesh.setNumVerts (VertexSize);
mesh.setNumTVerts(VertexSize);
mesh.setNumFaces (FaceSize);
mesh.setNumTVFaces (FaceSize);
int vertindex = 0;
int fvertindex = 0;
int FanVertCorrection = 0;
int faceindex = 0;
for ( int i = 0; i < PrimitiveSize; i++) {
for (int j = 0; j < MeshData->at(i).second.size(); j++) {
mesh.setVert (vertindex, MeshData->at(i).second.at(j).Position);
mesh.setNormal (vertindex, MeshData->at(i).second.at(j).Normal);
mesh.setTVert (vertindex, MeshData->at(i).second.at(j).Texture);
vertindex++;
}
switch (MeshData->at(i).first) {
case DSF_TRI: //-- 012 234 567 8910 ......
for (int n = 0; n < MeshData->at(i).second.size() / 3; n++ ) {
mesh.faces[faceindex].setVerts(fvertindex+2,fvertindex+1,fvertindex);
mesh.faces[faceindex].setEdgeVisFlags(1,1,1);
mesh.tvFace[faceindex].setTVerts(fvertindex+2,fvertindex+1,fvertindex);
mesh.faces[faceindex].setSmGroup(1);
faceindex +=1;
fvertindex+=3;
}
break;
case DSF_TRISTRIP:
break;
case DSF_TRIFAN: // --012 023 034 045 056......
FanVertCorrection = fvertindex; // Correction first vertex of FAN patch, this is need shift after any loop (after and before)
for (int n = 0; n < MeshData->at(i).second.size()-2; n++ ) {
mesh.faces[faceindex].setVerts(fvertindex+2,fvertindex+1, FanVertCorrection);
mesh.faces[faceindex].setEdgeVisFlags(1,1,1);
mesh.tvFace[faceindex].setTVerts(fvertindex+2,fvertindex+1, FanVertCorrection);
mesh.faces[faceindex].setSmGroup(1);
faceindex +=1;
fvertindex +=1;
}
fvertindex +=2;
break;
}
}
mtri->mesh = mesh;
return this->mtri;
}