2012-02-07 3 views
0

교과 과정을 위해 우리는 태양계의 작업 모델을 구축해야합니다. 저는 행성 (구체)으로 구현 했습니다만, 행성의 축을 위와 아래의 선으로 그려야합니다.OpenGL 그리기 "축"

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

나는 여기에 중요한 뭔가를 놓치고 있습니까?

이 구체에서 축을 그리는 데 가장 적합한 "해결 방법"은 무엇입니까?

+5

"행성의 반경은 139000000+입니다."왜? 행성의 반경이 1.39 인 이유는 무엇입니까? Scale is OpenGL은 당신이 원하는 * 것입니다. 미터, 센티미터, 피트, 마일, 킬로미터 등이 아닙니다. 그것은 당신이 원하는 것입니다. 그러니 가늠자를 골라 내 것이 가장 쉽습니다. –

+0

간단하다고는 생각하지 않았습니다. 데이터 파일을 KM –

+0

Pez에 보관하면 쉽게 처리 할 수 ​​있습니다. Nicol은 스케일이 문제의 원인이라고 말합니다. 자기가 말했듯이, 선은 말하자면 실제로 '너비'가 없지만, 이는 한 번의 카메라 촬영에 수십만 킬로미터를 맞추려고 할 때 무언가 작은 것을 렌더링한다는 것을 의미합니다. 무한히 얇은 선이 표시되지 않는 것은 놀라운 일이 아닙니다.) –

답변

2
glScalef(SCALE,SCALE,SCALE); //why already scaled? 

... 

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

이것은 의미가 없습니다. 왜 균일 한 눈금을 적용할까요? 단지 눈금을 눈금으로 나누면 눈금이 취소됩니다. 규모가 전혀없고 단지 bodies[n].radius을 사용하는 것이 더 합리적이지 않습니까?

이것은 문제의 원인입니다. 자, 구체를 그릴 때 불필요한 스케일을 취소하지만, 축을 그릴 때을 실행 취소하지 마십시오. 불필요한 스케일을 제거하면 더 좋은 기회가 생깁니다.

+0

왜 축이 확실하게 존재하지 않는지 설명하지 못합니까? 그 라인이 스케일에 의해 영향을받지 않을 것임을 깨닫기 전에 스케일을 잡으려고했습니다. (단지 2 포인트이기 때문에) –

+0

이것을 제거해도 문제는 해결되지 않습니다. –

+0

@PezCuckow : 그렇습니다. 차. 여러분은 여러분의 축에 대해 카운터 스케일을하지 않았기 때문에, 구의 표면에 위치하지 않을 것입니다. 단위 반경이있는 glScale 만 사용하거나 glScale을 사용하지 않고 기하학 데이터에 축척을 적용하십시오. – datenwolf