浏览量:983

OpenGL雾简介

本文主要对OpenGL中雾的计算原理进行介绍,在参考【1】的第6章、 NEHE教程的第16章和第41章都有示例代码。

一. 雾的计算原理

把片断(fragment)颜色和雾颜色以一定比例混合,就能产生雾的效果。比例因子f,主要有三种计算混合因子的方法,如下面的三个等式所示,其中c指的是眼睛坐标与片段中心之间的距离或者是雾坐标,通过等式计算出个的因子f,需要缩放至[0,1]范围内。

\(f = \frac{{end - c}}{{end - start}}({\rm{GL\_LINEAR)}}\)

\(f = {e^{ - (density \cdot c)}}({\rm{GL\_EXP)}}\)

\(f = {e^{ - (density \cdot c)}}^2({\rm{GL\_EXP2)}}\)

2014-2-5 16-18-37

雾浓度的计算等式

在RGBA模式和颜色索引模式下,都能支持雾的计算,具体可以参考【1】。

二. OpenGL雾相关的API函数

void glFog{f,i}(GLenum  pname,  TYPE  param);
void glFog{f,i}v(GLenum  pname,  const TYPE *  params);
void glFogCoord{d,f}(TYPE  coord);
void glFogCoord{d,f}v(TYPE *  coord);

void glFogCoordPointer(GLenum  type,  GLsizei  stride,  GLvoid *  pointer);

void glFog{f,i}(GLenum  pname,  TYPE  param);

void glFog{f,i}v(GLenum  pname,  const TYPE *  params);

2014-02-05

GL_FOG_COORD_SRC 参数在Opengl 1.4及其后版本中才会支持,即雾坐标在Opengl 1.4及其后版本中才会支持。

void glFogCoord{d,f}(TYPE  coord);

void glFogCoord{d,f}v(TYPE *  coord);

规定了顶点或者当前光栅位置的雾坐标,顶点之间的雾坐标值通过插值计算得出。

void glFogCoordPointer(GLenum  type,  GLsizei  stride,  GLvoid *  pointer);

雾坐标数组,与顶点数组类似的。

三. 参考

【1】OpenGL programming guide, the official guide to learning OpenGL, Version 2.1, sixth edition

【2】http://www.opengl.org/sdk/docs/man2/

spacer

Leave a reply