Рисунок OpenGL "ось" - PullRequest
       1

Рисунок OpenGL "ось"

0 голосов
/ 08 февраля 2012

Для части курсовой работы мы должны построить работающую модель солнечной системы. Мой план реализован с помощью планет (сфер), но мы также должны нарисовать ось планеты в виде линии выше и ниже.

Я считаю, что использование GL_LINES, похоже, не работает, предположительно из-за масштаба этого проекта (радиус планет составляет 139000000+).

Упрощенный пример:

void drawAxis(int n)
{
  /* Draws the axis for body "n" */
  glColor3f(1.0,0.0,0.0);
  glBegin(GL_LINES);
    glVertex3f(0, bodies[n].radius, 0);
    glVertex3f(0, bodies[n].radius*2, 0);
  glEnd();

  glColor3f(0.0,1.0,0.0);
  glBegin(GL_LINES);
    glVertex3f(0, -bodies[n].radius, 0);
    glVertex3f(0, -bodies[n].radius*2, 0);
  glEnd();
}

void drawBody(int n)
{

  if(n==0) {
    /* Draws body "n" */
    //glRotatef(bodies[n].axis_tilt, 1.0, 0.0, 0.0);

    //Scale and position
    glTranslatef(0.0, 0.0, 0.0);
    glScalef(SCALE,SCALE,SCALE); //why already scaled? 

    //Axis
    drawAxis(n);   

    //r g b - colour (red, green, blue)
    glColor3f(bodies[n].r,bodies[n].g,bodies[n].b);

    //radius - size of body (km)
    glutSolidSphere (bodies[n].radius/SCALE, 50, 50);   
  }
}

Ничьи:

SolarSystem

Я что-то упустил здесь?

Как лучше всего "обойти" рисование оси на этой сфере?

1 Ответ

2 голосов
/ 08 февраля 2012
glScalef(SCALE,SCALE,SCALE); //why already scaled? 

...

glutSolidSphere (bodies[n].radius/SCALE, 50, 50);   

Это не имеет смысла. Почему вы применяете единую шкалу только для того, чтобы затем делить шкалу вашей сферы на нее, тем самым уничтожая шкалу? Разве не имеет смысла вообще не иметь шкалы и просто использовать bodies[n].radius?

Это источник вашей проблемы. Видите ли, вы отменяете ненужный масштаб, когда рисуете свою сферу, но вы не отменяете ее, когда рисуете свои оси. Если вы уберете ненужные весы, есть больше шансов, что они сработают.

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