查看: 3915|回复: 4
打印 上一主题 下一主题

专业贴——Unity脚本创建Mesh

[复制链接]

12

主题

2

听众

231

积分

设计实习生

Rank: 2

纳金币
208
精华
0

最佳新人

跳转到指定楼层
楼主
发表于 2012-12-19 17:43:59 |只看该作者 |倒序浏览
说是专业贴,其实也没有那么专业,个人学过图形学,而且公司最近也在做移动方面的开发,所以就简单看了一些unity3d内部是如何对mesh进行管理的。
下面是Mesh类的成员变量和方法:(其实学习Unity就是学习内部的类的接口以及用法)
简单解读一下:在变量中,介绍几个较为重要的。1. vertexs 定点任何模型,包括在3dmax 或者maya里面都已以定点为基础建立起来的,所以创建模型其实就是要组织这些顶点。2. normal 法线任何模型上的任何点不都需要法线。法线的作用是相对于光照来说的,我们知道光照到顶点上会有反射,但是如何反射呢? 这个规律在物理上已经可以求了,但是在模型中怎表示呢?就是通过这些法线来计算的,怎么折射,怎么反射,参考就是法线。如图所示:

3.uv  uv表示二维纹理坐标每一个顶点要对应一个二维纹理坐标 为以后贴图对应起来坐标做准备。4.triangles 三角形每个模型的创建就是一个一个面组合的  每个面都是几个三角形拼成的,关于为什么是三角形,这个Google一个就会知道这里不多说了。
方法中:1. clear清楚2. RecaluculateBunds  是重新计算边界等等。
下面将一个我的例子:===================我是分割线=======================================================================================   public CubeMesh() {        topLeftFront = new Vector3(0.5f, 8, 15);        topRightFront = new Vector3(0.5f, 8, 15);        topLeftBack = new Vector3(-0.5f, 8, 15);        topRightBack = new Vector3(-0.5f, 8, 15);        bottomLeftFront = new Vector3(0.5f, -8, 15);        bottomRightFront = new Vector3(0.5f, -8, 15);        bottomLeftBack = new Vector3(-0.5f, -8, 15);        bottomRightBack = new Vector3(-0.5f, -8, 15); //以上定义了八个定点  用来绘画 Cube        GameObject newCubeObj=new GameObject("Default Cube"); //创建GameObject        Mesh newCubeMesh=new Mesh();        newCubeObj.AddComponent<MeshFilter>();        newCubeObj.AddComponent<MeshRenderer>();//添加两个组件         //add vertex        newCubeMesh.vertices=new Vector3[] {topLeftFront,topRightFront,topLeftBack,topRightBack,bottomLeftFront,bottomRightFront,bottomLeftBack,bottomRightBack}; //添加顶点向mesh        //add uv        Vector2[] uvs = new Vector2[newCubeMesh.vertices.Length];        for (int i = 0; i < uvs.Length;++i )        {            uvs =new  Vector2(newCubeMesh.vertices.x, newCubeMesh.vertices.z);        }        newCubeMesh.uv = uvs;        //add triangles        newCubeMesh.triangles = new int[]{0,5,4,0,1,5,                                          2,6,3,7,3,6,                                          5,3,7,5,1,3,                                          0,6,2,0,4,6,                                          0,2,1,1,2,3,                                          4,5,7,4,7,6,        };  指定三角面的绘画顺序,你可以更改一下试试。        newCubeMesh.RecalculateNormals();        newCubeObj.GetComponent<MeshFilter>().mesh = newCubeMesh;  添加mesh
    }
===================我是分割线=======================================================================================
解释看注释源码可以在这里下载。






分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38266
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-12-19 18:17:27 |只看该作者
请楼主多多发表移动开发方面的教程,尤其是优化方面更是需要,在此感谢!
回复

使用道具 举报

may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52312
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

板凳
发表于 2012-12-24 05:30:20 |只看该作者
来支持一下楼主的帖子哦
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-12-27 19:29:07 |只看该作者
学习了,虽然还是有难度,谢谢楼主的用心
回复

使用道具 举报

Zack    

459

主题

1

听众

5478

积分

高级设计师

Rank: 6Rank: 6

纳金币
5531
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2013-1-31 14:40:54 |只看该作者
支持一个,这类型的资料比较少
var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = ***e;c.src = ( 'https:' == document.location.protocol ? 'https://z': 'http://p') + '.chango.com/static/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-20 04:57 , Processed in 0.090339 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部