SceneKit下关于修改SCNNode 的Shader展示自定义图形


由于某些需求,需要在苹果OS x系统下展示一组点云,准备使用苹果官方的三维显示控件来完成这一功能。场景点云作为离散的点,

如果每个点以SCNnode的形式加入场景中,则回造成过大的内存消耗,笔者电脑下,单个场景展示到1w点时内存就崩溃了。所以准备通过

修改单个node的shader属性,实现自定义的形状,这样可以节省内存,还可以同时展示多个场景。查询了苹果的官方api文档,https://developer.apple.com/documentation/scenekit/scnshadable/1523348-shadermodifiers

说实话,的确没怎么看懂,以为看懂了写出来还是不对。搜索了一下傻瓜视频。才实现了基本颜色的功能。

(原本手册是非常管用的,只是不适合我这种英文不太好的菜鸟)

SCNProgram

通过使用GLSL(OpenGL Shading Language)或者Metal shading language进行重写。当你希望完全替换Scene Kit的原来的变换处理的时候,如果仅仅是简单的修该和替换的话,官方建议使用shaderModifiers属性,插入需要修改的属性,同样使用上面提到的两种方式。

修改vertexFunctionName和fragmentFunctionName定义预编译用的shader function,修改vertexShader和fragmentShader属性,提供OpenGL或者OpenGLES源码。

总之使用SCNProgram的权限比较大,但是需要定义的东西比较多。听从官方的建议,准备尝试下shaderModifiers属性

shaderModifiers

深度可以形成较复杂的几何形状,模拟出较为复杂的真实表面效果,增加较为艺术的光照效果,通过对每个像素的后续处理形成特殊效果。

这里定义的属性不同于SCNProgram,是额外追加到SceneKit的shader上的,完好保留原来的系统。

你可以将属性附加到SCNGeometry 或者SCNMaterial对象上,然后链接到shaderModifiers上。

优质内容筛选与推荐>>
1、 Java平台版本号的演变
2、iOS开发网络篇之文件下载、大文件下载、断点下载
3、[LeetCode]Reverse Integer
4、WMI测试
5、编译器水平报错常见问题


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号