Unity3D之Mesh(六)绘制扇形、扇面、环形
前言:
绘制了圆,就想到绘制与之相关的几何图形,以便更灵活的掌握Mesh动态创建模型的机制与方法。
一、分析:
首先,结合绘制圆的过程绘制环形:
圆形是由segments个等腰三角形组成的(上一篇中,将圆分为segments份,即segments个等腰三角形),圆环就是有segments个等腰梯形组成的。
那么等腰梯形由什么组成?两个三角形(多个也是可以的)。
故:添加一个变量,内圆半径。 即:到此时此刻,我们需要根据:外半径、内半径、分割的数目( 当然如果是扇形或扇面,我们还需要一个角度angle)来确定顶点vertices Vector3数组,以及triangles 三角形索引数组。
二、绘制圆环
代码如下:
using UnityEngine; [RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class yuan : MonoBehaviour
{
public float Radius = ; //外半径
public float innerRadius = ; //内半径
public float angleDegree = ; //扇形或扇面的角度
public int Segments = ; //分割数 private MeshFilter meshFilter; void Start()
{
meshFilter = GetComponent<MeshFilter>();
meshFilter.mesh = CreateMesh(Radius, innerRadius, angleDegree, Segments);
} Mesh CreateMesh(float radius, float innerradius,float angledegree,int segments)
{
//vertices(顶点):
int vertices_count = segments* +; //因为vertices(顶点)的个数与triangles(索引三角形顶点数)必须匹配
Vector3[] vertices = new Vector3[vertices_count];
float angleRad = Mathf.Deg2Rad * angledegree;
float angleCur = angleRad;
float angledelta = angleRad / segments;
for(int i=;i< vertices_count; i+=)
{
float cosA = Mathf.Cos(angleCur);
float sinA = Mathf.Sin(angleCur); vertices[i] = new Vector3(radius * cosA, , radius * sinA);
vertices[i + ] = new Vector3(innerradius * cosA, , innerradius * sinA);
angleCur -= angledelta;
} //triangles:
int triangle_count = segments * ;
int[] triangles = new int[triangle_count];
for(int i=,vi=;i<triangle_count;i+=,vi+=)
{
triangles[i] = vi;
triangles[i + ] = vi+;
triangles[i + ] = vi + ;
triangles[i + ] =vi+;
triangles[i + ] =vi+;
triangles[i + ] =vi;
} //uv:
Vector2[] uvs = new Vector2[vertices_count];
for (int i = ; i < vertices_count; i++)
{
uvs[i] = new Vector2(vertices[i].x / radius / + 0.5f, vertices[i].z / radius / + 0.5f);
} //负载属性与mesh
Mesh mesh = new Mesh();
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uvs;
return mesh;
}
}
效果图:

三、绘制扇面
其实绘制扇形面:只需要改变脚本中的参数,扇形覆盖的角度,即:
angleDegree
效果如下:

四、绘制扇形
同理,只需要将内半径改为0,更改扇形覆盖的角度
innerRadius=0;
angleDegree
即可!效果图如下:

总结:
静下心,慢慢分析,很简单,不过是初中几何而已。
【欢迎转载】
转载请表明出处: 乐学习
Unity3D之Mesh(六)绘制扇形、扇面、环形的更多相关文章
- Sliverlight实例之 绘制扇形和环形图
一,1道几何题 已知两点坐标确定一条直线,直线上存在一个未知点,起始点与未知点的距离已知 求:未知点坐标 思路,如下: 求AB长度,可以根据两点距离公式 二,写个C#类 定义一个Point类,代表坐标 ...
- Unity3D之Mesh(七)绘制长方体
前言: 从现在开始,终于感觉进入一点点正题了!动态创建三维立体模型mesh!依然从简单入手:长方体. 一.基本思路 由于是创建长方体mesh,由之前的研究得知,两个数据必须要有,即:顶点的数据:ver ...
- Unity3D之Mesh(五)绘制圆
前言: Unity3D中Mesh的基本单位是三角形,而圆形就是由许许多多的三角形组成的.那么我们就知道了绘制圆形的Mesh需要两个变量:圆的半径 以及分割数: 一.实现过程 基本过程与之前的类似,最 ...
- Unity3D之Mesh(一)绘制三角形
前言: Unity自带几种简单的模型,如cube等:一般情况下,其余模型有3D建模软件生成,以合适的文件格式导入unity中:而mesh(以我目前很粗浅的了解)的一般用途就是:对现有的模型进行变形,以 ...
- Unity3D学习笔记2——绘制一个带纹理的面
目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...
- 绘制扇形效果线条小Bug解决
绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标, ...
- Css绘制圆形,环形,椭圆等图形
转载自http://blog.csdn.net/gongstrong123/article/details/50888758 绘制圆形,环形,椭圆 <!DOCTYPE html> < ...
- [ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)
package { import flash.display.Shape; import flash.display.Sprite; import flash.events.MouseEvent; / ...
- [ActionScript 3.0] 绘制扇形方法
/** * 绘制扇形 * @param mc 承载扇形的对象 * @param x 圆心角x * @param y 圆心角y * @param r 半径 * @param angle 绘制角度 * @ ...
随机推荐
- 《TomCat与Java Web开发技术详解》(第二版) 第五章节的学习总结 ---- Servlet的高级用法
这一章节主要是介绍了Servlet技术的一些高级用法,如下是我自己的整理归纳 1.下载文件:即获取服务器文件,并把文件写入反馈给客户端 ServletContext.getResourceAsStre ...
- 【转】利用Python中的mock库对Python代码进行模拟测试
出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...
- centos7.0 tomcat9.0 ip访问 manager
版本:Tomcat 9.0 问题:新安装的tomcat,用其他机器访问tomcat的Server Status.Manager App.Host Manager三个页面均显示403(本机访问没有问题) ...
- [CMD]重启电脑
https://zhidao.baidu.com/question/686086701903450132.html bat是批处理,可以调用关机命令关机. 制作方法如下: 打开记事本程序: 输入如下内 ...
- c/c++的一些小知识点3
---恢复内容开始--- ---恢复内容结束---
- VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改 ...
- 九度OJ 1195:最长&最短文本 (搜索)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3144 解决:1156 题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输 ...
- mysql数据库访问授权
1.进入MySQL服务器 d:\mysql\bin\> mysql -h localhost -u root; 2.赋予任何主机访问数据的权限 mysql> GRANT ALL PRIVI ...
- [postfix]添加黑名单
最近公司员工的邮箱总是收到twoomail.com的邀请邮件,邮箱服务器还没有添加过黑名单呢,就拿它开刀吧. 在主配置文件中添加如下配置 #vi /etc/postfix/main.cf #black ...
- [php]Maximum function nesting level of '100' reached错误
今天在做后台一个模块的时候报出了这个错误. Maximum function nesting level of '100' reached 仔细分析之后发现是在类的初始化过程中(__construct ...