【发布时间】:2015-06-22 11:19:26
【问题描述】:
如何将网格的每个顶点绘制为一个圆?
【问题讨论】:
标签: ios unity3d shader mesh particles
如何将网格的每个顶点绘制为一个圆?
【问题讨论】:
标签: ios unity3d shader mesh particles
您可以使用 geometry shaders 在 GPU 上创建 billboarding geometry from each vertex。然后,您可以将圆形创建为几何图形,或者创建四边形并使用圆形纹理来绘制它们(我推荐后者)。 但几何着色器尚未得到广泛支持,在 iOS 中更是如此。如果您确定要运行它的计算机支持它,那就去吧。
如果几何着色不是一个选项,您最好的两个选择是:
Particle System,它已经处理了网格创建和广告牌。要在每个顶点位置创建一个粒子,请使用ParticleSystem.Emit。您系统的模拟空间应该是Local。如果顶点移动,请使用SetParticles 更新它们。Mesh。如果相机和点不移动,您可以以固定形状创建网格。否则,您将需要在程序网格上或通过着色器为广告牌设置动画。更新: 5,000,000 积分是一个很多。尽管Particle Systems 可以通过创建大量内部网格来处理大量数字,但大量的处理确实会占用 CPU。即使这些点在空间中是静态的,也必须在每一帧更新一个没有特殊着色器的程序网格以获得广告牌效果。
我的建议是创建许多网格(单个网格无法处理这么多的几何图形)。网格将每点包含一个四边形(或三角形,如果你敢,使其更快),但四个顶点将位于同一点。然后在顶点程序中使用纹理坐标将其扩展为广告牌四边形。
【讨论】:
假设您在谈论 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);
}
【讨论】: