如何将网格的每个顶点绘制为圆形

时间:2015-06-22 11:19:27

标签: ios unity3d shader mesh particles

如何将网格的每个顶点绘制成圆形?

2 个答案:

答案 0 :(得分:1)

假设你在谈论2D网格:

创建一个圆形游戏对象(或带有圆形纹理的游戏对象),并将其导出为预制件:

var meshFilter = GetComponent(typeof(MeshFilter)) as MeshFilter; 
var mesh = meshFilter.mesh;
foreach(var v in mesh.vertices)
{
     var obj= Instantiate(circlePrefab, v, Quaternion.identity); 
} 

enter image description here

答案 1 :(得分:1)

您可以使用geometry shaders在GPU上创建billboarding geometry from each vertex。然后,您可以将圆形创建为几何体,或创建四边形并使用圆形纹理绘制它们(我建议稍后使用)。 但几何着色器尚未得到广泛支持,在iOS中则更少。如果你确定你将运行它的计算机支持它,那就去吧。

如果几何着色不是一个选项,那么您最好的两个选项是:

  • 使用已经处理网格创建和广告牌的Particle System。要在每个顶点位置创建粒子,请使用ParticleSystem.Emit。您系统的模拟空间应为Local。如果顶点移动,请使用SetParticles更新它们。
  • 创建已包含所需几何图形的程序Mesh。如果摄像机和点不移动,您可以创建固定形状的网格。否则,您需要在程序网格或着色器上为广告牌设置动画。

更新:5,000,000分是批次。虽然Particle Systems可以通过创建大量内部网格来处理大数字,但是大量的处理确实会占用CPU。即使这些点在空间中是静态的,也必须每帧更新一个没有特殊着色器的程序网格,以实现广告效果。

我的建议是创建许多网格(单个网格无法处理那么多的几何体)。网格将每个点组成一个四边形(如果你敢,则为三角形,以使其更快),但四个顶点将位于同一点。然后在顶点程序中使用纹理坐标将其展开为广告牌四元组。