我使用顶点和片段着色器对来绘制圆柱冒名者以进行分子可视化。着色器在屏幕上渲染 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)))
Run Code Online (Sandbox Code Playgroud)
最快的方法是什么?上述问题的替代解决方案非常受欢迎。
此致,
麦兹
因为精度确实是浮点计算的一个问题,所以确实应该考虑到它。
#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));
Run Code Online (Sandbox Code Playgroud)
然后可以结合该技术来产生更复杂的检查。