【发布时间】:2013-12-19 17:29:09
【问题描述】:
我自己似乎无法解决这个问题,在谷歌上搜索了一些我空白的地方后,我认为是时候转向社区寻找答案了。
我正在处理的项目中有一些代码,我将提供一个非常简化的版本,但它应该有助于我展示这个概念。
//hlsl code
...
ps_main(...) {
half mask = function_calculating_mask_and_returning_half();
half3 color = condition ? a_previously_defined_half3 : mask.rrr;
}
这里的最后一行让我感到困惑,尤其是mask.rrr 它到底有什么作用?据我了解,它会返回一个half3 (mask, mask, mask),但我似乎从中获得了非常高的价值,如果我将其更改为mask.r 或只是mask,它会给我一个值低得多的结果,(如据我所知)。
会不会是像half3(mask^3, mask^3, mask^3) 这样的事情?因为这就是查看结果时的样子。
无论如何,我感谢有关代码如何工作的建议或解释,以及用.rrr 为half 下标的含义以及对可能下标的任何参考将是一份精美的圣诞礼物。 :P
【问题讨论】:
-
你的目标DX和着色器模型版本是什么?这个着色器可以正常工作吗?
-
我实际上对
hlsl和一般使用它的渲染器有点陌生。但它针对 DX9 及更高版本。它确实有效,并且似乎达到了预期的效果,唯一的问题是这个color在延迟阶段用于对镜面反射进行着色,当我使用mask.rrr时,我得到了超高镜面反射,这就是我怀疑的原因mask.rrr的作用类似于乘以该值。所以主要的失败部分是我对mask.rrr下标的理解。