接上篇Unity导入STL格式模型(一),分成多个子网格的方式解决了导入慢以及目标模型顶点过多的问题,优化之后,目前针对二进制STL文件有比较良好的解析能力。
MeshCompression:是否使用压缩模式
Off为不使用,跳过压缩算法,导入模型的时间可以短到忽略不计。
On为使用,会为每个子网格单独压缩,也就是删掉所有他认为重复的顶点(位置相等他就认为重复)。
SingleTrianglesNumber:以此数量做为子网格的面数进行拆分,将模型分为多个子网格。
SaveMesh:是否保存模型的所有子网格至本地磁盘?在CreateInstance至Scene中之后。
核心代码如下:
///
/// 创建STL模型实例
///
private void CreateInstance()
{
if (_singleTrianglesNumber < 1000 || _singleTrianglesNumber > 20000)
{
Debug.LogError("Single Triangles Number: this value is unreasonable!");
return;
}
if (int.Parse(_trianglescount) > 200000)
{
Debug.LogError("Triangles Count: this value is too much!");
return;
}
string fullPath = Path.GetFullPath(AssetDatabase.GetAssetPath(target));
_total = int.Parse(_trianglescount);
_number = 0;
_binaryReader = new BinaryReader(File.Open(fullPath, FileMode.Open));
//抛弃前84个字节
_binaryReader.ReadBytes(84);
_vertices = new List();
_normals = new List();
_triangles = new List();
//读取顶点信息
Thread t = new Thread(ReadVertex);
t.Start