OpenGL混合
来源:互联网 发布:打印机输入 端口是什么 编辑:程序博客网 时间:2024/05/07 17:05
前面我们讲深度测试的时候说过,深度值大的会把深度值小的覆盖住
如下图 我们发现重叠的部分绿色把蓝色盖住了
(图1)
如果我们想实现下面的效果怎么办呢?
(图二)
我们可以用 混合 来实现这种方式
因为前面讲了很多Opgl绘制基本图元的方法,所有绘制两个矩形的代码我就不贴出来了,还是包括函数
int main(int argc, char* argv[])
void ChangeSize(int w, int h)
void SetupRC()
void RenderScene(void)
唯一的变化是RenderScene函数
下面我们来看一下RenderScene函数
我们先绘制两个矩形,也就是图一的代码
void RenderScene(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//绘制蓝色的矩形GLfloat vBlue[] = { 0.0f, 0.0f, 1.0f, 1.0f };shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlue);greenBatch.Draw();//绘制绿色的矩形GLfloat vGreen[] = { 0.0f, 1.0f, 0.0f, 1.0f };shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vGreen);blueBatch.Draw();glutSwapBuffers();}
代码
glEnable(GL_BLEND);标示开启 混合 功能
函数
glBlendFunc (GLenum sfactor, GLenum dfactor);标示何值混合的模式
来看个具体的使用
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);标示以源颜色的alpha进行混合,混合方式是GL_ONE_MINUS_SRC_ALPHA
其中GL_ONE_MINUS_SRC_ALPHA 标示 的公式如下
Cf=(Cs * S)+(Cd*D)
其中 Cf标示最终的颜色,Cs标示源颜色,也就是后来绘制的颜色,我们这里是绿色(就是那个绿色矩形的颜色),S标示源颜色的alpha值,Cd标示目标颜色,就是现在屏幕上的颜色,D = (1-S)
图二的代码如下
void RenderScene(void){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//绘制蓝色的矩形GLfloat vBlue[] = { 0.0f, 0.0f, 1.0f, 1.0f };shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlue);greenBatch.Draw();//绘制绿色的矩形GLfloat vGreen[] = { 0.0f, 1.0f, 0.0f, 0.8f };glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vGreen);blueBatch.Draw();glDisable(GL_BLEND);glutSwapBuffers();}
0 0
- OpenGL:混合
- OpenGL混合
- OPENGL混合
- OpenGL混合
- OpenGL: 混合
- OPENGL混合
- OpenGL--混合
- OpenGL混合
- OpenGL-混合
- OpenGL中的混合 (blend)
- OpenGL中的混合(Blending)
- OpenGL Alpha混合
- OpenGl 三维混合
- OpenGL学习笔记:混合
- opengl es 混合
- OPENGL混合 (经典)
- openGL混合渐变着色
- [OpenGL]混合 Blend
- hdu2191(多重背包)
- AngularJS第一篇 ------------- 我的第一个demo
- Insert Interval
- 快速排序的讲解指引
- requests模块post/get基本用法
- OpenGL混合
- Java之旅hibernate(3)——第一个hibernate的例子
- MVC, MVP, MVVM比较以及区别(上)
- 关于使用VBA调用AutoCAD的学习
- codeforces 294C C. Shaass and Lights(组合数学)
- opencv学习(九)(opencv3.0.0+VS2012+win7)一个运动检测的例子
- maven介绍
- Java的自动装箱,拆箱
- ChemSketch 2015官网下载地址