Unity 动态创建mesh API
来源:互联网 发布:国际学校教师工资 知乎 编辑:程序博客网 时间:2024/04/29 10:51
/// <summary>
/// 计算链接顶点
/// </summary>
/// <param name="segment">段数</param>
/// <param name="triangles">链接点</param>
public static void ComputeMeshTriangles(Vector2 segment, out int[] triangles)
{
int trianglesindex = 0;
int trianglessum = Mathf.FloorToInt(segment.x * segment.y * 6);//三角形顶点总数
triangles = new int[trianglessum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++)
{
if (i < segment.y && j < segment.x)
{
int role = Mathf.FloorToInt(segment.x) + 1;
int self = j + (i * role);
int next = j + ((i + 1) * role);
//顺时针
triangles[trianglesindex] = self;
triangles[trianglesindex + 1] = next + 1;
triangles[trianglesindex + 2] = self + 1;
triangles[trianglesindex + 3] = self;
triangles[trianglesindex + 4] = next;
triangles[trianglesindex + 5] = next + 1;
trianglesindex += 6;
}
}
}
}
/// <summary>
/// 计算顶点
/// </summary>
/// <param name="segment">段数</param>
/// <param name="verticessize">顶点面积大小</param>
/// <param name="distance">顶点深度</param>
/// <param name="vertices">out 顶点</param>
public static void ComputeMeshVertices(Vector2 segment, Vector2 verticessize, float distance, out Vector3[] vertices)
{
int sum = Mathf.FloorToInt((segment.x + 1) * (segment.y + 1));//顶点总数
float vw = verticessize.x / segment.x;//vts每一段的长度
float vh = verticessize.y / segment.y;
int index = 0;
vertices = new Vector3[sum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++, index++)
{
vertices[index] = new Vector3(j * vw, i * vh, distance);
vertices[index] -= new Vector3(verticessize.x / 2, verticessize.y / 2, 0);
}
}
}
/// <summary>
/// 计算网格
/// </summary>
/// <param name="segment">段数</param>
/// <param name="uvsize">1:1</param>
/// <param name="uvs">out uv</param>
public static void ComputeMeshUvs(Vector2 segment, Vector2 uvsize, out Vector2[] uvs)
{
int sum = Mathf.FloorToInt((segment.x + 1) * (segment.y + 1));//顶点总数
float uw = uvsize.x / segment.x;//uv每一段的长度
float uh = uvsize.y / segment.y;
int index = 0;
uvs = new Vector2[sum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++, index++)
{
uvs[index] = new Vector2(j * uw, i * uh);
}
}
}
/// 计算链接顶点
/// </summary>
/// <param name="segment">段数</param>
/// <param name="triangles">链接点</param>
public static void ComputeMeshTriangles(Vector2 segment, out int[] triangles)
{
int trianglesindex = 0;
int trianglessum = Mathf.FloorToInt(segment.x * segment.y * 6);//三角形顶点总数
triangles = new int[trianglessum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++)
{
if (i < segment.y && j < segment.x)
{
int role = Mathf.FloorToInt(segment.x) + 1;
int self = j + (i * role);
int next = j + ((i + 1) * role);
//顺时针
triangles[trianglesindex] = self;
triangles[trianglesindex + 1] = next + 1;
triangles[trianglesindex + 2] = self + 1;
triangles[trianglesindex + 3] = self;
triangles[trianglesindex + 4] = next;
triangles[trianglesindex + 5] = next + 1;
trianglesindex += 6;
}
}
}
}
/// <summary>
/// 计算顶点
/// </summary>
/// <param name="segment">段数</param>
/// <param name="verticessize">顶点面积大小</param>
/// <param name="distance">顶点深度</param>
/// <param name="vertices">out 顶点</param>
public static void ComputeMeshVertices(Vector2 segment, Vector2 verticessize, float distance, out Vector3[] vertices)
{
int sum = Mathf.FloorToInt((segment.x + 1) * (segment.y + 1));//顶点总数
float vw = verticessize.x / segment.x;//vts每一段的长度
float vh = verticessize.y / segment.y;
int index = 0;
vertices = new Vector3[sum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++, index++)
{
vertices[index] = new Vector3(j * vw, i * vh, distance);
vertices[index] -= new Vector3(verticessize.x / 2, verticessize.y / 2, 0);
}
}
}
/// <summary>
/// 计算网格
/// </summary>
/// <param name="segment">段数</param>
/// <param name="uvsize">1:1</param>
/// <param name="uvs">out uv</param>
public static void ComputeMeshUvs(Vector2 segment, Vector2 uvsize, out Vector2[] uvs)
{
int sum = Mathf.FloorToInt((segment.x + 1) * (segment.y + 1));//顶点总数
float uw = uvsize.x / segment.x;//uv每一段的长度
float uh = uvsize.y / segment.y;
int index = 0;
uvs = new Vector2[sum];
for (int i = 0; i < segment.y + 1; i++)
{
for (int j = 0; j < segment.x + 1; j++, index++)
{
uvs[index] = new Vector2(j * uw, i * uh);
}
}
}
阅读全文
0 0
- Unity 动态创建mesh API
- unity中利用mesh动态创建墙体
- Unity中创建自己的mesh以及动态修改mesh
- Unity中创建自己的mesh以及动态修改mesh
- unity代码创建mesh
- Unity3D 动态创建Mesh
- unity mesh的自定义创建
- Unity 创建一个扇形Mesh
- unity 脚本创建 MESH(网格)
- Unity教程之-制作闪亮的星星Star(一):动态的创建Mesh
- Unity动态创建的Mesh,导出为Obj模型文件,并生成Prefab文件
- Unity动态绘制曲线Mesh的代码
- Unity 3D 创建Mesh(一)
- Unity 3D 创建Mesh(二)
- Unity 3D 创建Mesh(一)
- Unity 3D 创建Mesh(二)
- Unity Mesh
- Unity Mesh
- Reactjs开发自制编程语言Monkey的编译器:使用组件的state机制实现屏幕取词
- 超级玛丽游戏
- Codeforces Looksery Cup 2015 B
- Jenkins Pipeline插件十大最佳实践!
- PCL1.8.0 VS2015 MFC显示
- Unity 动态创建mesh API
- 分页 6
- 内存管理(一)
- jquery循环获取所有复选框,包括选中的,未选中的
- 测试工具Selenium和TestNG
- 自定义贝塞尔曲线运动
- 【Spring Boot】 从入门到熟练,从简介到集成
- Linux常用快捷键集合
- Maven笔记-关于Maven Pom Editor的一个小问题