由于某些需求,需要在苹果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上。

SceneKit下关于修改SCNNode 的Shader展示自定义图形的更多相关文章

  1. windows下如何修改远程登录端口

    windows下如何修改远程登录端口 windows远程桌面默认端口为3389,修改 方法如下:在"开始>运行"中输入"regedit" 点击“确定”,打 ...

  2. Ubuntu(16.04) 下如何修改(安装)arm-linux-gcc编译器

    ubuntu下如何修改(安装)arm-linux-gcc编译器 将gcc解压到根目录 sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C / 查看原来的环境变量 e ...

  3. [Android]Button按下后修改背景图

    Button按下后修改背景图 错误做法:为Button添加OnTouch事件监听,根据ACTION_UP和ACTION_DOWN动作来修改Button的背景图 错误原因:从理论上讲,按钮按下修改背景色 ...

  4. linux下如何修改iptables开启80端口

    linux下如何修改iptables开启80端口   最近在做本地服务器的环境,发现网站localhost能正常访问,用ip访问就访问不了,经常使用CentOS的朋友,可能会遇到和我一样的问题.开启了 ...

  5. 浅谈Linux下如何修改IP

    linux 下命令之浅谈//cd ..  //返回上一级//创建文件夹touch test.txt//Linux不区分大小写//往一个文件中追加内容echo "****" > ...

  6. %appdata%目录下配置文件修改

    %appdata%目录下配置文件修改 1.假设%appdata%\leez Program目录下有Cache子目录和配置文件Config.ini内容为: [Version] Version=1.0.0 ...

  7. ubunut在系统恢复模式下无法修改root密码的分析和解决

    前些日子本猫的ubuntu 14.10貌似出了点问题,想修改下root密码,但是无奈原系统有错正常情况下无法修改啊,这是逼我重装的节奏吗? 在ubuntu开机后立即按住left_shift不放,调出g ...

  8. 记录下本地修改php版本的过程, 本地PHP目录位置,PHP-FPM目录位置

    由于我在Cellar下安装了多个PHP版本,所以这里记录下如何修改本地的PHP版本 cd /usr/local/bin cp php71 php cp php71-fpm php-fpm vscode ...

  9. LINUX的DNS怎么设置?linux下如何修改DNS地址

    LINUX的DNS怎么设置?linux下如何修改DNS地址 https://jingyan.baidu.com/article/870c6fc32c028eb03fe4be30.html Linux下 ...

随机推荐

  1. 1000! mod 10^250

    1000! mod 10^250  =============== the answer is 2 ================ Hi I'm trying to solve the above ...

  2. 【个人经历】记自己的第一次GitHub开源代码共享经历

    题记: 自己做程序员快三年有余了,感觉自己和刚入职相比确实有了不少进步,当然三年要是不进步那不就傻了吗,有时候我也在想,我在这三年里留下了什么,当然也不是说有多么高尚的想法,就是以后对别人介绍自己的时 ...

  3. lsnrctl 与 tnsnames.ora 的联系

    平台:Windoxs XP+Oracle 11G 当使用oralce的 Net Manager创建了一个名为“L3”的Listener后,要想使用lsnrctl启动和关闭 L3 还必须在tnsname ...

  4. 为website安装免费的letsencrypt证书

    Certbot官网:https://certbot.eff.org 1. 安装certbot命令 wget https://dl.eff.org/certbot-auto chmod a+x cert ...

  5. springMVC入门-03

    接着上一讲介绍springMVC针对rest风格的支持. 查询数据 使用前:/user_show?id=120 使用后:/user/120 删除数据 使用前:/user_delete?id=123 使 ...

  6. Sql Server中的谓词和运算符

    谓词和运算符配合使用是我们得到理想数据的最佳途径. 一.浅谈谓词 谓词的概念:一个运算结果为True.False或Unknown的逻辑表达式.它的运用范围有:where子句.Having子句.Chec ...

  7. swift知识点 [1]

    swift知识点 [1] 循环遍历元素 三目运算符用途 Optional 与 ImplicitlyUnwrappedOptional 以及常规类型数据 is 的用法

  8. [原创]获取JS数组最大值、最小值

    核心关键 JS有Array数组对象,使用prototype内置属性扩展,增加Array数组max().min()方法 具体代码 //最小值 Array.prototype.min = function ...

  9. 026.1 网络编程 获取IP地址

    前面提及的:OSI,TCP-IP,IP地址,端口,协议概念我都清楚,所以我直接跳过前面,来到使用这里. //获取本机IP InetAddress ip = InetAddress.getLocalHo ...

  10. Mina使用总结(二)Handler

    Handler的基本作用,处理接收到的客户端信息 一个简单的Handler实现如下: package com.bypay.mina.handler; import java.util.Date; im ...