我有一个小的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
知道我在做什么错吗?
glm对此具有扩展名。添加#include "glm/ext.hpp"
或"glm/gtx/string_cast.hpp"
然后打印矢量:
glm::vec4 test;
std::cout<<glm::to_string(test)<<std::endl;
[我认为最优雅的解决方案可能是已经发布的两个答案的结合,加上模板,因此您不必为所有矢量/矩阵类型重新实现运算符(这将函数定义限制在头文件中,不过)。
#include <glm/gtx/string_cast.hpp>
template<typename genType>
std::ostream& operator<<(std::ostream& out, const genType& g)
{
return out << glm::to_string(g);
}
glm::vec3
不会超载operator<<
,因此您无法打印矢量本身。但是,您可以做的是打印向量的成员:
为了获得正确的重载解决方案,您可以执行以下操作: