using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class AutoMesh : MonoBehaviour
{
//Mesh:是指模型的网格,Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和功能。
// 因此建网格,就是画三角形;画三角形就是定位三个点。
//Mesh Filter:内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,也可以为MeshFilter设置Mesh内容。
//Mesh Render:是用于把网格渲染出来的组件。
// MeshFilter的作用就是把Mesh扔给MeshRender将模型或者说是几何体绘制显示出来。 /*
什么是纹理:(Texture)
纹理实际上是一个二维数组,它的元素是一些颜色值。
单个颜色值被称为 纹理元素 或 纹理像素。
每个纹理元素在纹理中都有一个唯一的地址。
这个地址由一个行和列组成,分别用U,V表示。 什么是纹理坐标
纹理中的每一个纹理像素可以通过它的坐标来声明。
对于所有纹理的所有纹理像素,Direct3D等软件要求一个统一的地址范围。
这个范围可以使0.0~1.0,包含0.0和1.0,用U,V标识。
纹理坐标位于纹理空间中,也就是说,它和纹理的(0,0)位置相对应。
什么是展开UV
展UV就是把建好的3D模型展开成平面2D图片,在平面上做材质,皮肤等,作用就是使模型的贴图效果更真实。
一般的顺序都是先建模,再根据模型需要展UV贴图。
举例说明:比如在一个球体的模型表面,贴上篮球的纹理,制作出一个篮球的模型。
球体是3D的,贴图纹理是2D平面的,那么就需要将球体的表面展开分解为一个2D的平面,方便进行纹理贴图,这就是展UV */
// Start is called before the first frame update
void Start()
{
GameObject meshObj = new GameObject("new mesh"); Shader shader = Shader.Find("Unlit/TextureShader"); // 自己创建一个shader
Material material = new Material(shader);
material.mainTexture = InitTexture(); // 设置图片 MeshRenderer meshRender = meshObj.AddComponent<MeshRenderer>();
meshRender.material = material; MeshFilter meshFilter = meshObj.AddComponent<MeshFilter>();
Mesh mesh = new Mesh();
InitMesh(mesh);
//uv(显示纹理)
Vector2[] uvs = InitUV(mesh);
mesh.uv = uvs;
//法线
mesh.RecalculateNormals();
meshFilter.mesh = mesh;
//
}
//这里可以在runtime 是手动拖拽图片
private Texture InitTexture() {
Texture2D t = new Texture2D(100, 100);
for (int w = 0; w < 100; w++)
{
for (int h = 0; h < 100; h++)
{
if (h % 2 == 0)
{
t.SetPixel(w, h, Color.red);
}
else
{
t.SetPixel(w, h, Color.yellow);
}
}
}
t.Apply();
return t;
}
private Vector2[] InitUV(Mesh mesh)
{
Vector2[] uvs = new Vector2[mesh.vertices.Length];
for (int i = 0; i < uvs.Length; i++)
{
uvs[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].y);
}
return uvs;
} //绘制顶点
private void InitMesh(Mesh mesh)
{
// 为网格创建顶点数组
Vector3[] vertices = new Vector3[3]{
new Vector3(0,0,0),
new Vector3(1, 1, 0),
new Vector3(0, 1, 0), };
mesh.vertices = vertices;
// 通过顶点为网格创建三角形
int[] triangles = new int[]{
2,1,0
}; //triangles 网格面数据(即,组成它的三角形)只是每个三角形的三个顶点索引。
//例如,如果网格具有 10 个三角形,则 triangles 数组应是 30 个数字, 其中每个数字都指示要使用的顶点。
//需要注意的是所绘制的三角形面片是有方向的,其方向与三个点成左手定则,
//三角形的方向决定了只能这个方向观测时才会绘制三角形
mesh.triangles = triangles;
}
} /*
Shader "Unlit/TextureShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100 Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog #include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION; //顶点坐标
float2 uv : TEXCOORD0; //UV 坐标
}; struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
}; sampler2D _MainTex;
float4 _MainTex_ST;
//顶点着色器
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
//片段着色器
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}
*/
mesh绑定骨骼 mesh怎么弄
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
mesh 如何制定骨骼动画 mesh模型文件怎么打开
从前面可以看到人物角色显示是比较重要的,也是比较复杂的。现在就来仔细地分析一下第二人生里的Mesh文件是怎么样读取的呢?可以显示出来如此逼真优秀的画面。如下图所示:
mesh 如何制定骨骼动画 float fp header 网格 -
设置es的自增主键
前面两篇文章,讲了「为什么需要 Elasticsearch」,以及「Elasticsearch 的倒排索引」。其实,这两篇文章都不是在讲 Elasticsearch。为什么需要 Elasticsearch,其实是在讲为什么需要搜索引擎;Elasticsearch 的倒排索引,其实是 Lucene 的 倒排索引。那么什么才是 Elasticsearch 特有的呢?一切都要从一位爱做饭的老婆说起。食谱
设置es的自增主键 elasticsearch 主键字段 elasticsearch 工作原理 lucene怎么读