OpenGL绘制给定半径经线纬线圆球,并设置光照材质

这个示例展示了使用OpenGL创建一个简单的3D场景,其中包括一个太阳光源和一个球体。通过设置光源位置、材质属性和环境光,实现了球体的光照效果。代码中应用了颜色管理、平滑着色和深度测试,呈现了一个带光照的3D图形。
摘要由CSDN通过智能技术生成
#include <gl/glut.h>
#define WIDTH 400
#define HEIGHT 400
static GLfloat angle = 0.0f;
void myDisplay(void)
{
        glClearColor(0,1,1,0);//背景颜色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // 定义太阳光源,它是一种白色的光源
    {
        //光源light0
        GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
        GLfloat mat_shininess[]={128.0};
 
        GLfloat light_position[]={0.6,0.6,-0.6,0.0};//表示光源为点坐标x,y,z >0表示左上里
        GLfloat white_light[]={1.0,1.0,1.0,1.0};   //光源的颜色
        GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱环境光,使物体可见
        glClearColor(0.0,0.0,0.0,1.0);
        glShadeModel(GL_SMOOTH);//GL_SMOOTH
 
        //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
        glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//指定当前材质属性镜面反射颜色
        glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
 
        glLightfv(GL_LIGHT0,GL_POSITION,light_position);//光源编号,光源特性,参数数据
        glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);  
        glLightfv(GL_LIGHT0,GL_SPECULAR,white_light); 
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient); //指定全局的环境光,物体才能可见
 
        glEnable(GL_LIGHTING);  
        glEnable(GL_LIGHT0); 
        glEnable(GL_DEPTH_TEST);  
    }
        glutSolidSphere(0.8,300,16);//半径,南北经线,纬线
    glutSwapBuffers();//双缓冲用
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowPosition(200, 200);
    glutInitWindowSize(WIDTH, HEIGHT);
    glutCreateWindow("OpenGL光照演示");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值