glm::vec3 和 epsilon 比较

Pil*_*pel 1 opengl glm-math

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

直到现在我在写

if(v == glm::vec3(0,0,0))
    ...
Run Code Online (Sandbox Code Playgroud)

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

if(abs(v.x) < EPSILON && abs(v.y) < EPSILON && abs(v.z) < EPSILON)
    ...
Run Code Online (Sandbox Code Playgroud)

JE4*_*E42 10

您还可以使用 glm 的epsilon 比较函数:epsilonEqual。它们在 glm/gtc/epsilon.hpp 中声明


BDL*_*BDL 7

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

if (glm::all(glm::lessThan(glm::abs(v), glm::vec3(EPSILON)))) ...
Run Code Online (Sandbox Code Playgroud)

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

if (glm::length2(v) < EPSILON * EPSILON) ...
Run Code Online (Sandbox Code Playgroud)