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. Notes of Daily Scrum Meeting(11.11)

    Notes of Daily Scrum Meeting(11.11) 今天是11月11号光棍节,不知道大家的购物热情被点燃没有,有没有买到自己心仪的东西.额,今天我们的团队任务进度和昨天差不多, 每 ...

  2. YQCB冲刺第二周第一天

    今天的任务为实现查看消费明细的功能. 遇到的问题是按类别显示. 站立会议为: 任务面板为:

  3. 软工 · 第十二次作业 - Beta答辩总结

    福大软工 · 第十二次作业 - Beta答辩总结 写第十二次的时候操作失误直接在Beta版本的博客里改了...第七次冲刺的作业链接补在这里 Beta(7/7) 组长本次博客作业链接 项目宣传视频链接 ...

  4. javascript修改div大小遮挡页面渲染问题

    页面中引入了其他js文件,浏览器窗口改变,页面没有跟随渲染问题.最后找到原因是因为这个js方法少了最后一行: "right": RightBox_w. window.onresiz ...

  5. gdb调试器学习链接

    首先要带 -g 选项用gcc编译 常用指令:http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html#gdb 带main的命令行参 ...

  6. 51单片机RAM 数据存储区学习笔记

    转自:http://www.eepw.com.cn/article/216237_2.htm 1.RAM keil C语言编程 RAM是程序运行中存放随机变量的数据空间.在keil中编写程序,如果当前 ...

  7. 1014 C语言文法定义

    <程序>→<外部声明>|<程序><外部声明><外部声明>→<函数定义>|<声明><函数定义>→<数 ...

  8. mysql 随机获取一条或多条数据

    若要在i ≤r≤ j 这个范围得到一个随机整数r ,需要用到表达式 FLOOR( RAND() * (j – i)+i),RLOOR()取整树部分,RAND()生成0~1的随机数.ROUND(x,n) ...

  9. Redis在Windows环境下单机安装及远程访问方案

    一.下载Windows版Redis 打开https://github.com/MicrosoftArchive/redis/tags地址,找到最新版Redis安装包(Redis-x64-3.2.100 ...

  10. 如何从 GitHub 上下载单个文件夹?

    比如别人把一些资料传到 GitHub 上做分类归档,我怎么才能下载单一分类文件夹? 点击 Raw ,如果是不能预览的文件就会自动下载,如果是文件或者代码什么的,会在浏览器中显示,但可以复制浏览器中链接 ...