У меня есть очень простая программа openGL на C ++. Я сделал объект Sphere, который просто рисует сферу. Я хочу иметь глобальную переменную, которая создается в main (), то есть сфера = сфера (радиус и т. Д.), А затем рисуется в draw (), т.е. сфера .draw (), но C ++ не позволяет мне. В качестве альтернативы, если у меня есть ссылка на сферу в main (), я не могу передать ее функции рисования, потому что я сам не определил функцию рисования. Этот псевдокод может объяснить это немного лучше:
include "sphere.h"
Sphere sphere; <- can't do this for some reason
draw()
{
...
sphere.draw()
}
main()
{
glutDisplayFunc(draw)
sphere = Sphere(radius, etc)
}
Я уверен, что это очень просто, но Google трудно найти ответ, и поверьте мне, я пытался. Я понимаю, что использование глобалов «плохо», но альтернативы, похоже, нет. В конце концов я хочу иметь еще один класс под названием «мир», который содержит ссылки на сферы и функцию рисования, но еще одна проблема заключается в том, что я не знаю, как перенаправить glutDisplayFunc на функцию класса. Я попытался glutDisplayFunc (phere.draw), очевидно, это ужасно неправильно.
Ошибка компилятора:
../src/Cplanets.cpp:9: ошибка: нет подходящей функции для вызова Sphere :: Sphere () ’
../src/Sphere.cpp:28: примечание: кандидаты: Sphere :: Sphere (std :: string, float, float, float)
../src/Sphere.cpp:13: note: Сфера :: Сфера (const Sphere &)
Класс сферы:
/*
* Sphere.cpp
*
* Created on: 3 Mar 2011
* Author: will
*/
#include <GL/glut.h>
#include <string>
using namespace std;
class Sphere {
public:
string name;
float radius;
float orbit_distance;
float orbit_time;
static const int SLICES = 30;
static const int STACKS = 30;
GLUquadricObj *sphere;
Sphere(string n, float r, float od, float ot)
{
name = n;
radius = r;
orbit_distance = od;
orbit_time = ot;
sphere = gluNewQuadric();
}
void draw()
{
//gluSphere(self.sphere, self.radius, Sphere.SLICES, Sphere.STACKS)
gluSphere(sphere, radius, SLICES, STACKS);
}
};