一.实验目的:

了解掌握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. [系统资源攻略]IO第二篇

    IO 磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴.寻轨等.访问硬盘和访问内存之间的速度差别是以数量级来计算 ...

  2. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺 Scrum meeting 4

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11012922.html 团队名称 奋斗吧!菜鸟 作业学习目标 A ...

  3. 0807再整理SQL执行流程

    转自http://www.cnblogs.com/annsshadow/p/5037667.html MySQL架构总览->查询执行流程->SQL解析顺序   前言: 一直是想知道一条SQ ...

  4. SQL SERVER高级知识积累

    什么叫做高可用服务器? 高可用服务器简单来理解就是不宕机的服务器 什么叫走服务器的自动化灾备? 自动灾备的意思就是,让从服务器自动变成主服务器 sql server的聚合是什么? 事务会引起性能下降, ...

  5. 消息队列Rabbit安装

    先安装elang 再安装Rabbit *Rabbit安装路径不能有空格 安装完成

  6. Linux显示使用命令who(转)

    Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者ID.使用的终端机.从哪边连上来的.上线时间.呆滞时间.CPU使用量.动作等等. 使用权限:所有使用者都可使用. 语法 ...

  7. HDU-4451-Dressing (2012年金华赛区J题)

    Dressing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  8. cefsharp 获取高度

    G.browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("$(document).height()"); // Get Do ...

  9. spring中abstract bean的使用方法

    什么是abstract bean?简单来说.就是在java中的继承时候,所要用到的父类. 案例文件结构: 当中Person类为父类.Student类为子类,其详细类为: package com.tes ...

  10. matlab实现基于DFS的Ford_Fulkerson最大流最小割算法

    function [F, maxf, V, S] = Ford_Fulkerson(C, src, sink) n = size(C, 1); F = zeros(n); maxf = 0; V = ...