一.实验目的:

了解掌握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. EasyUI Messager 消息框点击右上角x无法执行回掉函数解决

    我先声明下,我是改动源码,网上的其他方法我试过了,不行.我是写java后台的,前端也是小白,可能讲的也也不是很清楚. 首先我想到的是在网上找到解决方法,我找到一个方法说在jquery.easyui.m ...

  2. ZOJ - 3483 - Gaussian Prime

    先上题目: Gaussian Prime Time Limit: 3 Seconds      Memory Limit: 65536 KB In number theory, a Gaussian ...

  3. iOS_25_彩票设置的cell的数据源模型的封装

    组模型的封装 SettingGroup // // SettingGroup.h // 25_彩票 // // Created by beyond on 14-8-28. // Copyright ( ...

  4. POJ 2607

    一次FLOYD,再枚举. 注意题目要求的输出是什么哦. #include <iostream> #include <cstdio> #include <cstring&g ...

  5. 实现icon和文字垂直居中的两种方法-(vertical-align and line-height)

    方法一:vertical-align 在w3school定义:该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐 百思不得骑姐 然后Google,反正在w3schools上面并没有找到定义 仅 ...

  6. Android中加入水平线和垂直线

    1.加入水平线 <View android:layout_height="0.5dip" android:background="#686868" and ...

  7. Java IO之简单输入输出

    Java中的IO分为两个部分,以InputStream和Reader为基类的输入类,以OutputStream和Writer为基类的输出类. 当中InputStream和OutputStream以字节 ...

  8. 如何构建一个轻量级级的DI(依赖注入)

    概念:依赖注入与IOC模式类似工厂模式,是一种解决调用者和被调用者依赖耦合关系的模式:它解决了对象之间的依赖关系,使得对象只依赖IOC/DI容器,不再直接相互依赖,实现松耦合,然后在对象创建时,由IO ...

  9. notifyDataSetChanged()刷新ListView(使用JSONArray绑定的Adapter)

    1.fragment代码: package com.ts.fragment; import java.util.ArrayList; import java.util.HashMap; import ...

  10. poj1028--动态规划--Ignatius and the Princess III

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...