GL_QUAD_STRIP上的OpenGL照明和着色

时间:2011-10-09 03:57:12

标签: opengl geometry light

OpenGL的新手,尝试使用着色和光照实现球体。我知道有一个我可以调用的球体功能,但试图创建我自己的。然而,虽然我可以在场景中的其他对象(例如glcubes等)上获得光照和阴影,但我无法在球体上获得任何阴影或光照。任何建议将不胜感激!

贝娄是我绘制球体的功能:

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 个答案:

答案 0 :(得分: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 ) ;
相关问题