私が書いている OpenGL コードに奇妙なエラーがあります。テストとして、球のベクトルを作成し、push_back(s1) を使用しています。ベクトルに複数の球を追加しています。ただし、プログラムを実行すると、最後にベクターにプッシュされた球のみが描画されます。
#include "Sphere.h";
#include <iostream>;
#include <vector>;
using namespae std;
vector<Sphere> spheres;
Sphere s1 = Sphere(1.0, "One");
Sphere s2 = Sphere(2.0, "Two");
Sphere s3 = Sphere(3.0, "Three");
void init(void) {
spheres.push_back(s1);
spheres.push_back(s2);
spheres.push_back(s3);
for each(Sphere s in spheres) {
cout << s.getName() << "\n";
}
}
// OTHER CODE OMMITED
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 0.0);
glPushMatrix();
for each(Sphere in s) {
s.draw();
}
glPopMatrix();
}
明らかに、すべての GL がセットアップされている主な方法があり、そこに問題がないことはわかっています。
したがって、球には独自の描画方法があります。ここで興味深いのは、コンソールに次のように出力されることです。
Three
Three
Three
s3 を画面に 3 回描画します。
だから私の質問は、なぜベクトルの最後のアイテムを3回しか描画しないのですか? イテレータと通常の for ループも使用してみましたが、すべて同じ結果になります。
誰にもアイデアがありますか?
編集
getName() 関数:
string Sphere::getName() {
return name;
}
ベクトルの反復子:
vector<Sphere>::iterator it;
void display() {
for(it = planets.begin(); it != planets.end(); ++it) {
it->draw();
}
}
スフィアでコードを描画する:
GLdouble r = 0.0;
GLfloat X = 0.0f;
string name = " ";
Sphere::Sphere(GLdouble ra, GLfloat x, string n)
{
r = ra;
X = pos;
name = n;
}
Sphere::~Sphere(void)
{
}
void Sphere::draw(void)
{
glutSolidSphere(r, 10, 8);
glTranslatef(X, 0.0, 0.0);
}
string Sphere::getName(void)
{
return name;
}