当前位置: 首页 > news >正文

企业网站深圳常州网站建设百科

企业网站深圳,常州网站建设百科,贺州网站制作,视频生成网址链接在Unity中#xff0c;如果将一个模型文件#xff08;比如从max里面导出一个fbx文件#xff09;导入到编辑器中之后#xff0c;Unity会把所有在原来在面列表中公用的顶点复制一份#xff0c;保证每个三角形使用的顶点都是单独的#xff0c;不与其它三角形共用顶点#xf…        在Unity中如果将一个模型文件比如从max里面导出一个fbx文件导入到编辑器中之后Unity会把所有在原来在面列表中公用的顶点复制一份保证每个三角形使用的顶点都是单独的不与其它三角形共用顶点Unityh这么做应该有他的道理但我尚未想明白Unity这么做的原因是什么。 但是考虑到在有些应用中使用共用顶点能够更好的处理一些问题这里写了一个将Unity中Mesh重叠顶点合并成公用顶点的代码目的是将位置重叠的顶点去掉同时也将面列表的内容更新由一个原来有重叠顶点的Mesh获得一个新的使用公用顶点的Mesh参考如下 Mesh GetWeldMesh(Mesh mesh) {Vector3[] vs mesh.vertices;int[] ts mesh.triangles;Debug.Log(ts.Length);DictionaryVector3, int dicVert new();for (int i 0; i ts.Length; i){bool hasSamePos false;Vector3 vert vs[ts[i]];foreach (var kv in dicVert){Vector3 key kv.Key;if (vert key){if (kv.Value ts[i]){ts[i] kv.Value;}else{dicVert[kv.Key] ts[i];}hasSamePos true;break;}}if (!hasSamePos){dicVert.Add(vert, ts[i]);}}ListVector3 listVertice new();foreach (var kv in dicVert){listVertice.Add(kv.Key);}Mesh meshNew new(){vertices vs,triangles ts};meshNew.RecalculateNormals();return meshNew; } 目前我能想到的这么做的用处有两个第一个是在一种描边方法中Shader需要将要描边的物体增加一次渲染在这次渲染中Shader会将网格的每个顶点沿着该顶点的法线方向向外挤出一点点形成一个更大的轮廓然后反面渲染这样就形成了原物体的勾边效果不过这里有个问题如果使用的Unity默认的Mesh当物体的光滑组是连续的时候挤出的效果是没问题的当光滑组不连续例如一个Box顶点挤出后会出现分离问题。你当然可以在类似max这种软件中将Box的光滑组强行编成一组这样导入Untiy中之后挤出效果倒是没问题了但是本身显示效果就不是硬边的效果了这也不对啊。但是如果在使用Shader渲染Mesh的时候使用的不是原始的Mesh而是通过上述代码生成的新的Mesh由于顶点是共用的就不存在出现挤出分离的问题。关于具体的Shader就不说了玩过Shader的都懂。 第二个是查找物体的边界一般来说查找物体边界的方法是找到不被两个三角形共用的边但是Unity中Mesh默认所有的顶点都是单独被面列表使用的根本没有所谓被两个三角形共用的边的情况这中情况会发现所有的三角形的边都是边界貌似行不通所以还是需要上述方法将Unity中Mesh重叠顶点合并再去查找边界。其查找边界的代码参考如下由于Mesh的编辑可能不止一组所以用的返回值是Listint[]是顶点编号数组的列表 Listint[] GetEdgeIndexes(Mesh mesh){Vector3[] vs mesh.vertices;int[] ts mesh.triangles;DictionaryEdge, int dicEdge new();for (int i 0; i ts.Length; i 3){int indexA ts[i];int indexB ts[i 1];int indexC ts[i 2];bool hasSameEdge01 false;bool hasSameEdge02 false;bool hasSameEdge03 false;KeyValuePairEdge, int[] kvs dicEdge.ToArray();for (int j 0; j kvs.Length; j){Edge edge kvs[j].Key;if (edge.IsSame(indexA, indexB)) { hasSameEdge01 true; dicEdge[edge] 1; continue; }if (edge.IsSame(indexB, indexC)) { hasSameEdge02 true; dicEdge[edge] 1; continue; }if (edge.IsSame(indexC, indexA)) { hasSameEdge03 true; dicEdge[edge] 1; continue; }}if (!hasSameEdge01) { dicEdge.Add(new Edge(indexA, indexB), 1); }if (!hasSameEdge02) { dicEdge.Add(new Edge(indexB, indexC), 1); }if (!hasSameEdge03) { dicEdge.Add(new Edge(indexC, indexA), 1); }}ListEdge edges new ListEdge();foreach (var kv in dicEdge){if (kv.Value 1){edges.Add(kv.Key);}}foreach (var item in edges){Debug.Log(item.a , item.b);}Listint[] listEdgeIndexes new();while (edges.Count 0){Listint listTriangle new(){edges[0].a,edges[0].b};edges.RemoveAt(0);while (true){int indexLast listTriangle[^1];bool hasAddIndex false;for (int i 0; i edges.Count; i){Edge edge edges[i];if (indexLast edge.a){listTriangle.Add(edge.b);hasAddIndex true;edges.RemoveAt(i);break;}if (indexLast edge.b){listTriangle.Add(edge.a);hasAddIndex true;edges.RemoveAt(i);break;}}if (!hasAddIndex){listEdgeIndexes.Add(listTriangle.ToArray());break;}}}return listEdgeIndexes;} 其中所用到的Edge类代码如下 public class Edge {public readonly int a;public readonly int b;public Edge(int a, int b){this.a a;this.b b;}public bool IsSame(Edge edge) { return (a edge.a b edge.b) || (a edge.b b edge.a); }public bool IsSame(int a, int b) { return (a this.a b this.b) || (a this.b b this.a); } } 下图将一个球体挖了三个洞洞通过上述方法查找到边界并用LineRenderer渲染了边界。
http://www.hkea.cn/news/14497316/

