我正在编写的 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 三遍。
所以我的问题是:为什么它只绘制向量中的最后一项三遍?我也尝试过使用迭代器和普通的 for 循环,但它们都产生相同的结果。
有人有想法吗?
编辑
getName() 函数:
string Sphere::getName() {
return name;
}
向量的迭代器:
vector<Sphere>::iterator it;
void display() {
for(it = planets.begin(); it != planets.end(); ++it) {
it->draw();
}
}
在 Sphere 中绘制代码:
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;
}