GLSL:确定向量是否不为零

标签 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)))

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

最好的祝福,

麦兹

最佳答案

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

#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));

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

关于GLSL:确定向量是否不为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729757/

相关文章:

c++ - 如何将 texelFetch 与 GL_TEXTURE_2D 一起使用?

opengl - GLSL gl_FragCoord.z 计算和设置 gl_FragDepth

opengl - GLSL 1.5 和 OpenGL 3.3 : Passing color to vertex shader seems to fail

c++ - 为什么 opengl 中的 gl_FragCoord.z 与深度缓冲区之一不同?

python - 使用 pygtkglext 的着色器

GLSL 自旋锁永不终止

javascript - Three.js .png 图像呈现白色,而不是应有的样子

c++ - 在 OpenGL/GLSL 中绘制镶嵌的 LineLoops

c++ - 从 OpenGL 中的着色器读取多个纹理单元的问题

geometry - 如何将着色器转换为 azimuthal_equidistant