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的更多相关文章

  1. 【Unity Shader】(十) ------ UV动画原理及简易实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  2. unity还原three导出的json——基本模型,位移,旋转,缩放

    GameObject.CreatePrimitive(PrimitiveType.Cube); GameObject.CreatePrimitive(PrimitiveType.Plane); Gam ...

  3. [Unity Shader] 逐顶点光照和逐片元漫反射光照

    书中的6.4节讲的是漫反射的逐顶点光照和逐片元光照. 前一种算法是根据漫反射公式计算顶点颜色(顶点着色器),对颜色插值(光栅化过程)返回每个像素的颜色值(片元着色器). 第二种算法是获得顶点的法线(顶 ...

  4. unity还原three之旋转

    http://www.360doc.com/content/16/0829/14/12282510_586760119.shtml unity使用左手坐标系,另外在做旋转的时候必须弄清楚旋转坐标轴和旋 ...

  5. Unity 自己使用顶点描绘圆形UI图片

    2020-09-10 在游戏的UI中,圆形图片的需求是很高的,但是,在Unity中想要实现圆形UI,一般的做法是是使用圆形Mask(遮罩),但是使用Mask的缺点很明显,主要有三点: 1.比较麻烦,使 ...

  6. unity代码创建草和模拟风的效果

    void Start() { Test4(); } //草 private Vector3[] grassArray = new Vector3[7]; private GameObject gras ...

  7. Unity MegaFiers 顶点动画

        使用 MegaFiers 插件,能够使得Unity支持顶点动画的播放. 官方视频教程例如以下: 在这里简单測试使用下,环境例如以下: Blender 2.72 Unity 4.5.4 Mega ...

  8. 顶点与UV

    1.顶点坐标和UV坐标是三维模型重要的两个坐标系统. 2.什么是UV?UV分别是图像在显示器水平和垂直方向上坐标,值在 0 - 1 之间 ,即水平方向的第 U 个做像素/图片宽度,垂直方向的第 V 个 ...

  9. Unity -----一些可能存在的错误

    关于Unity中的资源管理,你可能遇到这些问题 张鑫 8 个月前 原文链接:关于Unity中的资源管理,你可能遇到这些问题 - Blog 在优化Unity项目时,对资源的管理可谓是个系统纷繁的大工程. ...

随机推荐

  1. AloneQIan---第一次作业

    小学生的噩梦 一.估计与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 720 • Estim ...

  2. java第三次实验

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1352       姓名:陈实  学号:20135224 成绩:             指导 ...

  3. 第三次作业---excel导入数据库及显示

    好吧首先承认这次作业失败了,而且我并不知道原因.另外,我也没有采用PowerDesigner 设计所需要的数据库,代码就用了全部的时间.感觉自己就像一个刚学会爬着走路的小孩去参加一百一十米跨栏,能不能 ...

  4. Good Time 冲刺 六

    一.今日完成任务情况 第六天 日期:2018.6.19 王怡镔:今天完善了页面,对部分不足进行改进. 于鑫宇:对界面进行完善. 胡雅馨:今天完成前端页面,并改善后端,完善项目. 黄 鹤:做完最后的打卡 ...

  5. C#代码分析(第三周)

    阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...

  6. Oracle中创建自增字段方法

    oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现. 下面给大家讲个例子: 1.在Oracle中创建一个表: .创建一个表 ) prim ...

  7. vue之Mutations 理解

    commit:提交可以在组件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 stor ...

  8. SQLSERVER 的资源限制

    https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view= ...

  9. sql 设计规范

    设计规范: 1.采用有意义的字段名 尽可能地把字段描述的清楚些.当然,也别做过头了,比如CustomerShippingAddressStreetLine1虽然很富有说明性,但没人愿意键入这么长的名字 ...

  10. Collection List区别

    Collection是无序的,比如一大群人在广场上,你不可能说某某人是第一个,某某人是第二个 List是有序的,比如一群人从高到矮排了队,你就能说这人是第一个,这人是最后一个 因此Collection ...