一、直接開始上步驟

首先繪製一個三角形

創建一個材質,以便後續使用:


1)材質使用的貼圖


2)上代碼

 

 using UnityEngine;
using System.Collections; /* ==============================================================================
* 功能描述:创建三角形Mesh
* ==============================================================================*/
[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class NewBehaviourScript1 : MonoBehaviour
{
public float sideLength = ;
public float angleDegree = ;
private static readonly int ANGLE_DEGREE_PRECISION = ;
private static readonly int SIDE_LENGTH_PRECISION = ; private MeshFilter meshFilter; private TriangleMeshCreator creator = new TriangleMeshCreator(); [ExecuteInEditMode]
private void Awake()
{ meshFilter = GetComponent<MeshFilter>();
} private void Update()
{
meshFilter.mesh = creator.CreateMesh(sideLength, angleDegree);
}
void OnDrawGizmos()
{
Gizmos.color = Color.gray;
DrawMesh();
} void OnDrawGizmosSelected()
{
Gizmos.color = Color.green;
DrawMesh();
} private void DrawMesh()
{
Mesh mesh = creator.CreateMesh(sideLength, angleDegree);
int[] tris = mesh.triangles;
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
} private Vector3 transformToWorld(Vector3 src)
{
return transform.TransformPoint(src);
} private class TriangleMeshCreator
{
private float _sideLength;
private float _angleDegree; private Mesh _cacheMesh;
public Mesh CreateMesh(float sideLength, float angleDegree)
{
if (checkDiff(sideLength, angleDegree))
{
Mesh newMesh = Create(sideLength, angleDegree);
if (newMesh != null)
{
_cacheMesh = newMesh;
this._sideLength = sideLength;
this._angleDegree = angleDegree;
}
}
return _cacheMesh;
} private Mesh Create(float sideLength, float angleDegree)
{
Mesh mesh = new Mesh();
Vector3[] vertices = new Vector3[]; float angle = Mathf.Deg2Rad * angleDegree;
float halfAngle = angle / ;
vertices[] = Vector3.zero;
float cosA = Mathf.Cos(halfAngle);
float sinA = Mathf.Sin(halfAngle);
vertices[] = new Vector3(cosA * sideLength, , sinA * sideLength);
vertices[] = new Vector3(cosA * sideLength, , -sinA * sideLength); int[] triangles = new int[];
triangles[] = ;
triangles[] = ;
triangles[] = ; mesh.vertices = vertices;
mesh.triangles = triangles; //Vector2[] uvs = new Vector2[vertices.Length];
//for (int i = 0; i < uvs.Length; i++)
//{
// uvs[i] = Vector2.zero;
//}
Vector2[] uvs = new Vector2[vertices.Length];
uvs[] = new Vector2(, 0.5f);
uvs[] = Vector2.one;
uvs[] = Vector2.right;
mesh.uv = uvs;
mesh.uv = uvs; return mesh;
} private bool checkDiff(float sideLength, float angleDegree)
{
return (int)((sideLength - this._sideLength) * SIDE_LENGTH_PRECISION) != ||
(int)((angleDegree - this._angleDegree) * ANGLE_DEGREE_PRECISION) != ;
}
} }

注意: 只能在运行的时候才看得到这个三角形,编辑器里看不到怎么办?

简单来讲就是在编辑器模式下,绘制辅助线框。以下三个方法是为了在编辑模式下看到三角形;

关于OnDrawGizmos和OnDrawGizmosSelected可以参考这个链接http://www.ceeger.com/Script/Gizmos/Gizmos.html

 void OnDrawGizmos()
{
Gizmos.color = Color.gray;
DrawMesh();
} void OnDrawGizmosSelected()
{
Gizmos.color = Color.green;
DrawMesh();
} private void DrawMesh()
{
Mesh mesh = creator.CreateMesh(sideLength, angleDegree);
int[] tris = mesh.triangles;
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
Gizmos.DrawLine(transformToWorld(mesh.vertices[tris[]]), transformToWorld(mesh.vertices[tris[]]));
}

3)把Mesh Renderer这个组件上的Material设为我们新建的材质。


效果:

分情況實驗:

1、

 uvs[] = new Vector2(, 0.5f);
uvs[] = Vector2.one;
uvs[] = Vector2.right;

2、

uvs[] = new Vector2(, 0.5f);
uvs[] = Vector2.one;
uvs[] = Vector2.right;

3、

 uvs[] = new Vector2(, 0.5f);
uvs[] = Vector2.one;
uvs[] = Vector2.right;

通过上面的例子,我们知道:

第二種情況下:

三处的三角形顶点对应的uv坐标是(0,0.5f),(1,1)和(1,0)。

