Triangle Mesh::GetTriangle(int index) { Triangle T; GetVertexes(index, T.vertexes); T.normal.Right(T.vertexes[0], T.vertexes[1], T.vertexes[2]); return T; }
Matrix Mesh::GetTangentSpace(int index) { Vector V [3]; Vector T [3]; GetVertexes(index, V); GetTexCoords(index, T); Matrix TBN; TBN.Tangent(V, T); return TBN; }
//_______________________________________________________________________________________________________ void Draw(void) { ShapeHeader(); GetVertexes(); GetNormals(); fprintf(TIVFile::File, "\tSeparator {\n"); Draw2File(); fprintf(TIVFile::File, "\t}\n"); }
S3DOPiece* C3DOParser::LoadPiece(S3DModel* model, int pos, S3DOPiece* parent, int* numobj, const std::vector<unsigned char>& fileBuf) { (*numobj)++; _3DObject me; int curOffset = pos; READ_3DOBJECT(me, fileBuf, curOffset); std::string s = GET_TEXT(me.OffsetToObjectName, fileBuf, curOffset); StringToLowerInPlace(s); S3DOPiece* piece = new S3DOPiece(); piece->name = s; piece->parent = parent; piece->offset.x = me.XFromParent * SCALE_FACTOR_3DO; piece->offset.y = me.YFromParent * SCALE_FACTOR_3DO; piece->offset.z = -me.ZFromParent * SCALE_FACTOR_3DO; piece->goffset = piece->offset + ((parent != NULL)? parent->goffset: ZeroVector); GetVertexes(&me, piece, fileBuf); GetPrimitives(piece, me.OffsetToPrimitiveArray, me.NumberOfPrimitives, ((pos == 0)? me.SelectionPrimitive: -1), fileBuf); piece->CalcNormals(); piece->SetMinMaxExtends(); piece->emitPos = ZeroVector; piece->emitDir = FwdVector; if (piece->vertexPos.size() >= 2) { piece->emitPos = piece->vertexPos[0]; piece->emitDir = piece->vertexPos[1] - piece->vertexPos[0]; } else if (piece->vertexPos.size() == 1) { piece->emitDir = piece->vertexPos[0]; } model->mins = float3::min(piece->goffset + piece->mins, model->mins); model->maxs = float3::max(piece->goffset + piece->maxs, model->maxs); piece->SetCollisionVolume(CollisionVolume("box", piece->maxs - piece->mins, (piece->maxs + piece->mins) * 0.5f)); if (me.OffsetToChildObject > 0) { piece->children.push_back(LoadPiece(model, me.OffsetToChildObject, piece, numobj, fileBuf)); } if (me.OffsetToSiblingObject > 0) { parent->children.push_back(LoadPiece(model, me.OffsetToSiblingObject, parent, numobj, fileBuf)); } return piece; }
void Draw(void) { Prep(); ShapeHeader(); GetVertexes(); GetNormals(); NormalCorrection(); fprintf(TIVFile::File, "\tSeparator {\n"); Draw2File(); for(int i = 1; i < TIVTube::NCDiv; i ++) fprintf( TIVFile::File, "\t Rotation { rotation 0 0 1 %f }\n" "\t Separator { USE TubeUpperSector }\n", TIVTube::Xa ); fprintf(TIVFile::File, "\t}\n"); }
void Draw(void) { TIVTubs::Prep(); for(int i = 0; i < TIVTube::NDiv; i++) { fprintf(TIVFile::File, "\tSeparator {\n"); ShapeHeader(); GetVertexes(i); GetNormals(i); // NormalCorrection(); fprintf(TIVFile::File, "\tSeparator {\n"); Draw2File(); fprintf(TIVFile::File, "\t}\n"); fprintf(TIVFile::File, "\t}\n"); } }
void Draw(void) { for(int i = 0; i < Nz - 1; i++) { if(vDz[i] == vDz[i + 1]) continue; Prep(i); GetVertexes(i); GetNormals(); TIVCone::NormalCorrection(); fprintf(TIVFile::File, "\tSeparator {\n"); Draw2File(); for(int j = 1; j < TIVTube::NCDiv; j++) fprintf( TIVFile::File, "\t Rotation { rotation 0 0 1 %f }\n" "\t Separator { USE TubeUpperSector }\n", TIVTube::Xa ); fprintf(TIVFile::File, "\t}\n"); } }
void Mesh::GetVertexes(int index, Vector *V) { GetVertexes(faces[index].points, V); }