GLSL:确定向量是否不为零

时间:2013-12-22 13:07:48

标签: glsl

我使用顶点和片段着色器对绘制圆柱体冒充者以进行分子可视化。着色器在屏幕上呈现500.000个柱面(粘合)的订单。显然,着色器优化是一个问题。

对于每个渲染的柱面,我必须确定一些vec3,比如u,是不是零向量。我可能会这样做:

dot(u,u) != 0.0

(u.x != 0.0) || (u.y != 0.0) || (u.z != 0.0)

any(notEqual(u, vec3(0.0, 0.0, 0.0)))

这样做的最快方法是什么?上述的替代解决方案非常受欢迎。

致以最诚挚的问候,

的Mads

1 个答案:

答案 0 :(得分:1)

因为精度确实是浮点计算的一个问题,所以应该考虑它,实际上。

#define PRECISION 0.000001

float val = ...;
// returns 1.0 if it's in the range, 0.0 otherwise
float is_not_too_close_to_zero = step(-PRECISION, val) * (1.0 - step(PRECISION, val));

然后可以将这种技术组合起来以产生更复杂的检查。