glm::vec3 和 epsilon 比较

glm::vec3 and epsilon comparison

我想检查 glm::vec3 是否等于零向量 glm::vec3(0,0,0)

直到现在我还在写

if(v == glm::vec3(0,0,0))
    ...

但后来我了解了 epsilon,所以我的问题是是否有比这样显式比较更快(更具可读性)的方法来进行此检查:

if(abs(v.x) < EPSILON && abs(v.y) < EPSILON && abs(v.z) < EPSILON)
    ...

一种更具可读性(也可能更快)的方法可能是使用 glms 向量比较方法:

if (glm::all(glm::lessThan(glm::abs(v), glm::vec3(EPSILON)))) ...

或者可以比较向量的长度(或平方长度,因为这不需要平方根计算)而不是元素:

if (glm::length2(v) < EPSILON * EPSILON) ...

您也可以使用 glm 的 epsilon comparison functions: epsilonEqual。它们在 glm/gtc/epsilon.hpp

中声明