gpt4 book ai didi

c++ - 如何使用 GLM vector 关系函数?

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:21 25 4
gpt4 key购买 nike

我正在尝试创建一组 std::GLM vector (特别是 glm::vec3)。由于 C++ 不知道如何对 vector 执行 < 操作,我必须传入比较函数。

我可以通过创建这样的结构来编写自己的结构:

struct compareVec
{
bool operator() (const glm::vec3& lhs, const glm::vec3& rhs) const
{
return lhs.x < rhs.x && lhs.y < rhs.y && lhs.z < rhs.z;
}
};
std::set< glm::vec3, compareVec > myset;

但是,我确信 GLM 包含他们自己的 vector 比较函数。

我找到了以下资源,但不确定如何使用它: https://glm.g-truc.net/0.9.4/api/a00137.html

如何将这些比较函数之一传递给我的集合?

最佳答案

好的,差不多了! glm::lessThan 返回一个 vector 类型,而不是一个 bool 值。这就是为什么您的比较器不起作用的原因。您可以在其上使用 glm::all 来获取 bool 值。来自 glm::all

的文档

bool glm::all ( vecType< bool > const & v )

Returns true if all components of x are true.

Template Parameters vecType Boolean vector types.

如果这对您有意义,您必须自己决定,即使我不建议这样做,据我所知,这将导致以下问题:

Consider:
lhs = (1,2,3)
rhs = (0,1,4)

Than:

lhs < rhs ==> false, since lhs.x and lhs.y are larger than the corresponding components of rhs
rhs < lhs ==> false, since rhs.z component is larger than lhs.z

由于两个 vector 都不能被排序为更小,这意味着它们是相等的。我怀疑这是您想要的行为(我已经就此警告过您)。

如果您仍然决定使用它,这里是一个在 MSVC2010 上测试过的最小工作示例:

#include <set>
#include <glm/vec3.hpp>
#include <glm/detail/func_vector_relational.hpp>

struct compareVec
{
bool operator() (const glm::vec3& lhs, const glm::vec3& rhs) const
{
return glm::all(glm::lessThan(lhs, rhs));
}
};

int main()
{

std::set<glm::vec3, compareVec> myset;

return 0;
}

也许这有帮助。

关于c++ - 如何使用 GLM vector 关系函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com