public NullVertexMorphObject AppendVertexMorphObject(NullDataStructType vertexDataType, int vertexCount) { NullVertexMorphObject av = new NullVertexMorphObject(vertexDataType, vertexCount); mVertexMorphObjectList.Add(av); return(av); }
protected bool RotateVertexMorphObject(NullVertexMorphObject vertexMorphObject, float angle) { if (vertexMorphObject == null || vertexMorphObject.GetVertexCount() == 0) { return(false); } List <Vector3> posDataArray = vertexMorphObject.GetVertexData(); int vertexCount = GetTriangleCount() * 3; List <Vector3> vertices = new List <Vector3>(); List <Vector3> nVertices = new List <Vector3>(); vertices.AddRange(posDataArray); Vector3RotateCalculation(angle, vertices, nVertices, false); for (int i = 0; i < vertexCount; i += 3) { vertexMorphObject.SetVertex(i + 0, nVertices[i]); vertexMorphObject.SetVertex(i + 1, nVertices[i + 1]); vertexMorphObject.SetVertex(i + 2, nVertices[i + 2]); Vector3 normal = CalcPlaneNormal3f(nVertices[i], nVertices[i + 1], nVertices[i + 2]); vertexMorphObject.SetNormal(i + 0, normal); vertexMorphObject.SetNormal(i + 1, normal); vertexMorphObject.SetNormal(i + 2, normal); } vertices.Clear(); nVertices.Clear(); return(true); }
public NullVertexMorphObject FindMorphAnimationNodeByIndex(int index) { for (int i = 0; i < mVertexMorphObjectList.Count; i++) { NullVertexMorphObject mo = mVertexMorphObjectList[i]; if (mo.GetMeshObjectIndex() == index) { return(mo); } } return(null); }
protected bool RotateVertexMorphAnimationFrame(NullVertexMorphAnimationFrame vertexMorphAnimationFrame, float angle) { if (vertexMorphAnimationFrame == null || vertexMorphAnimationFrame.GetMorphObjectCount() == 0) { return(false); } bool res = true; for (int i = 0; i < vertexMorphAnimationFrame.GetMorphObjectCount(); i++) { NullVertexMorphObject vertexMorphObject = vertexMorphAnimationFrame[i]; res &= RotateVertexMorphObject(vertexMorphObject, angle); } return(res); }
public bool BuildIndexedPrimitives() { bool res = false; if (mMeshObjectList != null) { List <NullMergeIndex> indexMapping = new List <NullMergeIndex>(); for (int i = 0; i < mMeshObjectList.GetMeshObjectCount(); i++) { NullMeshObject meshObject = mMeshObjectList[i]; res |= meshObject.BuildIndexedPrimitives(indexMapping); if (meshObject.IsVertexAnimationMeshObject() && mVertexMorphAnimations != null) { for (int k = 0; k < mVertexMorphAnimations.GetAnimationCount(); k++) { NullVertexMorphAnimation animation = mVertexMorphAnimations[k]; for (int j = 0; j < animation.GetFrameCount(); j++) { NullVertexMorphAnimationFrame animationFrame = animation[j]; NullVertexMorphObject morphObject = animationFrame.FindMorphAnimationNodeByIndex(i); Assert.IsTrue(morphObject != null, ""); res |= morphObject.BuildIndexedPrimitives(indexMapping); } } } } } //try extract mesh-objects and skeleton-bindings if (mSkinObjectList != null) { for (int i = 0; i < mSkinObjectList.GetMeshObjectCount(); i++) { List <NullMergeIndex> indexMapping = new List <NullMergeIndex>(); NullMeshObject meshObject = mSkinObjectList[i]; res |= meshObject.BuildIndexedPrimitives(indexMapping); if (mSkeletonBinding != null && indexMapping.Count > 0) { NullSkeletonPiece skeletonPiece = mSkeletonBinding[i]; res |= skeletonPiece.BuildIndexedPrimitives(indexMapping); } } } return(res); }
public bool ExtractToTriangles() { bool res = false; //try extract mesh-objects and vertex-morph animations if (mMeshObjectList != null) { for (int i = 0; i < mMeshObjectList.GetMeshObjectCount(); i++) { List <Vector3Int> originalFaceIndices = new List <Vector3Int>(); NullMeshObject meshObject = mMeshObjectList[i]; res |= meshObject.ExtractToTriangles(originalFaceIndices); if (meshObject.IsVertexAnimationMeshObject() && mVertexMorphAnimations != null) { for (int k = 0; k < mVertexMorphAnimations.GetAnimationCount(); k++) { NullVertexMorphAnimation animation = mVertexMorphAnimations[k]; for (int j = 0; j < animation.GetFrameCount(); j++) { NullVertexMorphAnimationFrame animationFrame = animation[j]; NullVertexMorphObject morphObject = animationFrame.FindMorphAnimationNodeByIndex(i); Assert.IsTrue(morphObject != null, ""); switch (meshObject.GetMeshObjectType()) { case NullPrimitiveType.MOT_INDEXED_PRIMITIVES: res |= morphObject.ExtractToTrianglesFromIndexedPrimitives(originalFaceIndices); break; //case NullPrimitiveType.MOT_TRIANGLE_STRIPS: // res |= morphObject.ExtractToTrianglesFromStrips(meshObject.GetTriangleCount()); // break; } } } } originalFaceIndices.Clear(); } } //try extract mesh-objects and skeleton-bindings if (mSkinObjectList != null) { for (int i = 0; i < mSkinObjectList.GetMeshObjectCount(); i++) { List <Vector3Int> originalFaceIndices = new List <Vector3Int>(); NullMeshObject meshObject = mSkinObjectList[i]; res |= meshObject.ExtractToTriangles(originalFaceIndices); if (mSkeletonBinding != null && mSkeletonBinding.GetSkeletonBindingCount() > 0) { NullSkeletonPiece skeletonPiece = mSkeletonBinding[i]; switch (meshObject.GetMeshObjectType()) { case NullPrimitiveType.MOT_INDEXED_PRIMITIVES: res |= skeletonPiece.ExtractToTrianglesFromIndexedPrimitives(originalFaceIndices); break; //case HexMeshObject::MOT_TRIANGLE_STRIPS: // res |= skeletonPiece.ExtractToTrianglesFromStrips(meshObject.GetTriangleCount()); // break; } } } } return(res); }