【问题标题】:How to draw each a vertex of a mesh as a circle如何将网格的每个顶点绘制为圆形
【发布时间】:2015-06-22 11:19:26
【问题描述】:

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

【问题讨论】:

    标签: ios unity3d shader mesh particles


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我尝试使用着色器找到决策,但我不确定它是否(。使用粒子系统的决策可能比使用着色器的决策慢(我有大约 5000000 个顶点)。
    • @DenisS。顶点移动吗?有什么动画吗?
    • 没有动画
    • @DenisS。相机会旋转吗?相机会动吗?是否随时都可以看到所有点?这只是二维的吗?
    • 是的。相机旋转和移动。这是道路的 3D 扫描(laz 文件)。
    【解决方案2】:

    假设您在谈论 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); 
    } 
    

    【讨论】:

    • 这可能不会很好地扩展。 一个游戏对象负责绘制所有圆形纹理而不是每个圆形一个对象可能会更好
    • 我有 3d 网格(或大的顶点数组)。
    猜你喜欢
    • 2014-05-16
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多