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

How to draw each a vertex of a mesh as a circle

如何将网格的每个顶点画成一个圆?

假设您谈论的是二维网格:

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

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

您可以在 GPU 上使用 geometry shaders to create billboarding geometry from each vertex 来完成。然后,您可以将圆圈创建为几何图形,或者创建四边形并使用圆形纹理来绘制它们(我推荐后者)。 但几何着色器尚未得到广泛支持,在iOS中更是如此。如果您确定 运行 所在的那台计算机支持它,那就去吧。

如果几何着色不是一个选项,您的两个最佳选择是:

  • 使用已经处理网格创建和广告牌的 Particle System。要在每个顶点位置创建一个粒子,请使用 ParticleSystem.Emit. Your system's simulation space should be Local. If the vertices move, use SetParticles 更新它们。
  • 正在创建一个已经包含您需要的几何体的程序Mesh。如果相机和点不移动,您可以创建固定形状的网格。否则,您将需要在程序网格上或通过着色器为广告牌设置动画。

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

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