unity还原three——顶点,三角面,uv
public class Geometry
{
public Geometry(string name, Data data, Hashtable hash)
{
Debug.Log("解析type为Geometry的模型---开始");
GameObject gameobject = new GameObject();
gameobject.name = name;
gameobject.AddComponent<MeshFilter>();
gameobject.AddComponent<MeshRenderer>(); //从json中取到的数组
int[] _faces = data.faces;
float[] _vertices = data.vertices;
float[] uvss = data.uvs; List<Vector3> verticesOld = new List<Vector3>();
List<Vector3> vertices = new List<Vector3>();
List<int> faces = new List<int>(); List<Vector2> _uvs = new List<Vector2>();
List<Vector2> uvs = new List<Vector2>(); //通过array构造顶点
for (int i = ; i < _vertices.Length; i += )
{
verticesOld.Add(new Vector3(_vertices[i], _vertices[i + ], _vertices[i + ]));
} Debug.Log(name + " uvs.Length:" + uvss.Length);
for (int i = ; i < uvss.Length; i += )
{
_uvs.Add(new Vector2(uvss[i],uvss[i+]));
} //根据_faces中的顶点,uv数据对顶点和uv进行重构。
int count = ; if (_faces.Length > )
{
int loop = ;
//faces中包含uv数据
if (_faces[] != )
{
int i;
for (i = ; i < _faces.Length; )
{
if (_faces[i] == )
{
loop = ;
}else if (_faces[i] == )
{
loop = ;
}else if (_faces[i] == )
{
loop = ;
} vertices.Add(verticesOld[_faces[i + ]]);
vertices.Add(verticesOld[_faces[i + ]]);
vertices.Add(verticesOld[_faces[i + ]]); faces.Add(count++);
faces.Add(count++);
faces.Add(count++); uvs.Add(_uvs[_faces[i + ]]);
uvs.Add(_uvs[_faces[i + ]]);
uvs.Add(_uvs[_faces[i + ]]);
//打印未考虑到的type
if (_faces[i] != && _faces[i] != && _faces[i] != )
{
Debug.Log("faces中未包含type:"+_faces[i]+","+_faces[i+]+","+_faces[i+]);
} i += loop;
}
}
//faces中不包含uv
else if (_faces[] == )
{
loop = ;
for (int i = ; i < _faces.Length; i += loop)
{
vertices.Add(verticesOld[_faces[i + ]]);
vertices.Add(verticesOld[_faces[i + ]]);
vertices.Add(verticesOld[_faces[i + ]]); faces.Add(count++);
faces.Add(count++);
faces.Add(count++);
}
}
} Mesh mesh = new Mesh();
mesh.name = name; mesh.vertices = vertices.ToArray();
mesh.triangles = faces.ToArray();
mesh.uv = uvs.ToArray(); gameobject.GetComponent<MeshFilter>().mesh = mesh;
//将网格资源存入给定的磁盘路径下,以便导出
AssetDatabase.CreateAsset(mesh, ExportClass.prePath + name + "mesh.asset"); //渲染材质
if (hash["materials"] != null)
{
new MaterialComponent().setMaterialInfo((Materials)hash["materials"], gameobject);
} gameobject.GetComponent<MeshRenderer>().receiveShadows = (bool) hash["receiveShadow"];
if ((bool) hash["castShadow"])
{
gameobject.GetComponent<MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
}
else
{
gameobject.GetComponent<MeshRenderer>().shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
} setTransform((MatrixParse) hash["matrixParse"], gameobject);
//挂在父对象下
gameobject.transform.parent = GameObject.Find(hash["parentName"].ToString()).transform;
Debug.Log("解析type为Geometry的模型---结束");
} //设置位移旋转缩放
private void setTransform(MatrixParse matrixParse, GameObject gameObject)
{
gameObject.transform.localScale = matrixParse.GetLocalScale; Vector3 pos = matrixParse.GetPosition;
gameObject.transform.position = new Vector3(-pos.x,pos.y,pos.z); gameObject.transform.Rotate(new Vector3(matrixParse.GetAngles.x,,),Space.Self);
gameObject.transform.Rotate(new Vector3(,matrixParse.GetAngles.y,),Space.Self);
gameObject.transform.Rotate(new Vector3(,,matrixParse.GetAngles.z),Space.Self); //反转
Reverse(gameObject.transform,matrixParse);
} private void Reverse(Transform form,MatrixParse matrixParse)
{
//反转
Vector3 pos = matrixParse.GetPosition;
form.position = new Vector3(-pos.x,pos.y,pos.z); Vector3 scale = matrixParse.GetLocalScale;
form.localScale = new Vector3(-scale.x,-scale.y,-scale.z); form.Rotate(new Vector3(,,),Space.World);
}
}
unity还原three——顶点,三角面,uv的更多相关文章
- 【Unity Shader】(十) ------ UV动画原理及简易实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- unity还原three导出的json——基本模型,位移,旋转,缩放
GameObject.CreatePrimitive(PrimitiveType.Cube); GameObject.CreatePrimitive(PrimitiveType.Plane); Gam ...
- [Unity Shader] 逐顶点光照和逐片元漫反射光照
书中的6.4节讲的是漫反射的逐顶点光照和逐片元光照. 前一种算法是根据漫反射公式计算顶点颜色(顶点着色器),对颜色插值(光栅化过程)返回每个像素的颜色值(片元着色器). 第二种算法是获得顶点的法线(顶 ...
- unity还原three之旋转
http://www.360doc.com/content/16/0829/14/12282510_586760119.shtml unity使用左手坐标系,另外在做旋转的时候必须弄清楚旋转坐标轴和旋 ...
- Unity 自己使用顶点描绘圆形UI图片
2020-09-10 在游戏的UI中,圆形图片的需求是很高的,但是,在Unity中想要实现圆形UI,一般的做法是是使用圆形Mask(遮罩),但是使用Mask的缺点很明显,主要有三点: 1.比较麻烦,使 ...
- unity代码创建草和模拟风的效果
void Start() { Test4(); } //草 private Vector3[] grassArray = new Vector3[7]; private GameObject gras ...
- Unity MegaFiers 顶点动画
使用 MegaFiers 插件,能够使得Unity支持顶点动画的播放. 官方视频教程例如以下: 在这里简单測试使用下,环境例如以下: Blender 2.72 Unity 4.5.4 Mega ...
- 顶点与UV
1.顶点坐标和UV坐标是三维模型重要的两个坐标系统. 2.什么是UV?UV分别是图像在显示器水平和垂直方向上坐标,值在 0 - 1 之间 ,即水平方向的第 U 个做像素/图片宽度,垂直方向的第 V 个 ...
- Unity -----一些可能存在的错误
关于Unity中的资源管理,你可能遇到这些问题 张鑫 8 个月前 原文链接:关于Unity中的资源管理,你可能遇到这些问题 - Blog 在优化Unity项目时,对资源的管理可谓是个系统纷繁的大工程. ...
随机推荐
- map的运用
一.map是一种关联容器,支持高效的查找和访问 map中的元素是一些关键字-值(key-value)对: 关键字起索引作用: 值表示与索引相关联的数据. 关联容器中元素是根据关键字存储的,故其不支持位 ...
- 必应词典手机版(IOS版)与有道词典(IOS版)之问卷分析
我们制定了一个调查问卷: 1.年龄分布: 2.地域分布: 3.是否用过必应词典? 对于必应词典还是没用过的人数更多. 4.是否用过有道词典? 有道词典的使用率更高一点. 5.对于必应的基本功能给几分? ...
- MathExam6378
我的第一个程序 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 15 10 • Estima ...
- 《Spring2之站立会议7》
<Spring2之站立会议7> 昨天,查相关资料解决debug:: 今天,解决了debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.
- Software Defined Networking(Week 3, part 1)
Control and Data Plane Seperation 课程地址 Overview 今天正式地学习一个控制与数据平面分离.学习完本节,应该要掌握何为控制和数据平面,了解它们的功能以及好处, ...
- 【Leetcode】109. Convert Sorted List to Binary Search Tree
Question: Given a singly linked list where elements are sorted in ascending order, convert it to a h ...
- PAT 1034 有理数四则运算
https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008 本题要求编写程序,计算2个有理数的和.差.积 ...
- IE盒模型与W3C盒模型区别
前两天被人问到,叫我解释一下标准盒模型与IE盒模型,额,当时只能说,知道一点,但是没有深入的去探讨过,所以下来之后就自己写了例子,亲自去验证并且查看了网上的一些资料,现将其整理如下: 一.css盒模型 ...
- python读取文件解码失败
python2.7 urllib2 抓取新浪乱码 中的: 报错的异常是 UnicodeDecodeError: 'gbk' codec can't decode bytes in position 2 ...
- jQuery 版本选择与常见插件库总结
在日常的开发中jQuery作为一个流行多年的轻量级 JavaScript 库,使用十分的普遍,主要源于它的便捷性和实用性非常高. 在此总结一些关于jQuery版本的区别和选择的建议,以及一些常见插件库 ...