opengl之blend and ...

来源:互联网 发布:千牛和淘宝助理哪个好 编辑:程序博客网 时间:2024/05/14 08:32

1.蒙板

蒙板就好像隔着雕花墙往里面看的效果一样
具体步骤:

1)雕花墙是一个纹理,墙体为彩色,镂空地方为黑色,预先给它生成一个一样的黑白纹理,使镂空的地方为白色,墙体为黑色
2)画墙内的景色
3 )glBlendFunc(GL_DST_COLOR,GL_ZERO);画黑白纹理
其中GL_DST_COLOR 对应的混合因子为(Rd, Gd, Bd, Ad),也就是帧缓存中原像素的颜色。把黑白纹理与GL_DST_COLOR 相乘。墙体为黑色,则结果为黑色,镂空为白色,则结果为原像素中颜色。
4) glBlendFunc(GL_ONE, GL_ONE); 画雕花墙的纹理
画雕花墙镂空的地方为黑色,则使用原想色颜色,上步渲染中,镂空地方为原墙内景色。墙体部分 = 现颜色 + 第3步后的颜色。第3步墙体为黑色,即值为0,则墙体部分 = 现颜色 + 0 = 现颜色 

凹凸贴图:采用纹理映射的方法,模拟凹凸不平的表面。
具体步骤:

1)原图像生成黑白图,黑白图生成黑白相反的逆转图。
2 )贴黑白图
3 )偏移逆转图,计算纹理偏移量时,主要用到切空间的概念
   a 由灯的位置减去当前顶点的位置,结果归一化得向量v,
   b 把向量v投影到切空间
   c 按向量v在切空间的投影偏移纹理坐标
4) glBlendFunc(GL_ONE,GL_ONE)贴逆转图
5) glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR)贴原图


2. glNormal3f
该函数指向前面的法线,指定向光的方向,比如绘制箱子 如果进入箱子里面 那么将是一片漆黑 在外面则是明亮的。

 

3.glListBase
base
An integer offset that will be added to glCallLists offsets to generate display list names.
if base equals -32 , then when we use glCallLists to printf string "0" , change character '0' to ascii  '0'=46.
now we find 46-32=14 int t

 

4.glutIdleFunc(void(*func)(void));

   this function will be called when program has free time.

 

5.glutDisplayFunc(void(*func)(void));

   the function will be called when the window is redrawed. like funciton OnDraw() in MFC.

原创粉丝点击