一、直接開始上步驟

首先繪製一個三角形

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


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. jq bootstrap select 点击不能动弹

    jq  bootstrap select 点击不能动弹   因为是样式selectpicker  冲突. 解决办法换 样式  form-control <select name="ty ...

  2. billboard因为合批导致出问题的一个想法

    由于unity中距离较近的2个billboard物体会动态合批,如果缩放不同,显示就有问题.还得在shader中"DisableBatching"="true" ...

  3. iOS图片无损拉伸

    一张图片如果放大的话一般情况下会失真,如果该图片是规则的,比如这个聊天气泡,可以用如下代码来设置 UIImage *rightImg = [UIImage imageNamed:@"Sen ...

  4. PHP-Manual的学习----【语言参考】----【类型】-----【float浮点型】

    笔记:1.浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义: <?php$a = 1.234; $b = 1.2e3; $c = 7E-10;?& ...

  5. 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1;

    答案:一. int strcmp(char  *source, char *dest) { /* assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stder ...

  6. Solr6.5创建core

    首先在solrhome(solrhome的路径和配置见中solr的web.xml)http://www.cnblogs.com/paulversion/p/6827949.html 中创建mycore ...

  7. Unity 插件收集(持续更新)

    MGS Machinery Unity绑定机械关节,铰链,机构插件包.    MGS Mechanical Drive 用于绑定场景中的机械驱动器的Unity插件   Unity Wave Propa ...

  8. poj2421

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22048   Accepted: 93 ...

  9. 九度OJ 1262:Sequence Construction puzzles(I)_构造全递增序列 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:118 解决:54 题目描述: 给定一个整数序列,请问如何去掉最少的元素使得原序列变成一个全递增的序列. 输入: 输入的第一行包括一个整数N( ...

  10. 修改maven的war包生成路径

    因为要配合jenkins,所以控制了war包的生成目录: <plugins> <!--打war包到指定的目录下 --> <plugin> <groupId&g ...