我如何打印通过引用传递的glm :: vec3类型的矢量值?

问题描述 投票:42回答:4

我有一个小的obj加载程序,它需要两个参数并将它们传递回输入变量。。但是,这是我第一次这样做,现在我不确定如何打印所述值。这是我测试加载程序是否正常工作的主要功能。我有两个glm::vec3类型的矢量来保存顶点和法线数据。

std::vector<glm::vec3> vertices;
std::vector<glm::vec3> normals;    

int main() {
    bool test = loadOBJ("cube.obj", vertices, normals);
    for (int i = 0; i < vertices.size(); i++) {
       std::cout << vertices[i] << std::endl;   // problem line
    }

    return 0;   
}

上面注释的行正在生成无用的信息。如果我就这样保留它并运行程序,我会冒出很多错误(太无格式,很难在这里粘贴),如果我添加引用运算符,则会得到如下输出:

0x711ea0
0x711eac
0x711eb8
0x711ec4    // etc

知道我在做什么错吗?

c++ glm-math
4个回答
108
投票

glm对此具有扩展名。添加#include "glm/ext.hpp""glm/gtx/string_cast.hpp"

然后打印矢量:

glm::vec4 test;
std::cout<<glm::to_string(test)<<std::endl;

17
投票

[我认为最优雅的解决方案可能是已经发布的两个答案的结合,加上模板,因此您不必为所有矢量/矩阵类型重新实现运算符(这将函数定义限制在头文件中,不过)。

#include <glm/gtx/string_cast.hpp>

template<typename genType>
std::ostream& operator<<(std::ostream& out, const genType& g)
{
    return out << glm::to_string(g);
}

13
投票

glm::vec3不会超载operator<<,因此您无法打印矢量本身。但是,您可以做的是打印向量的成员:


0
投票

为了获得正确的重载解决方案,您可以执行以下操作:

© www.soinside.com 2019 - 2024. All rights reserved.