Tag: 着色器

着色器的ARKit + SceneKit简介

之前我谈到过如何在SceneKit中创建自己的自定义几何,结果您可以使用它们进行某些操作,例如偏斜或动画。 请参阅此处的第2部分的第1部分: ARKit + SceneKit几何图形教程(第1部分) 在SceneKit中创建自己的几何形状,无需离开即可拥有各种场景和动画。 medium.com 在该系列的第二篇文章的结尾处,我展示了如何使用看起来像字符串的标志来设置标志的动画,这是在SceneKit中向几何体或材质添加着色器的一种方法。 在许多情况下,比起我所展示的其他示例,诸如我上一篇文章底部所示的着色器是使几何图形动画化的更好选择。 主要原因是这些功能由SceneKit接受,编译为Metal,然后在设备的GPU上运行,该GPU比要在其他地方运行的CPU强大得多。 这主要是因为GPU是专门为处理图形而构建的(因此,其名称为Gphphics Processing U nit),所以我们希望尽可能多地使用它! 我想在本文中提到的应用着色器的方法主要是通过使用SCNGeometry对象的shaderModifiers属性。 首先,请看这里: SCNShadable – SceneKit | Apple开发人员文档 着色器修改器是Metal着色器语言或OpenGL着色器语言(GLSL)中的源代码片段,可用于… developer.apple.com 作为一个简单的示例,请看以下小片段: 如果(_geometry.position.y> 0){ _geometry.position.x + = 0.5; } 假设我们将其应用于尺寸为SCNBox类型的几何。 _geometry代表顶点,正如我之前的文章中所述,其位置当然是其在3D空间[x, y, z] 。 在此代码段中,我们获取位置在立方体中心上方的所有顶点,并将其向x方向正方向的侧面推0.5m。 我们可以迅速使它变得更有趣,而无需考虑太多,例如: 如果(_geometry.position.y> 0){ _geometry.position.x + = 0.5 * sin(u_time); } u_time是SceneKit开始渲染此着色器以来的时间(以秒为单位)。 因此,这将在正弦缓和之后以平滑的方式将立方体的局部x轴上+0.5的这4个点动画化为-0.5。 最后,我将演示的多维数据集示例是使用单位圆方程将前四个点从沿直线移动更改为沿圆移动。 单击此处以查看Desmos的快速图表,以防万一您不确定该如何组合。 如果(_geometry.position.y> 0.0){ _geometry.position.xz + […]