2011-10-09 2 views
3

음영 및 조명이있는 구체를 구현하려고하는 OpenGL을 처음 사용합니다. 내가 호출 할 수있는 구 기능이 있지만 내 자신을 만들려고한다는 것을 알고 있습니다. 그러나 장면의 다른 객체 (예 : glcubes 등)에 조명과 음영을 표시 할 수는 있지만 구체에 음영이나 조명을 얻을 수 없습니다. 어떤 제안이라도 대단히 감사하겠습니다! 도GL_QUAD_STRIP의 OpenGL 조명 및 음영

void cg_SolidSphere(GLint slices, GLint stacks) 
{ 
    float x, y, z ; 
    for(float lat = 0 ; lat < PI ; lat = lat + PI/stacks) 
    { 
     glBegin(GL_QUAD_STRIP) ; 
     for(float lon = 0 ; lon < 2*PI ; lon = lon + 2*PI/slices) 
     { 
      x = cosf(lat) * sinf(lon) ; 
      y = sinf(lat) * sinf(lon) ; 
      z = cosf(lon) ; 
      glVertex3f(x, y, z) ; 
      x = cosf(lat + PI/stacks) * sinf(lon) ; 
      y = sinf(lat + PI/stacks) * sinf(lon) ; 
      z = cosf(lon) ; 
      glVertex3f(x, y, z) ; 
     } 
     glEnd() ; 
    } 
} 

답변

4

당신은 glNormal3f 호출이 필요합니다

벨로

는 영역을 그리는 내 기능입니다. 이 경우 법선은 정점과 같기 때문에 동일한 점을 사용할 수 있습니다.

x = cosf(lat) * sinf(lon) ; 
y = sinf(lat) * sinf(lon) ; 
z = cosf(lon) ; 
glNormal3f(x, y, z) ; 
glVertex3f(x, y, z) ; 
x = cosf(lat + PI/stacks) * sinf(lon) ; 
y = sinf(lat + PI/stacks) * sinf(lon) ; 
z = cosf(lon) ; 
glNormal3f(x, y, z) ; 
glVertex3f(x, y, z) ; 
+0

매우 멋지다! 이제 어떻게 덧붙일 수 있을까요? –

+0

@ ElfsЯUs : 아마도 ['glMaterial'] (http://www.opengl.org/sdk/docs/man/xhtml/glMaterial.xml)을 사용했을 것입니다. – icktoofay

+0

위의 알고리즘에 텍스처 좌표를 어떻게 추가 하시겠습니까? – jmishra