在 Metal 中绘制点

Posted

技术标签:

【中文标题】在 Metal 中绘制点【英文标题】:Draw points in Metal 【发布时间】:2016-04-28 11:12:04 【问题描述】:

我使用 drawIndexedPrimitives 函数,但我不知道应该在哪里调整点的大小。在 OpenGL ES 中,我可以在着色器中调整点大小:gl_PointSize = 10.0f;这在 Metal 中是如何工作的?

顺便说一句,对于从文件中绘制点,我有一个 las 文件(3d 点云数据:一种顺序二进制格式,用于存储来自传感器的数据并用作某些应用程序的中间处理存储),我想导入它到Xcode并使用Metal for ios渲染这些点,有人知道如何使用Metal实现las文件吗?我应该在导入之前将其转换为 OBJ 还是 PLY?

画点函数(swift):

commandEncoder.drawIndexedPrimitives(.Point,
                                     indexCount:indexCount,
                                     indexType:.UInt16,
                                     indexBuffer:indexBuffer,
                                     indexBufferOffset: 0)

【问题讨论】:

【参考方案1】:

我发现在着色器中定义了点大小。

在结构体中为顶点着色器设置一个变量

 struct VertexOut
...
    float pointsize[[point_size]];
...

并设置 var 的值:

VertexOut.pointsize = 10.0;

然后在主代码中使用Draw points函数:

commandEncoder.drawIndexedPrimitives(.Point,
                                     indexCount:indexCount,
                                     indexType:.UInt16,
                                     indexBuffer:indexBuffer,
                                     indexBufferOffset: 0)

但仍然卡在 las 文件中……不知道如何用 Metal 渲染它……

【讨论】:

以上是关于在 Metal 中绘制点的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Metal 绘制弧线?

如何使用 Metal API 或 Accelerate Framework 绘制裁剪的位图?

一步步学Metal图形引擎1-《绘制第一个三角形》

一步步学Metal图形引擎1-《绘制第一个三角形》

如何在 Metal 中组合使用不同着色器的渲染命令编码器

Metal(iOS)中的多重采样/锯齿状边缘