从有限元到Unity——Unity网格编程


前言

上回说到了怎么将abaqus的网格数据进行导出以及对导出内容进行分析,这次来讲一下Unity中的网格编程,为有限元网格在Unity中进行复现做准备。


一、网格编程是什么?

网格编程是Unity中进行三维模型可视化的手段,通过Unity内置的类、属性、方法等对模型网格的关键属性(顶点、面片、法线等)进行定义,从而在Unity中展现出需要的模型效果(相当于自定义网格以满足显示、交互、渲染等需求)。

二、网格及Unity中相关类(组件)

1.网格

模型网格主要由顶点和三角面组成,因此,要确定模型网格的外形,首先要确定网格有哪些顶点组成、这些顶点的空间位置是什么,即网格顶点位置。顶点位置通过笛卡尔坐标系的坐标进行描述。
另外,还需确定的是模型中有哪些三角面片以及每个三角面片是由哪些顶点以何种顺序构成,即面片构造序列。在Unity中,根据三角面片的三个顶点排序利用左手法则确定三角面片的正反面。如下图所示,三角面片由顶点编号为43、56、29三个顶点构成,若定义其顶点排序(面片构造序列)为43、29、56,则屏幕向外的这一面为正面而能被渲染,其背面被剔除。
在这里插入图片描述

2.Unity中的Mesh Filter与Mesh Renderer

2.1.Mesh Filter(网格过滤器)

Mesh Filter用于定义网格或从资源中获取网格,而Mesh Filter中的mesh属性用于定义和保存网格相关属性,包括用于保存网格顶点坐标的Vector3[]类型的vertices、用于保存网格三角面片构造序列的int[]类型的triangles。

2.2.Mesh Renderer(网格渲染器)

Mesh Renderer用于网格模型的渲染,可以定义贴图、材料等信息,后续在unity中复现有限元分析结果的云图分布再阐述和使用。

三、网格编程实例

这里以简单的边长为1m的正方体模型,来阐述如何在Unity中使用Mesh Renderer的mesh属性,相应定义并可视化一个正方体网格。
step1.创建一个空物体,自定义并挂载一个名为TestMesh的脚本
step2.打开TestMesh脚本,动态添加一个Mesh Filter组件

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class TestMesh : MonoBehavior
{
   
    
    
	private MeshFilter mf;
	private void Start()
	{
   
    
    
		mf = this.AddComponent<MeshFilter>();//动态添加Mesh Filter组件
	}
}

step3.定义网格顶点位置

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class TestMesh : MonoBehaviour
{
   
    
    
    private MeshFilter mf;
    private void Start()
    {
   
    
    
        //动态添加Mesh Filter组件
        mf = this.AddComponent

猜你喜欢

转载自blog.csdn.net/flatrrow/article/details/132655620