Прошу прощения за мой вопрос
Я заметил свою ошибку, и она глупая. Все работает нормально Так как же я могу удалить вопрос?
Я не могу заставить Землю вращаться вокруг Солнца с OpenGL, и я понятия не имею, почему это так.
Вот урезанная версия (как мне кажется,) соответствующего исходного кода (на с ++).
Это функция Init()
, которая вызывается один раз до вызова любой другой функции OpenGL:
void Init() {
glMatrixMode(GL_MODELVIEW);
gluLookAt (
0, 1, -3, // Where am I
0, 0, 0, // Where am I looking at
0, 1, 0 // Direction of 'my head'
);
// Going to Projection mode ...
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// ... to set up perspective viewing.
glFrustum (-0.5, 0.5,
-0.5, 0.5,
1.0, 100.0);
// Going back to Model view since drawing
// is done entierly in Modelview.
glMatrixMode(GL_MODELVIEW);
}
Тогда это функция Draw()
, которая вызывается повторно для «оживления» сцены:
void Draw() {
glClear(
GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT
);
// Draw yellow Sun
glColor3d(1.0, 1.0, 0.0);
sphere(radius_sun);
// draw the path of the Earth around
// the Sun. Assume distance Earth to Sun = 1
glColor4d( 0.0, 0.0, 1.0, 0.5);
glBegin(GL_LINE_LOOP);
for (double q=0; q<=1; q+=0.01) {
double rad = q * M_PI * 2.0;
glVertex3d(std::cos(rad), 0, std::sin(rad));
}
glEnd();
// the Earth
glColor3d(1.0, 1.0, 1.0);
glPushMatrix();
// Assign a value to t dependant on the
// time already passed.
double t = IncreasingDouble();
double angle = t * M_PI * 2.0;
// Rotate scene angle degres about y-axis:
glRotated (angle, 0, 1, 0);
// And then translate coordinate system
glTranslated(1, 0, 0);
sphere(radius_earth);
// Restore matrix for next call
glPopMatrix();
// Swap Buffers and the more snipped..
}
Я не замечаю своей ошибки, но Земля все дальше и дальше движется по спирали от Солнца , хотя Остальная часть сцены (траектория обращения Солнца и Земли) нарисована правильно.