3

OpenGL の新機能で、シェーディングとライティングを使用して球体を実装しようとしています。呼び出すことができる球体関数があることは承知していますが、独自のものを作成しようとしています。ただし、シーン内の他のオブジェクト (glcube など) でライティングとシェーディングを取得できますが、球体でシェーディングまたはライティングを取得することはできません。どんな提案でも大歓迎です!

ベローは、球を描画する私の関数です:

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

1 に答える 1

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 ) ;
于 2011-10-09T04:05:00.750 に答える