【发布时间】:2017-12-27 15:51:37
【问题描述】:
我正在使用 QT QML 3D 中的 C++ 开发应用程序。我需要将数十个浮点值(或浮点数的向量)传递给片段着色器。这些值是灯光的位置和颜色,所以我需要的值范围大于 0.0 到 1.0。但是,不支持将浮点数或整数数组传递给 QML 中的着色器。我的想法是将浮点数保存到纹理中,将纹理传递给着色器并从中获取值。
我尝试过这样的事情:
float array [4] = {100.5, 60.05, 63.013, 0.0};
uchar data [sizeof array * sizeof(float)];
memcpy(data, &array, sizeof array * sizeof(float));
QImage img(data, 4, 1, QImage::Format_ARGB32);
并将此 QImage 作为 sampler2D 传递给片段着色器。但是有没有像 memcpy 这样的方法从 GLSL 中的纹理中获取值? texelFetch 方法只返回 vec4,浮点数范围为 0.0 到 1.0。那么如何从着色器中的纹理中获取原始值? 我更喜欢使用 sampler2D 类型,但是在 GLSL 中是否还有其他类型支持直接内存访问?
【问题讨论】:
-
这并不能解决我的问题。创建具有正确浮点值的 QImage 没有任何问题。我在着色器(在 GLSL 中)中访问这些值时遇到问题。