zoukankan      html  css  js  c++  java
  • 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上。

    本博客所有内容为原创,转载需征求作者同意。
  • 相关阅读:
    mongoDB安装配置
    linux-批量修改目录下后缀shell
    备份mysql的shell
    mysql_DML_索引、视图
    mysql_存储过程
    mysql_备份_mysqldump
    mysql_DCL_grant/revoke
    mysql_DML_select_子查询
    mysql_DML_select_union
    mysql_DML_select_聚合join
  • 原文地址:https://www.cnblogs.com/xueyudlut/p/10101461.html
Copyright © 2011-2022 走看看