OpenGL学习笔记(三):颜色与光照
2013-06-13 14:06
253 查看
作者:yurunsun@gmail.com
新浪微博@孙雨润 新浪博客
CSDN博客
日期: 2013-6-13
本章内容:
RGBA颜色模式
指定物体绘图颜色
平滑着色模式
定义光源、材料、光照模型属性
控制光源位置
颜色混合
抗锯齿
硬件为R G B A成分保留一定数量的位平面。如果RGB的位数少而无法表达需要的颜色,可以使用抖动(
RGBA下指定颜色
指定着色模型
用多种颜色绘制直线或填充多边形时可以使用
FLAT模式先整个图元的颜色就是它任何一个顶点的颜色,SMOOTH模式下每个顶点单独处理,使用Gouraud算法均匀插值。
散射光(diffuse):来自某个方向,如果从正面照射表面会看起来显得更亮一些。当撞击表面时会均匀向所有方向发散
镜面光(specular):来自特定方向,并倾向于从表面向某个特定的方向反射
发射光(emissive):模拟源自某个物体的光。表面的发射颜色可以增加物体强度,但是不受任何光源影响,也不作为额外光照
使用
混合因子:
混合结果:
使用下面函数来设置因子
hint的取值为:
target取值为:
点参数能够根据点和观察点的距离,对点的大小和亮度进行衰减:
如果这篇文章对您有帮助,请到CSDN博客留言;
转载请注明:来自雨润的技术博客 http://blog.csdn.net/sunyurun
新浪微博@孙雨润 新浪博客
CSDN博客
日期: 2013-6-13
本章内容:
RGBA颜色模式
指定物体绘图颜色
平滑着色模式
定义光源、材料、光照模型属性
控制光源位置
颜色混合
抗锯齿
1. 颜色
RGBA颜色模式硬件为R G B A成分保留一定数量的位平面。如果RGB的位数少而无法表达需要的颜色,可以使用抖动(
GL_DITHER)实现:即使用两种颜色交替对一个像素着色。这一选项默认是打开的。
RGBA下指定颜色
void glColor4f(float r, float g, float b, float a);
指定着色模型
用多种颜色绘制直线或填充多边形时可以使用
glShadeModel()来指定着色模型。参数可以是
GL_SMOOTH或
GL_FLAT。
FLAT模式先整个图元的颜色就是它任何一个顶点的颜色,SMOOTH模式下每个顶点单独处理,使用Gouraud算法均匀插值。
2. 光照
2.1 隐藏面消除
GL_FILL填充的实心物体应该遮挡后面的物体,因此需要开启
GL_DEPTH_TEST使得OpenGL能够进行深度测试。
2.2 四种光
环境光(ambient):在环境中进行了充分的散射,无法分辨方向的光散射光(diffuse):来自某个方向,如果从正面照射表面会看起来显得更亮一些。当撞击表面时会均匀向所有方向发散
镜面光(specular):来自特定方向,并倾向于从表面向某个特定的方向反射
发射光(emissive):模拟源自某个物体的光。表面的发射颜色可以增加物体强度,但是不受任何光源影响,也不作为额外光照
2.3 材料颜色
材料也有上述123的属性,但是是表示对rgb分量的反射比例。最终效果是分量与光照值相乘的结果。float green[] = {0.0f, 1.0f, 0.0f, 1.0f}; glMaterial4f(GL_FRONT, GL_AMBIENT, green);
2.4 为顶点定义法线
物体的法线决定了相对光源的方向,OpenGL根据法线计算这个顶点从每个光源接收的光线数量。表面法线必须是单位长度,还必须保证对物体进行的模视变换没有对法线进行缩放、最终法线仍然保持单位长度。参见:GL_NORMALIZE GL_RESCALE_NORMALE
2.5 创建光源
OpenGL至少支持8个光源:GL_LIGHT0, ... GL_LIGHT7
使用
glLight来设置位置、方向、四种光的颜色、聚光灯、消减等光源参数:
GL_AMBIENT (0.0, 0.0, 0.0, 1.0) GL_DIFFUSE (1.0, 1.0, 1.0, 1.0) GL_SPECULAR (1.0, 1.0, 1.0, 1.0) GL_POSITION (0.0, 0.0, 1.0, 0.0) GL_SPOT_DIRECTION (0.0, 0.0,1.0) GL_SPOT_EXPONENT 0.0 GL_SPOT_CUTOFF 180.0 GL_CONSTANT_ATTENUATION 1.0 GL_LINEAR_ATTENUATION 0.0 GL_QUADRATIC_ATTENUATION 0.0
2.6 光照模型
void glLightModelf(GLenum pname, TYPE param); GL_LIGHT_MODEL_AMBIENT (0.2, 0.2, 0.2, 1.0) // 整个场景的环境光RGBA GL_LIGHT_MODEL_LOCAL_VIEWER 0.0 or GL_FALSE // 局部观察点还是无限远处观察点 GL_LIGHT_MODEL_TWO_SIDE 0.0 or GL_FALSE // 单面光照还是双面光照 GL_LIGHT_MODEL_COLOR_CONTROL GL_SINGLE_COLOR // 镜面颜色计算是否从环境和散射颜色中分离
3. alpha值混合
glEnable(GL_BLEND);
3.1 src因子与dst因子
首先需要指定如何计算src和dst混合因子,这两个因子都是RGBA四元组,分别与src颜色和dst颜色的RGBA相乘;然后src与dst的对应成分再进行组合。例如混合因子:
(Sr, Sg, Sb, Sa) 与 (Dr, Dg, Db,Da)
混合结果:
(RsSr+RdDr, GsSg+GdDg, BsSb+BdDb, AsSa+AdDa)
使用下面函数来设置因子
void glBlendFunc(GLenum srcfactor, GLenum destfactor);
3.2 混合算术组合方式
void glBlendEquation(GLenummode); GL_FUNC_ADD CsS + CdD GL_FUNC_SUBTRACT CsS - CdD GL_FUNC_REVERSE_SUBTRACT CdD - CsS GL_MIN min(CsS, CdD) GL_MAX max(CsS, CdD) GL_LOGIC_OP CS op CD
4. 抗锯齿
void glHint(GLenum target, GLenum hint);
hint的取值为:
GL_FASTEST GL_NICEST GL_DONT_CARE
target取值为:
GL_POINT_SMOOTH_HINT, GL_LINE_SMOOTH_HINT, GL_POLYGON_SMOOTH_HINT //点线多边形 GL_FOG_HINT // 雾计算 GL_PERSPECTIVE_CORRECTION_HINT // 颜色和纹理坐标插值质量 GL_GENERATE_MIPMAP_HINT GL_TEXTURE_COMPRESSION_HINT GL_FRAGMENT_SHADER_DERIVATIVE_HINT
5. 雾
雾是通用的术语,描述类似大气的效果,用于模拟模糊、薄雾、烟、污染等。glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_EXP); glFogfv(GL_FOG_COLOR, fogColorArr); glFogf(GL_FOG_DENSITY, o.35); glFogf(GL_FOG_START, 1.0); glFogf(GL_FOG_END, 5.0);
6. 点参数
有时候可能需要渲染球体,但又不想使用效率较低的多边形近似模拟,例如对飞行模拟器中的路灯建模,或者雨滴。这些都可以渲染成点图元,并对点进行修改使其具有适当的大小和亮度。可以使用glPointSize()和glEnable(GLPOINTSMOOTH)
创建较大的圆点,并使用雾来提示距离。但glPointSize()
不能出现在glBegin()/glEnd()`之间,因此难以改变点的大小。
点参数能够根据点和观察点的距离,对点的大小和亮度进行衰减:
void glPointParameterf(GLenumpname, GLfloat param); void glPointParameterfv(GLenumpname, const float* param); GL_POINT_DISTANCE_ATTENUATION // 衰减系数 GL_POINT_SIZE_MIN or GL_POINT_SIZE_MAX // 点大小的绝对限制 GL_POINT_FADE_THRESHOLD_SIZE // GL_POINT_SPRITE_COORD_ORIGIN // 迭代纹理的起始点
如果这篇文章对您有帮助,请到CSDN博客留言;
转载请注明:来自雨润的技术博客 http://blog.csdn.net/sunyurun
相关文章推荐
- openGL之光照2(材料、颜色追踪、光源)---openGL学习笔记(十)
- opengl学习笔记之光照、材质(转载)
- OpenGL学习笔记:颜色
- OpenGL学习笔记(三)---FreeImage颜色显示错乱的解决方法
- LearnOpenGL学习笔记8:光照基础
- openGL之正交投影、颜色立方体---openGL学习笔记(八)
- OpenGL学习笔记:光照
- OpenGL光照 学习笔记(转)
- 计算机图形学 学习笔记(十二):颜色模型,简单 / 增量 光照模型
- OpenGL学习笔记 (7) —— 三种不同的纹理滤波方式,光照和键盘控制
- openGL学习笔记2(颜色)
- 《OpenGL游戏程序设计》学习笔记---第六章添加颜色、混合与光照
- OSG学习笔记20——光照和材质的设置(正确绘制出想要的颜色)
- 《OpenGL游戏程序设计》学习笔记---第六章添加颜色、混合与光照
- openGL学习笔记四 : 关于颜色, 大小, 虚线, 多边形反转, 镂空, 使用位图
- 现代OpenGL+Qt学习笔记之六:绘制可旋转、带光照效果的三维物体
- 【转】opengl学习笔记之光照、材质
- OpenGL学习笔记——颜色
- OpenGL_Qt学习笔记之_06(纹理滤波、光照和色彩融合)
- OpenGL_Qt学习笔记之_06(纹理滤波、光照和色彩融合)