我基本上试图向用 glsl 编写的光线追踪器提供有关对象的不同形状信息。
形状像
球体:vec3中心;浮动半径;
盒子:vec3中心;vec3 半尺寸;
等等
问题是以下要求:
- 在片段着色器中可以访问所有形状
- 不要使用统一变量在每一帧都发送它们,以某种方式将它们缓存更长的时间,直到手动删除。
- 能够从应用程序更新数据
- 每种类型的数据都是可变长度的(球体、盒子的数量,...)
数据不交错。
- 所以统一变量发送太多数据。
- 很多对象的属性似乎都没有(属性数组使用每个元素的位置)
- 纹理会不必要地更改数据,并且很难访问形状信息
那么如何做到这一点呢?
最好还具有表示数据的结构。像 struct Sphere { vec3 p; 浮动 r; }; ...