在HLSL中如何将float赋值为NaN?如何返回float3(nan, nan, nan)?
float3类型自定义函数异常分支返回值实现方案
你可以根据运行环境选择以下两种常用实现方式:
- 返回全NaN的float3值
如果你使用的是HLSL、GLSL、Unity ShaderLab等支持float3构造的着色器语言,直接传入三个NaN值构造即可:
若运行环境未提供全局float3 CustomFunc(bool condition) { if(condition) { // 满足条件时的正常返回逻辑 return float3(0.5f, 0.5f, 1.0f); } // 异常分支返回全NaN return float3(nan, nan, nan); }nan常量,可以通过0.0f / 0.0f的运算得到NaN值:float nan = 0.0f / 0.0f; return float3(nan, nan, nan); - 返回全无穷大的float3值
无穷大值同样可以作为异常返回的标记值,构造方式如下:// 方式1:运算得到正无穷 float inf = 1.0f / 0.0f; return float3(inf, inf, inf); // 方式2:部分环境支持直接调用inf常量 return float3(inf, inf, inf);
注意:后续使用该函数返回值时,需要先校验值的有效性,确认不是NaN或无穷大后再参与后续运算,避免非法值导致输出结果异常。
内容的提问来源于stack exchange,提问作者Jimmy Diddler
相关产品推荐
相关产品推荐

