GL_QUAD_STRIP 上的 OpenGL 照明和着色

标签 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() ;
    }
}

最佳答案

您也需要 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 ) ;

关于GL_QUAD_STRIP 上的 OpenGL 照明和着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701377/

相关文章:

c++ - 在glsl中初始化全局变量?

opengl - 将 OpenGL 4 矩阵转换为 VRML T*R*S

c++ - Spritebatch 只绘制第一个 Sprite

c++ - 点光源随相机移动

android - 如何检索 cameraID 并使用 setTorchMode?

unity3d - 二维照明定向阴影?

c - 过剩/OpenGL : how to bind array of coordinates to mesh object to traslate/rotate them

javascript - 重叠的矩形 JavaScript

2个方向均匀排列步数的算法

java - 反弦、余弦和正切代码