Как мне вращать Землю вокруг Солнца с помощью OpenGL? - PullRequest
0 голосов
/ 06 февраля 2011

Прошу прощения за мой вопрос

Я заметил свою ошибку, и она глупая. Все работает нормально Так как же я могу удалить вопрос?


Я не могу заставить Землю вращаться вокруг Солнца с 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..
}

Я не замечаю своей ошибки, но Земля все дальше и дальше движется по спирали от Солнца , хотя Остальная часть сцены (траектория обращения Солнца и Земли) нарисована правильно.

1 Ответ

1 голос
/ 06 февраля 2011

Проблема должна быть в другом месте, может быть, в вашем сферу () метод.Я следую тем же шагам, что и вы, но мой работает.Вот что у меня есть, и оно работает так, как вы хотите (одна сфера плавно вращается вокруг другой) (Также обратите внимание, что мои gluLookAt и glFrustum разные, но это не должно иметь значения. Я просто делаю это таким образом, чтобы я мог использоватьмоя мышь, чтобы изменить мою точку просмотра):

// draw the scene
void myGlutDisplay( void )
{
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    // projection transform
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1, 1, -1, 1, 1, 1000);

    // camera transform
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(eye[0], eye[1], eye[2], lookat[0], lookat[1], lookat[2], 0, 1, 0);


    //
    // draw some stuff
    //

    // Draw yellow Sun
    glColor3d(1.0, 1.0, 0.0);
    glutSolidSphere(1, 128, 128);

    glPushMatrix();
    double angle = (t+=.1) * 3.14156 * 2.0;
    glRotated(angle, 0, 1, 0);
    glTranslated(5, 0, 0);
    glutSolidSphere(1,128,128);
    glPopMatrix();

    glutSwapBuffers(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...