将GLSL翻译为C ++ float / vec3?

时间:2014-01-15 19:26:12

标签: c++ glsl

这条线到底做了什么

ra.rgb * ra.w / max(ra.r, 1e-4) * (bR.r / bR);

我感到困惑的部分是如何翻译

(bR.r / bR);

浮点数除以vec3? 我想将它转换为C ++,但是返回一个浮点除以向量的所有元素是什么?等

(无法访问显卡进行检查?)

1 个答案:

答案 0 :(得分:4)

这是分量划分的一个例子,它的工作原理如下:

GLSL 4.40 Specification - 5.9表达式 - 第101-102页

  

如果操作数中的基本类型不匹配,则应用 4.1.10 “隐式转换”部分中的转换来创建匹配类型。 [...]转换后,以下情况有效:

     
    

[...]

         
        
  • 一个操作数是标量,另一个是矢量或矩阵。在这种情况下,标量操作独立应用于矢量或矩阵的每个分量,从而产生相同大小的矢量或矩阵。
  •     
  

给出表达式:

        vv vec3
(bR.r / bR);
    ^ float

标量bR.r基本上被提升为vec3 (bR.r, bR.r, bR.r),然后执行分量划分,产生vec3 (bR.r/bR.r, bR.r/bR.g, bR.r/bR.b)

因此,这个表达式相当于:

vec3 (1.0, bR.r/bR.g, bR.r/bR.b)