您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
32 行
1.0 KiB
32 行
1.0 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public static class MeshVolume {
|
|
|
|
static float SignedVolumeOfTriangle(Vector3 p1, Vector3 p2, Vector3 p3)
|
|
{
|
|
float v321 = p3.x * p2.y * p1.z;
|
|
float v231 = p2.x * p3.y * p1.z;
|
|
float v312 = p3.x * p1.y * p2.z;
|
|
float v132 = p1.x * p3.y * p2.z;
|
|
float v213 = p2.x * p1.y * p3.z;
|
|
float v123 = p1.x * p2.y * p3.z;
|
|
return (1.0f / 6.0f) * (-v321 + v231 + v312 - v132 - v213 + v123);
|
|
}
|
|
|
|
public static float VolumeOfMesh(Mesh mesh)
|
|
{
|
|
float volume = 0;
|
|
Vector3[] vertices = mesh.vertices;
|
|
int[] triangles = mesh.triangles;
|
|
for (int i = 0; i < mesh.triangles.Length; i += 3)
|
|
{
|
|
Vector3 p1 = vertices[triangles[i + 0]];
|
|
Vector3 p2 = vertices[triangles[i + 1]];
|
|
Vector3 p3 = vertices[triangles[i + 2]];
|
|
volume += SignedVolumeOfTriangle(p1, p2, p3);
|
|
}
|
|
return Mathf.Abs(volume);
|
|
}
|
|
}
|