58

小さなobjローダーがあり、2つのパラメーターを取り、それらを入力変数に戻します..しかし、これを行うのはこれが初めてで、その値を今すぐ​​出力する方法がわかりません。これが、ローダーが機能しているかどうかをテストするための私の主な機能です。glm::vec3頂点データと法線データを保持するタイプのベクトルが 2 つあります。

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

私が間違っていることは何ですか?

4

6 に答える 6

130

glm にはこのための拡張機能があります。追加#include "glm/ext.hpp"または"glm/gtx/string_cast.hpp"

次に、たとえばベクトルを印刷するには:

glm::vec4 test;
std::cout<<glm::to_string(test)<<std::endl;
于 2013-02-23T22:47:26.810 に答える
15

glm::vec3オーバーロードしないoperator<<ため、ベクター自体を出力できません。ただし、できることは、ベクトルのメンバーを出力することです。

std::cout << "{" 
          << vertices[i].x << " " << vertices[i].y << " " << vertices[i].z 
          << "}";

さらに良いことに、それをたくさん使用すると、operator<<自分自身に過負荷をかける可能性があります。

std::ostream &operator<< (std::ostream &out, const glm::vec3 &vec) {
    out << "{" 
        << vec.x << " " << vec.y << " "<< vec.z 
        << "}";

    return out;
}

次に、印刷するには、次を使用します。

std::cout << vertices[i];
于 2012-07-17T03:13:52.400 に答える