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项目时,对资源的管理可谓是个系统纷繁的大工程. ...
随机推荐
- (第六周)课上Scrum站立会议演示
组名:连连看 组长:张政 组员:张金生.李权.武志远 时间:2016.10.13 20:20——20:40 会议内容: 已完成的内容: 1.选定编译语言,安装软件并配置环境,完成了游戏的基本模型. ...
- 安装Visual studio 2013并进行单元测试
刚开始在没有老师的指导下自己弄了一个简单的单元测试,最后与老师的对比发现错误百出,于是另起一篇.安装VS2013没有什么问题,安装过程如下图: 接下来别开始练习书上的单元测试. 先是简单的创建C#的类 ...
- Task 8 找水王
任务: 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. 如果你 ...
- Internet History, Technology and Security (Week5.1)
Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...
- Unity如何判断网络状态?
根据Application.internetReachability来判断网络状态 NetworkReachability.NotReachable 网络不可用 NetworkReachability ...
- mybati内sql查询语句在两个日期内
装载自: http://blog.csdn.net/u010442302/article/details/72902441?locationNum=9&fps=1 <select i ...
- [2017BUAA软工]第2次个人作业
软工第2次个人作业--代码复审 一.代码复审Check List 1.概要部分 代码能符合需求和规格说明么? 能正确处理题目要求,代码能符合需求和规格. 代码设计是否有周全的考虑? 能正确生成和解出数 ...
- GDI+ 支持的图片文件格式
您可以使用许多标准格式将位图储存在磁盘文件中.GDI+ 支持以下各种图片文件格式. o 位图 (BMP) 位图是 Windows 用来储存设备无关和与应用程序无关的图片的标准格式.文件头决定了指定的位 ...
- Springboot 和 Mybatis集成开发
Springboot 和 Mybatis集成开发 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 jdk:1.7.0_79 maven:3.3.9 额外功能 PageHel ...
- 把打印的内容保存成文件(PDF)
有时候网页的内容和打印的内容会有一些差异,需要把打印的内容倒出来.是有办法的. 1.以谷歌为内核的浏览器示例,按Ctrl+p快捷键打开打印对话框,如图: 2.点击更改按钮,更改打印机,会出现选择目标打 ...