【求助】Cocos Creator 2.2.1 中如何传递一个数组到 Effect 中呢

前言

使用的是 Cocos Creator 2.2.1 版本

已参考过论坛相关帖子,如:

但是依然没有成功,小总结一下,有三个点

  1. 如何定义 CCProgram 中的 uniform 数组?目前仅支持 vec4 类型数组?
  2. CCEffect 结构如何定义对应的 uniform 数组?据说是还没有支持?不写也可以吗?
  3. JS/TS 中如何设置数组进去

或者更具体一点,我怎么传入100个 vec2 点到 Effect 中呢?

同问 尝试过很多方法都没有成功。

是要自己定义顶点数据吗?

汪~搬个小板凳 坐等大神更新shader教程

相同问题

坐等大佬解答。。。

const mat = this.getComponent(cc.Sprite).getMaterial(0); mat.setProperty('colorArr',new Float32Array(8)); mat.setProperty('colorArr',[0,1,0,1, 1,0,0,1]);

js里这样写可以传

有完整的例子吗?

  1. js怎么传?

2.effect中怎么定义和接受传入值呢?

   //js 中最重要是这一句,这里参数是数组长度*数组里向量的维度
   mat.setProperty('colorArr',new Float32Array(400));
   //这里设置的时候需要把数组里向量的分量展开到一个一维数组
   mat.setProperty('colorArr',[]);

   //properties中定义,不过我试了这里写不写不影响
   colorArr: {value: [0,0,0,0]}

   //effect定义
   uniform Metaball {
       vec4 colorArr[100];
   };
2赞

谢谢老板,回头试一下先~

试了下,功能没问题,数组里的值能正确传递过去,感谢大神!

看ID好熟悉,几周前拜读过简书上Effect的一系列大作,还扫码支持了一把~

你提到的问题1:uniform数组定义时只能支持vec4数组?
直接定义vec2似乎会有什么padding的报错,用vec4有点空间浪费(先不考虑1个vec4存2个vec2这种做法);
不知道这个问题你那边有没有解决

你可以试试楼上大佬的说法,我没有后续尝试了~

我按照你这样定义的,传值传进去运行的时候警告属性长度不正确啥情况。。

感谢分享,我已再2.4.1成功传递,另外我看3.x文件,数组实际内容长度不够的话里面是用 -1 填充数组末尾元素,再 shader 文件中作为结束标记。下面是我成功传递的代码