相关文章:

  • 网站建设费包括网站上面的彩票快3怎么做
  • 基层建设期刊上什么网站查询文章icp备案添加网站
  • 外贸推广网站哪家中国东凤网站制作
  • 佛山网站制作咨询网站建设需求登记表 免费下载
  • 网站meta标签怎么做推广赚钱的app有哪些
  • 湘潭手机网站网站建设美工招聘
  • 白云鄂博矿区网站建设wordpress破解主题教程
  • 山西省建设注册中心网站首页智慧团建电脑版登录入口官网
  • 哪种源码做视频网站好用许昌城乡建设局网站
  • 网站开发设计书籍wordpress空页面模板
  • 贵州城乡建设部网站首页无锡网络公司无锡网站制作
  • 怎么做网站百度经验石家庄网站建设费用
  • 药理学网站建设方案山东省住房建设部网站首页
  • 福田做网站怎么样怎么利用网站上的图片
  • 网站的交互怎么做上海什么公司最有名
  • 做区位分析的网站建设类网站有哪些
  • 网站卡的原因陕西省建设工程质量监督站网站
  • 盘锦网站建设策划网站外链怎么做
  • 做地方网站要办什么证wordpress手机图片站
  • pc网站如何转为手机版西安网站建设孙正学
  • 网站建设实训实训心得后端开发是什么
  • 电子商务网站建设读书笔记dede wap网站模板下载
  • 响应式网站代理用vs2012做asp网站
  • 3d地图网站模板html网站建设与推广范文
  • asia 域名 知名网站全网搜索软件下载
  • 二级目录怎么做网站阜阳seo
  • 个人网站备案可以盈利吗dw php网站开发
  • 建设银行网银官方网站如何在百度创建网站
  • 江宁交通建设集团网站做素材网站服务器
  • 郑州做网站 码通网站开发建站微信公众号小程序