OpenGL を使用してプログラムを作成していますが、問題が発生しました。「Quad」というクラスがあり、問題を引き起こしている 2 つの変数は、パブリック マップとパブリック Vector3 (別のクラス) です。Quad.h で定義されている 2 つの変数を次に示します。
std::map<unsigned int, Vector3*> vertexes;
Vector3* normal;
次のように、Quadコンストラクターで「通常」が開始されます(それが言葉だと思います)。
normal = new Vector3(0,0,0);
マップは次のように追加されます。
vertexes[0] = &vertex;
vertex
プレーンな Vector3 であり、マップは Vector3 へのポインターを受け入れるため、そのように参照する必要がありました。
別の関数を使用して Vector3 の正しい値を出力できますが、何らかの理由でこれでセグメンテーション エラーが発生します。
void Quad::draw()
{
glNormal3f(normal->x, normal->y, normal->z);
for (std::map<unsigned int, Vector3*>::iterator i = this->vertexes.begin(); i != this->vertexes.end(); ++i) {
glVertex3f(i->second->x, i->second->y, i->second->z);
}
}
メソッドの内容をコメントアウトしてもエラーは発生しないため、パブリック変数が原因であることはわかっています。cout << normal->x << endl;
も障害を引き起こしますが、そうでcout << "Hello World!" << endl;
はありません。しかし、この関数とこれの違いは何ですか。
void Quad::calculateNormal()
{
Vector3 tmp = *vertexes[0];
tmp = tmp.getFaceNormal(*vertexes[1], *vertexes[2]);
normal = &tmp;
std::cout << *normal << std::endl;
}
ここで法線が再定義され、出力されます。で置き換えてもstd::cout << *normal << std::endl;
正しいstd::cout << normal->x << std::endl;
データが得られますが、他の関数ではそうではありませんか? わかりません。私はそれがばかげていると確信しています(そうであることを願っています)。前もって感謝します。