用OpenGL如何实现ps太阳光效果照效果

导读:由于我们使用的太阳是一个位置性光源,我们也将利用前面课程所学习的动画知识,glutInitWindowSize(WIDTH,HEIGHT);glutCre,本课介绍了OpenGL光照的基本知识,OpenGL把光照分解为光源、材质、光照模式三个部分,可以计算得到最终的光照效果,光源、材质和光照模式都有各自的属性,使用glLight*函数可设置光源的属性,使用glMaterial*函数可设置材质的线响亮。 由于我们使用的太阳是一个位置性光源,在设置它的位置时,需要利用到矩阵变换。因此,在设置光源的位置以前,需要先设置好各种矩阵。利用gluPerspective函数来创建具有透视效果的视图。我们也将利用前面课程所学习的动画知识,让整个画面动起来。
下面给出具体的代码: #include
#define WIDTH 400 #define HEIGHT 400
static GLfloat angle = 0.0f;
void myDisplay(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 创建透视效果视图
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, 1.0f, 1.0f, 20.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 5.0, -10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
// 定义太阳光源,它是一种白色的光源
GLfloat sun_light_position[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_light_ambient[]
= {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_light_diffuse[]
= {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat sun_light_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};
glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT,
sun_light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE,
sun_light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, sun_light_specular);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
// 定义太阳的材质并绘制太阳
GLfloat sun_mat_ambient[]
= {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_diffuse[]
= {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_specular[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_emission[] = {0.5f, 0.0f, 0.0f, 1.0f};
GLfloat sun_mat_shininess
glMaterialfv(GL_FRONT, GL_AMBIENT,
sun_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE,
sun_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR,
sun_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION,
sun_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, sun_mat_shininess);
glutSolidSphere(2.0, 40, 32);
// 定义地球的材质并绘制地球
GLfloat earth_mat_ambient[]
= {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat earth_mat_diffuse[]
= {0.0f, 0.0f, 0.5f, 1.0f};
GLfloat earth_mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};
GLfloat earth_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat earth_mat_shininess
glMaterialfv(GL_FRONT, GL_AMBIENT,
earth_mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE,
earth_mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR,
earth_mat_specular);
glMaterialfv(GL_FRONT, GL_EMISSION,
earth_mat_emission);
glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess);
glRotatef(angle, 0.0f, -1.0f, 0.0f);
glTranslatef(5.0f, 0.0f, 0.0f);
glutSolidSphere(2.0, 40, 32);
glutSwapBuffers(); } void myIdle(void) {
angle += 1.0f;
if( angle >= 360.0f )
angle = 0.0f;
myDisplay(); }
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow(\光照演示\
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0; }
小结: 本课介绍了OpenGL光照的基本知识。OpenGL把光照分解为光源、材质、光照模式三个部分,根据这三个部分的各种信息,以及物体表面的法线向量,可以计算得到最终的光照效果。 光源、材质和光照模式都有各自的属性,尽管属性种类繁多,但这些属性都只用很少的几个函数来设置。使用glLight*函数可设置光源的属性,使用glMaterial*函数可设置材质的属性,使用glLightModel*函数可设置光照模式。 GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR这三种属性是光源和材质所共有的,如果某光源发出的光线照射到某材质的表面,则最终的漫反射强度由两个GL_DIFFUSE属性共同决定,最终的镜面反射强度由两个GL_SPECULAR属性共同决定。 可以使用多个光源来实现各种逼真的效果,然而,光源数量的增加将造成程序运行速度的明显下降。 在使用OpenGL光照过程中,属性的种类和数量都非常繁多,通常,需要很多的经验才可以熟练的设置各种属性,从而形成逼真的光照效果。(各位也看到了,其实这个课程的示例程序中,属性设置也不怎么好)。然而,设置这些属性的艺术性远远超过了技术性,往往是一些美术制作人员设置好各种属性(并保存为文件),然后由程序员编写的程序去执行绘制工作。因此,即使目前无法熟练运用各种属性,也不必过于担心。如果条件允许,可以玩玩类似3DS MAX之类的软件,对理解光照、熟悉各种属性设置会有一些帮助。 在课程的最后,我们给出了一个样例程序,演示了太阳和地球模型中的光照效果。
包含总结汇报、IT计算机、资格考试、党团工作、办公文档、外语学习、教程攻略、考试资料、旅游景点、word文档、教学教材、行业论文、出国留学以及OpenGL入门学习――第七课 使用光照来表现立体感等内容。本文共2页
相关内容搜索没有更多推荐了,
不良信息举报
举报内容:
opengl模拟太阳效果
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!用OpenGL如何实现太阳光照效果?
[问题点数:40分,结帖人zhangda12]
用OpenGL如何实现太阳光照效果?
[问题点数:40分,结帖人zhangda12]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年9月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|实验七 OPENGL光照效果_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
实验七 OPENGL光照效果
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩2页未读,
定制HR最喜欢的简历
你可能喜欢没有更多推荐了,
不良信息举报
举报内容:
openGL的光照与材料(一)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 太阳光效果 的文章

 

随机推荐