OpenGL освещение и затенение по GL_QUAD_STRIP - PullRequest
3 голосов
/ 09 октября 2011

Новичок в 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() ;
    }
}

1 Ответ

4 голосов
/ 09 октября 2011

Вам также нужно 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 ) ;
...