本文实例为大家分享了Unity3D网格功能生成球体网格模型的具体代码,供大家参考,具体内容如下
前面已经讲过怎样使用网格生成一个自己的网格,那么本文将会讲述怎样将这个网格变换成自己想要的形状,比如一个球体。
我们需要知道一个从平面坐标到球体坐标的映射公式。假设平面坐标是(x, y),球体坐标是(x0, y0, z0),则
球体坐标(x0, y0, z0)可以通过以下代码得到,(x, y)对应顶点[我]。x和顶点[我].y。
v。x=r * Mathf.Cos(顶点[我]。x/宽* 2 * Mathf.PI) * Mathf.Cos(顶点[我]。* Mathf y/高度。π- Mathf。π/2); v。y=r * Mathf.Sin(顶点[我]。x/宽* 2 * Mathf.PI) * Mathf.Cos(顶点[我]。* Mathf y/高度。π- Mathf。π/2); v。z=r * Mathf.Sin(顶点[我]。* Mathf y/高度。π- Mathf。π/2);
完整代码在最后,将完整的脚本绑定到一个空物体上,把棋盘格图案chessboard.jpg放到资产\资源下,还要在场景中生成一个球体作为显示网格顶点的辅助物体。一切就绪后,运行效果如下:
使用UnityEngine; 使用System.Collections; 公开课BallMesh: MonoBehaviour { 网状网; Vector3[]顶点; Vector2[]紫外线; int[]三角形; Vector3[]法线; 公共GameObject球体; GameObject[]领域; 无效的Start () { gameObject.AddComponent(); gameObject.AddComponent (); 纹理img=(纹理)Resources.Load (tm); .material gameObject.GetComponent ()。mainTexture=img; 网=new网(); int m=25;//行 int n=50;//坳 浮动宽度=8; 浮子高度=6; 顶点=new Vector3 [(m + 1) * (n + 1)];//顶点的位置 球=new GameObject [(m + 1) * (n + 1)]; 紫外线=new Vector2 [(m + 1) * (n + 1)]; 法线=new Vector3 [(m + 1) * (n + 1)]; 三角形=new int [6 * m * n]; for (int i=0;我& lt;vertices.Length;我+ +) { 浮动x=我% (n + 1); 浮动y=i/(n + 1); 浮动x_pos=x/n *宽度; 浮动y_pos=y/m *高度; 顶点[我]=new Vector3 (x_pos y_pos 0); 浮动u=x/n; 浮动v=y/m; 紫外线[我]=new Vector2 (u, v); } for (int i=0;我& lt;2 * m * n;我+ +) { int [] triIndex=new int [3]; 如果(我% 2==0) { triIndex [0]=i/2 + i/(2 * n); triIndex [1]=triIndex [0] + 1; triIndex [2]=triIndex [0] + (n + 1); } 其他的 { triIndex [0]=(i + 1)/2 + i/(2 * n); triIndex [1]=triIndex [0] + (n + 1); triIndex [2]=triIndex [1] - 1; } 三角形(* 3)=triIndex [0]; 三角形(我* 3 + 1)=triIndex [1]; 三角形(我* 3 + 2]=triIndex [2]; } int r=10; for (int i=0;我& lt;vertices.Length;我+ +) { 球体[我]=GameObject实例化(球体,this.transform); Vector3 v; v。x=r * Mathf.Cos(顶点[我]。x/宽* 2 * Mathf.PI) * Mathf.Cos(顶点[我]。* Mathf y/高度。π- Mathf。π/2); v。y=r * Mathf.Sin(顶点[我]。x/宽* 2 * Mathf.PI) * Mathf.Cos(顶点[我]。* Mathf y/高度。π- Mathf。π/2); v。z=r * Mathf.Sin(顶点[我]。* Mathf y/高度。π- Mathf。π/2);//顶点v=[我]; 顶点[我]=v; 球体[我].transform。localPosition=v; 法线[我]=new Vector3 (0,1,0); } 网。顶点=顶点; 网。法线=法线; 网。紫外线=紫外线; 网。三角形=三角形; this.GetComponent ()。网=网; } } >之前 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Unity3D网格功能生成球体网格模型