美文网首页
混合、面剔除

混合、面剔除

作者: 龙遁流 | 来源:发表于2017-01-15 19:26 被阅读0次

混合

在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明是物体(或物体的一部分)非纯色而是混合色,这种颜色来自于不同浓度的自身颜色和它后面的物体颜色。

一个物体的透明度,被定义为它的颜色的alpha值。

开启混合:glEnable(GL_BLEND);

OpenGL以下面的方程进行混合:

混合方式

片段着色器运行完成并且所有的测试都通过以后,混合方程才能自由执行片段的颜色输出,当前它在颜色缓冲中(前面片段的颜色在当前片段之前储存)。源和目标颜色会自动被OpenGL设置,而源和目标因子可以让我们自由设置。

混合函数

void glBlendFunc(GLenum sfactor, GLenum dfactor)

设置源(source)和目标(destination)因子。

常用可选参数

颜色常数向量Cconstant可以用glBlendColor函数分开来设置。

也可以为RGB和alpha通道各自设置不同的选项,使用glBlendFuncSeperate:

glBlendFuncSeperate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,GL_ONE, GL_ZERO);

void glBlendEquation(GLenum mode)允许我们设置不同的操作,有3种可行的选项:

改变混合公式

要让混合在多物体上有效,我们必须先绘制最远的物体,最后绘制最近的物体。普通的无混合物体仍然可以使用深度缓冲正常绘制,所以不必给它们排序。我们一定要保证它们在透明物体前绘制好。当无透明度物体和透明物体一起绘制的时候,通常要遵循以下原则:

先绘制所有不透明物体。 为所有透明物体排序。 按顺序绘制透明物体。

面剔除

可以不用绘制不会出现在观察者视野外的物体(比如角度立方体看不到的面)来提高渲染的性能。

面剔除(Face culling),OpenGL允许检查所有正面朝向(Front facing)观察者的面,并渲染它们,而丢弃所有背面朝向(Back facing)的面,这样就节约了我们很多片段着色器的命令。OpenGL分析顶点数据的连接顺序(Winding order)来判断物体的正面和反面。

顶点链接顺序

三角形的顶点链接顺序

默认情况下,逆时针的顶点连接顺序被定义为三角形的正面。实际的顶点连接顺序是在光栅化阶段(Rasterization stage)计算的,所以当顶点着色器已经运行后。顶点就能够在观察者的观察点被看到。

1,启用面剔除:glEnable(GL_CULL_FACE);

2,剔除特定的面:glCullFace(GL_BACK);

GL_BACK,GL_FRONT,GL_FRONT_AND_BACK

3,改变判定正面的标准:glFrontFace(GL_CCW);

默认值是GL_CCW,它代表逆时针,GL_CW代表顺时针顺序。

相关文章

  • 混合、面剔除

    混合 在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明是物体(或物体的一部分)非纯色而是混合...

  • opengl学习-面剔除

    OpenGL能够检查所有面向观察者的面,并渲染它们,而丢弃那些背向的面,以节省片段着色器调用。我们要做的就是告诉O...

  • OpenGL正面剔除,深度测试,混合

    问题抛出 通过该API绘制一个甜甜圈,如图 当我们进行旋转的时候会出现以下情况 为什么会出现这个原因呢? 任何一个...

  • 股初10~构建白马股

    经过ROE筛选 剔除周期股 剔除基本面转坏的 用小熊1剔除美化收入的 用小熊2、3剔除美化资产的 以上实操用爱问财...

  • Open GL 渲染技巧-正背面剔除、深度测试、颜色混合

    Open GL常见渲染技巧 1.正背面剔除2.深度测试3.多边形偏移4.颜色混合 1.正背面剔除 1.1 任何一个...

  • OpenGL ES for Android(面剔除)

    简介 首先我们绘制一个立方体,想象一下能看到几个面。一般情况下我们最多能看到三个面,极端的情况我们甚至只能看到一个...

  • OpenGL学习18——面剔除

    面剔除(Face culling) OpenGL会检查所有面片,渲染那些面向视角的面片而丢弃那些背向的,减少片元着...

  • OpenGL(六)-- 渲染技巧:正背面剔除、深度测试、多边形偏

    OpenGL(六)-- 渲染技巧:正背面剔除、深度测试、多边形偏移、颜色混合 通过一个基础案例来了解这些渲染技巧:...

  • OpenGL --面剔除和深度测试

    当我们以某一视角观察一个多面立体图形的时候,我们的肉眼只能看到一部分面积,也就是我们的视线正前方的面,例如观察一个...

  • 16.opengl高级-面剔除

    一、原理介绍 这一节比较简单,从相机方向看,一个3D形状的图形总有部分面是看不到的,这部分看不到的片元可以剔除掉,...

网友评论

      本文标题:混合、面剔除

      本文链接:https://www.haomeiwen.com/subject/pnbybttx.html