一.实验目的:

了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。

二.实验内容:

(1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试验不同的光照与材质系数;

(2)运行示范代码1,了解光照与材质函数使用。

三.实验原理:

为在场景中增加光照,需要执行以下步骤:

(1) 设置一个或多个光源,设定它的有关属性;

(2) 选择一种光照模型;

(3) 设置物体的材料属性。

具体见教材第8章8.6节用OpenGL生成真实感图形的相关内容。

四.示范代码:

 #include <GL/glut.h>

 #include <stdlib.h>

 // Initialize material property, light source, lighting model, and depth buffer.

 void init(void)

 {

 GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };

 GLfloat mat_shininess[] = { 50.0 };

 GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

 GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 };

 GLfloat Light_Model_Ambient[] = { 0.2 , 0.2 , 0.2 , 1.0 }; //

 glClearColor (0.0, 0.0, 0.0, 0.0);

 glShadeModel (GL_SMOOTH);

 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 , Light_Model_Ambient ); //

 glEnable(GL_LIGHTING);

 glEnable(GL_LIGHT0);

 glEnable(GL_DEPTH_TEST);

 }

 void display(void)

 {

 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 //glutSolidSphere (1.0, 20, 16);

 glutSolidTeapot(0.5);

 glFlush ();

 }

 void reshape (int w, int h)

 {

 glViewport (, , (GLsizei) w, (GLsizei) h);

 glMatrixMode (GL_PROJECTION);

 glLoadIdentity();

 if (w <= h)

 glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,

 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);

 else

 glOrtho (-1.5*(GLfloat)w/(GLfloat)h,

 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);

 glMatrixMode(GL_MODELVIEW);

 glLoadIdentity();

 }

 int main(int argc, char** argv)

 {

 glutInit(&argc, argv);

 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

 glutInitWindowSize (, );

 glutInitWindowPosition (, );

 glutCreateWindow (argv[]);

 init ();

 glutDisplayFunc(display);

 glutReshapeFunc(reshape);

 glutMainLoop();

 return ;

 }

附VC++工程代码(VC++2008)

5. 实验提高

在实验5太阳系模型的基础上,尝试为其增加光照与材质效果,如图A.5(b)所示。

(a)太阳系模型     (b)增加光照后的效果

实验7 OpenGL光照的更多相关文章

  1. OpenGL光照3:光源

    本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...

  2. OpenGL光照和颜色

    OpenGL光照和颜色 转自:http://www.cnblogs.com/kekec/archive/2011/08/16/2140789.html OpenGL场景中模型颜色的产生,大致为如下的流 ...

  3. OpenGL光照测试

    OpenGL光照测试 花了大概半个月,研究了OpenGL的光照.请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过.这个程序是通过光照对模型的照射,来研究OpenGL光照的性质.以后可以通过这个 ...

  4. 浅析OpenGL光照

    浅析OpenGL光照 之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有 ...

  5. 实验1 OpenGL初识

    实验预备知识 Windows下的OpenGL编程步骤简单介绍详见课程实验教学博客-实验准备安装GLUT包与创建工程: http://www.cnblogs.com/opengl/archive/201 ...

  6. OpenGL光照2:材质和光照贴图

    本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...

  7. OpenGL光照1:颜色和基础光照

    本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...

  8. 【狼】openGL 光照的学习

    小狼学习原创,欢迎批评指正 http://www.cnblogs.com/zhanlang96/p/3859439.html 先上代码 #include "stdafx.h" #i ...

  9. OpenGL光照设置

    一.设置光源 (1)光源的种类 环境光 环境光是一种无处不在的光.环境光源放出的光线被认为来自任何方向.因此,当你仅为场景指定环境光时,所有的物体无论法向量如何,都将表现为同样的明暗程度. 点光源 由 ...

随机推荐

  1. 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】

    由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此 ...

  2. 爬虫系列(八) 用requests实现天气查询

    这篇文章我们将使用 requests 调用天气查询接口,实现一个天气查询的小模块,下面先贴上最终的效果图 1.接口分析 虽然现在网络上有很多免费的天气查询接口,但是有很多网站都是需要注册登陆的,过程比 ...

  3. Java设计模式之 — 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9400141 今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务 ...

  4. vue+ElementUI 分页

    现在写的Vue+ElementUI是自己写的是文档上的死数据,所以在分页上自己分割了一下,如果有接口话,会方便一点,使用的是分页的完整功能.都差不多啦! 撸起来 <template> &l ...

  5. lucene_04_解析语法查询

    解析语法查询就是调用方法查询的原始查询 例如: 查询所有的查询器的语法为:*:*,因为lucene查询是根据term来做的,既是:key:value类型.*:*表示所有域中的所有值. api调用语法解 ...

  6. (15)Spring Boot使用Druid和监控配置【从零开始学Spring Boot】

    Spring Boot 系列博客] 更多查看博客:http://412887952-qq-com.iteye.com/blog Spring Boot默认的数据源是:org.apache.tomcat ...

  7. ReentrantLock(排他锁)

    在多线程操作时.保证一块共享资源的原子性.第一想到的就是用synchronized关键字 在jdk5提供一个更灵活更强大的 ReentrantLock 使用reentrantLock.lock();获 ...

  8. ExtJs之Ext.comboBox的远程数据源读取程序

    既然可以测试本地AJAX,那就把书前面的代码作一次学习吧. <!DOCTYPE html> <html> <head> <title>ExtJs< ...

  9. VS-诊断工具和智能跟踪

    MSDN文章

  10. 优酷土豆资深工程师:MySQL高可用之MaxScale与MHA

    本文根据DBAplus社群第67期线上分享整理而成 本次分享主要包括以下内容: 1.MySQL高可用方案 2.为什么选择MHA 3.读写分离方案的寻找以及为什么选择Maxscale 一.MySQL  ...