Unity3D网格功能生成球体网格模型

  

本文实例为大家分享了Unity3D网格功能生成球体网格模型的具体代码,供大家参考,具体内容如下

  

前面已经讲过怎样使用网格生成一个自己的网格,那么本文将会讲述怎样将这个网格变换成自己想要的形状,比如一个球体。

  

我们需要知道一个从平面坐标到球体坐标的映射公式。假设平面坐标是(x, y),球体坐标是(x0, y0, z0),则

  

 Unity3D网格功能生成球体网格模型

  

 Unity3D网格功能生成球体网格模型

  

 Unity3D网格功能生成球体网格模型

  

球体坐标(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放到资产\资源下,还要在场景中生成一个球体作为显示网格顶点的辅助物体。一切就绪后,运行效果如下:

  

 Unity3D网格功能生成球体网格模型

  

 Unity3D网格功能生成球体网格模型

        使用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网格功能生成球体网格模型