这样我们就可以知道,uv坐标系是从0到1,从左到右,自下而上增加的坐标系。即:

賦值順序變化,会显示出不同的效果。


【欢迎转载】

转载请表明出处: 乐学习

Unity3D之Mesh(二)为三角形添加纹理的更多相关文章

  1. Unity3D之Mesh(七)绘制长方体

    前言: 从现在开始,终于感觉进入一点点正题了!动态创建三维立体模型mesh!依然从简单入手:长方体. 一.基本思路 由于是创建长方体mesh,由之前的研究得知,两个数据必须要有,即:顶点的数据:ver ...

  2. Unity3D之Mesh(一)绘制三角形

    前言: Unity自带几种简单的模型,如cube等:一般情况下,其余模型有3D建模软件生成,以合适的文件格式导入unity中:而mesh(以我目前很粗浅的了解)的一般用途就是:对现有的模型进行变形,以 ...

  3. 为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?

    两个Gameobject 放置在空中, 一个是Cube,一个是茄子模型 Cube的Collider 是Box Collider , 茄汁的Collider 是mesh collider, 他们都添加了 ...

  4. Unity3D之Mesh(五)绘制圆

    前言: Unity3D中Mesh的基本单位是三角形,而圆形就是由许许多多的三角形组成的.那么我们就知道了绘制圆形的Mesh需要两个变量:圆的半径  以及分割数: 一.实现过程 基本过程与之前的类似,最 ...

  5. C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)

    1.添加删除实体 C# ObjectARX二次开发添加删除实体是非常容易主要代码如下: 添加实体: objId = btr.AppendEntity(entity); trans.AddNewlyCr ...

  6. 学习MongoDB 二:MongoDB添加、删除、修改

    一.简介 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB ...

  7. C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五)

    C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五) 1.创建一个图形对象的步骤如下见上一篇博客(三)2.添加删除实体的工具函数见上一篇博客(四) 3.添加圆的例子(完 ...

  8. 使用Typescript重构axios(二十六)——添加HTTP授权auth属性

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  9. 使用Typescript重构axios(二十九)——添加baseURL

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

随机推荐

  1. centos 7 安装 mail

    yum install -y sendmail 将下面内容粘贴到/etc/mail.rc中 set ssl-verify=ignore set nss-config-dir=/root/.certs ...

  2. Iterator模式----一个一个遍历

    说起遍历,我立马就想到for循环,增强for循环,foreach循环这类的循环遍历,这个不错,既然有这么方便的遍历,为什么我们还要学习Iterator这样的遍历呢? 一个重要的理由是:引入Iterat ...

  3. Cobbler部署之FAQ处理

    Cobbler报错处理 通过cobbler check检查出现的报错 红色标注为报错关键信息 9.1 报错一 # cobbler check httpd does not appear to be r ...

  4. 【问题】:spring cloud sleuth日志组件冲突问题

    在使用spring cloud sleuth的时候,启动工程报错如下: 根据错误信息明显就是jar包冲突,spring boot默认用的是logback,所以移除其中一个依赖就可以了,修改pom依赖为 ...

  5. iOS 10 中引入了 Message 框架

    WWDC 2016 上最重磅的消息之一就是在 iOS 10 中引入了 Message 框架.开发者现在可以为苹果内置的 Messages 应用开发扩展啦.通过开发一个应用扩展,你可以让用户跟应用在 M ...

  6. <mark>元素----黄色背景

     当需要引用其他人的内容,或者想要重点标注一段文本时可以使用<mark>元素.这样浏览器会给<mark>中的文本添加黄色背景. 效果图如下:原文:HTML5 - 使用<m ...

  7. [Android Studio 权威教程]AS 中配置强大的版本号管理系统(Git、SVN、等)

    在Eclipse中加入Git等版本号管理工具须要自己加入插件.并且个人认为不咋好用,在AS中已经给我们集成好了,我们仅仅须要配置一下就OK了.今天就和大家聊聊怎么配置以及使用的要点. 1. 安装Git ...

  8. mysqldump命令使用详解

    mysqldump是一个数据库备份程序 用法:mysqldump [options] [db_name [tbl_name ...]] 描述:mysqldump是一个客户端逻辑备份的工作,备份的SQL ...

  9. Apache禁止ip访问

    网站突然让禁止ip访问,于是就通过配置Apache达到了想要的效果. 我们网站用的是Apache+tomcat集群,所以需要配置虚拟主机,虚拟主机我在这里就不说了,不明白的上网搜搜吧,这里只说禁止ip ...

  10. 使用oracle10g官方文档找到监听文件(listener.ora)的模板

    ***********************************************声明*************************************************** ...