OpenGL学习笔记(12)基本光照
2010-10-26 21:45
525 查看
比较这两个球
在现实生活中,比如一个表面是白色的球体,假设背景是黑色,然后没有任何灯光的照射那么就如右侧的圆一般,但这在有点不可能.现实中我们看到的都是左侧这样带有光照的球体,所以右侧的形状只能是几何体,无法模拟真实世界的球体.
下面我们来看一下一些基本的概念
首先定一个白色的球体
如下图注意这是一个球体,但背面也是白色的,你看不到.
启用光照功能
依然是glEnable函数,参数是GL_LIGHTING现在的效果
到这一步不行,还要为球体增加光源
创建光源
要使用光源必须先启用光源,使用glEnable函数启用GL_LIGHT0-7的光源,所以一共可以启用8个光源.glLight方法用于创建光源,其可以设置与光相关的一些参数,如下
如设置光源位置
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
现在效果如下
感觉好多了
创建多光源
即设置多个光源,真实世界中往往会有很多的光源.即启用了多个光源GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
GLfloat light1_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
GLfloat light1_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light1_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light1_position[] = { -2.0, 2.0, 1.0, 1.0 };
GLfloat spot_direction[] = { -1.0, -1.0, 0.0 };
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);
glEnable(GL_LIGHT1);
如上启用了GL_LIGHT0和GL_LIGHT1,其两个默认值并不相同
材质(glMaterial)
阳光照到一块木板上和照到一个金属上的反应是不一样的,金属表面则会出现光泽,所以说不同材质的物体,产生光照的效果则会不同,以下是定义了材质以后效果,出现了一些光泽face can be GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK to indicate to which faces of the object the material should be applied
可以定义材质(正反面)以下的一些特性
光照模型(glLightModel)
4个点• The global ambient light intensity
• Whether the viewpoint position is local to the scene or should be considered to be an infinite distance away
• Whether lighting calculations should be performed differently for both the front and back faces of objects
• Whether the specular color should be separated from ambient and diffuse colors and applied after the texturing operation
只能先基本有个概念了,先看得懂api在干嘛
相关文章推荐
- OpenGL学习笔记(12)基本光照
- Bootstrap基本组件学习笔记之分页(12)
- PHP学习笔记第【12】天(2014.11.12)——PHP基本语法
- OPENGL学习笔记——光照
- LearnOpenGL学习笔记8:光照基础
- 【OpenGL】学习笔记之一 绘制基本图形单元的方法
- OSG学习笔记12-期末大作业(包含交互、纹理、光照)
- 现代OpenGL+Qt学习笔记之六:绘制可旋转、带光照效果的三维物体
- OpenGL学习笔记1:环境配置和基本流程
- OpenGL学习笔记(四):了解OpenGL、OpenGL的操作模式、特性和基本使用步骤
- OpenGL学习笔记:动画基本概念
- 【OpenGL学习代码笔记之一】 基本形状绘制及动画初窥
- 【转】opengl学习笔记之光照、材质
- Django框架学习笔记(12.基本知识小总结)
- OpenGL_Qt学习笔记之_06(纹理滤波、光照和色彩融合)
- opengl学习笔记2-1-基本的运行框架
- openGL之光照2(材料、颜色追踪、光源)---openGL学习笔记(十)
- OpenGL_Qt学习笔记之_06(纹理滤波、光照和色彩融合)
- LearnOpenGL学习笔记8:光照基础
- 学习笔记——基本光照模型简单实现