opengl 第五课(颜色混合)

概念

正面剔除
解决:视觉效果应该不可见的像素值,显示出来的问题
原理:Opengl默认
正面三角形顶点为逆时针
背面三角形顶点为顺时针
三角形的正面、背面是,相对于观察者视角而言的。

深度缓存区
缓存屏幕上每个像素点( Z值)

深度测试
对比深度缓存区,显示离用户最近的像素
glEnable(GL_DEPTH_TEST)
Polygon Offset(多边形偏移) 解决 z-flighting(无法区分的层级)

组合颜色
目标颜色:颜色缓存区里的,要被替换的
源颜色:渲染结果的颜色,要进入缓存区
cf=(css)+(cdd)
cs:源颜色
cd:目标颜色
s:源混合因子
d:目标混合因子

相关代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 用固定管线,单元着色器,画4个矩形
for 4
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vColor);
batch1.Draw();
end

// 开启混合
glEnable(GL_BLEND)
// 开启组合函数 计算混合颜色因子
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// 在画需要 颜色混合的矩形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
squareBatch.Draw();

// 关闭混合
glDisable(GL_BLEND);

//
glutSwapBuffers();