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上。

    本博客所有内容为原创,转载需征求作者同意。
  • 相关阅读:
    jenkins:用jenkins通过ssh部署jar包到远程linux机器(jdk 15 / jenkins 2.257)
    linux(centos8):安装java jdk 15 (java 15)
    38. 外观数列 迭代
    58. 最后一个单词的长度
    kmp字符串匹配
    单词规律
    1502. 判断能否形成等差数列
    1496. 判断路径是否相交
    1475. 商品折扣后的最终价格
    一维数组的动态和
  • 原文地址:https://www.cnblogs.com/xueyudlut/p/10101461.html
Copyright © 2011-2022 走看看