swift – 在SceneKit中绘制3D圆弧和螺旋线

swift – 在SceneKit中绘制3D圆弧和螺旋线,第1张

概述这里最近的一个问题让我再次想起了SceneKit,我想起了一个我从未解决过的问题. 我的应用程序使用SK显示天线设计.大多数天线使用金属杆和网状反射器,因此我使用SCNCylinder作为杆,SCNPlane作为反射器,SCNFloor作为地面.整个过程花了几个小时,而且我完全是3D的菜鸟. 但有些天线使用弯曲成弧形或螺旋形的导线,我在这里进行了踩踏,并使用端对端的几个圆柱体制作了蹩脚的分段物体. 这里最近的一个问题让我再次想起了SceneKit,我想起了一个我从未解决过的问题.

我的应用程序使用SK显示天线设计.大多数天线使用金属杆和网状反射器,因此我使用SCNCylinder作为杆,SCNPlane作为反射器,SCNFloor作为地面.整个过程花了几个小时,而且我完全是3D的菜鸟.

但有些天线使用弯曲成弧形或螺旋形的导线,我在这里进行了踩踏,并使用端对端的几个圆柱体制作了蹩脚的分段物体.它看起来很奇怪.

理想情况下,我希望单个对象呈现具有圆柱形横截面的弧或螺旋.基本上是SCNTorus,但具有开始和结束角度. This post讨论了在SK中使用UIBezIErPath,但它使用拉伸来生成类似带状的形状.有没有办法做类似但具有圆柱横截面(如部分SCNTorus)?

我知道我可以通过创建顶点(和法线等)来制作自定义形状,但我希望我错过了一个更简单的解决方案.

你可以用SCNShape做一个弧.从我的另一个答案的技术开始,得到一个挤压的,带状的弧形.您需要确保路径追溯的部分偏移了与挤出深度相同的距离,因此您最终会得到横截面为方形的形状.

要使其横截面为圆形,请使用chamferProfile属性 – 为其指定一个四分之一圆的路径,并将倒角半径设置为等于挤出深度的一半,并且四个四分之一圆倒角将相遇,形成圆形横截面.

螺旋是另一个故事. SCNShape采用平面路径 – 仅在两个维度上变化的路径 – 并将其拉伸以形成三维实体.螺旋是一个三维变化的路径. SceneKit没有任何描述这种术语形状的东西,所以这里没有超级简单的答案.

@HalMueller提到的着色器修改器解决方案很有趣,但有问题.在几何入口点使用修改器进行简单弯曲很简单 – 例如,将每个y坐标偏移一定量,即使是一个与原因相关的量.但这是一个一维变换,所以你不能用它来缠绕自己的线. (它也会改变横截面.)最重要的是,着色器修改器在渲染时发生在GPU上,因此它们的效果是幻觉:SceneKit模型中的“真实”几何体仍然是一个圆柱体,所以像命中测试这样的功能适用于此而不适用于转换后的几何体.

制作类似螺旋的最佳解决方案可能是自定义几何 – 生成您自己的顶点数据(SCNGeometrySource).如果您遵循该形状的definition,则在螺旋上找到点集的数学计算非常简单.要围绕它绘制横截面,请按照Frenet formulas在螺旋上的每个点创建局部坐标系.然后创建一个索引缓冲区(SCNGeometryElement)将所有这些点拼接成带有三角形或三角形的表面. (好吧,围绕一个深刻的主题,这是很多的挥手,但是一个完整的教程对于一个SO答案来说太大了.这应该足以让我们开始使用面包屑,不过……)

总结

以上是内存溢出为你收集整理的swift – 在SceneKit中绘制3D圆弧螺旋线全部内容,希望文章能够帮你解决swift – 在SceneKit中绘制3D圆弧和螺旋线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存