//切割 之 未切割到顶点 private void CutNoVert(float vert1, float vert2, float vert3, OneTriangleData buffe) { bool isSingleVertOnCutNormal; //单顶点,是否在切割法线边 Vector3 leftCutPos, rightCutPos; int leftCutIndex, rightCutIndex; int singleVertIndex, leftVertIndex, rightVertIndex; // 四边形切:从 单顶点的左顶点 切。 if (vert2 * vert3 > 0) //23共边,1独 { leftCutPos = CutLine(buffe.vertP1, buffe.vertP2); rightCutPos = CutLine(buffe.vertP1, buffe.vertP3); singleVertIndex = buffe.index1; leftVertIndex = buffe.index2; rightVertIndex = buffe.index3; if (vert1 > 0) { isSingleVertOnCutNormal = true; } else { isSingleVertOnCutNormal = false; } } else if (vert1 * vert3 > 0) //13共 ,2独 { leftCutPos = CutLine(buffe.vertP2, buffe.vertP3); rightCutPos = CutLine(buffe.vertP2, buffe.vertP1); singleVertIndex = buffe.index2; leftVertIndex = buffe.index3; rightVertIndex = buffe.index1; if (vert2 > 0) { isSingleVertOnCutNormal = true; } else { isSingleVertOnCutNormal = false; } } else //12g共,3独 { leftCutPos = CutLine(buffe.vertP3, buffe.vertP1); rightCutPos = CutLine(buffe.vertP3, buffe.vertP2); singleVertIndex = buffe.index3; leftVertIndex = buffe.index1; rightVertIndex = buffe.index2; if (vert3 > 0) { isSingleVertOnCutNormal = true; } else { isSingleVertOnCutNormal = false; } } allPoint.Add(leftCutPos); leftCutIndex = allPoint.Count - 1; allPoint.Add(rightCutPos); rightCutIndex = allPoint.Count - 1; if (isSingleVertOnCutNormal) { AddTriangToTempList1(singleVertIndex, leftCutIndex, rightCutIndex, tempVert1, tempNormal1, triangles1, pointIndex1, otherPointIndex1); AddTriangToTempList1(leftVertIndex, rightCutIndex, leftCutIndex, tempVert2, tempNormal2, triangles2, pointIndex2, otherPointIndex2); AddTriangToTempList2(leftVertIndex, rightVertIndex, rightCutIndex, tempVert2, tempNormal2, triangles2, pointIndex2, otherPointIndex2); } else { AddTriangToTempList1(singleVertIndex, leftCutIndex, rightCutIndex, tempVert2, tempNormal2, triangles2, pointIndex2, otherPointIndex2); AddTriangToTempList1(leftVertIndex, rightCutIndex, leftCutIndex, tempVert1, tempNormal1, triangles1, pointIndex1, otherPointIndex1); AddTriangToTempList2(leftVertIndex, rightVertIndex, rightCutIndex, tempVert1, tempNormal1, triangles1, pointIndex1, otherPointIndex1); } }
//切割到顶点时: private void CutInVert(float vert1, float vert2, float vert3, OneTriangleData buffe) { Vector3 cutPos; //1 表示法线边 int cutIndex, leftIndex1, leftIndex2, rightIndex1, rightIndex2; if (vert1 == 0) //切割到顶点1 { cutPos = CutLine(buffe.vertP2, buffe.vertP3); if (vert2 > 0) { leftIndex1 = buffe.index1; rightIndex1 = buffe.index2; leftIndex2 = buffe.index3; rightIndex2 = buffe.index1; } else { leftIndex2 = buffe.index1; rightIndex2 = buffe.index2; leftIndex1 = buffe.index3; rightIndex1 = buffe.index1; } } else if (vert2 == 0) //切割到顶点2 { cutPos = CutLine(buffe.vertP1, buffe.vertP3); if (vert1 > 0) { leftIndex1 = buffe.index1; rightIndex1 = buffe.index2; leftIndex2 = buffe.index2; rightIndex2 = buffe.index3; } else { leftIndex2 = buffe.index1; rightIndex2 = buffe.index2; leftIndex1 = buffe.index2; rightIndex1 = buffe.index3; } } else ////切割到顶点3 { cutPos = CutLine(buffe.vertP2, buffe.vertP1); if (vert1 > 0) { leftIndex1 = buffe.index3; rightIndex1 = buffe.index1; leftIndex2 = buffe.index2; rightIndex2 = buffe.index3; } else { leftIndex2 = buffe.index3; rightIndex2 = buffe.index1; leftIndex1 = buffe.index2; rightIndex1 = buffe.index3; } } allPoint.Add(cutPos); cutIndex = allPoint.Count - 1; AddTriangToTempList2(leftIndex1, rightIndex1, cutIndex, tempVert1, tempNormal1, triangles1, pointIndex1, otherPointIndex1); AddTriangToTempList2(leftIndex2, rightIndex2, cutIndex, tempVert2, tempNormal2, triangles2, pointIndex2, otherPointIndex2); }