learnopengl网站学习9.混合.txt

OpenGL中的混合是通过下面这个方程来实现的:

:源颜色向量。这是源自纹理的颜色向量。
:目标颜色向量。这是当前储存在颜色缓冲中的颜色向量。
:源因子值。指定了alpha值对源颜色的影响。
:目标因子值。指定了alpha值对目标颜色的影响。
虽然都是这样

glBlendFunc(GLenum sfactor, GLenum dfactor)函数接受两个参数,来设置源和目标因子。OpenGL为我们定义了很多个选项,我们将在下面列出大部分最常用的选项。注意常数颜色向量可以通过glBlendColor函数来另外设置。

选项    值
GL_ZERO    因子等于
GL_ONE    因子等于
GL_SRC_COLOR    因子等于源颜色向量
GL_ONE_MINUS_SRC_COLOR    因子等于
GL_DST_COLOR    因子等于目标颜色向量
GL_ONE_MINUS_DST_COLOR    因子等于
GL_SRC_ALPHA    因子等于的分量
GL_ONE_MINUS_SRC_ALPHA    因子等于 的分量
GL_DST_ALPHA    因子等于的分量
GL_ONE_MINUS_DST_ALPHA    因子等于 的分量
GL_CONSTANT_COLOR    因子等于常数颜色向量
GL_ONE_MINUS_CONSTANT_COLOR    因子等于
GL_CONSTANT_ALPHA    因子等于的分量
GL_ONE_MINUS_CONSTANT_ALPHA    因子等于 的分量

这个在cg里有不想多说

也可以使用glBlendFuncSeparate为RGB和alpha通道分别设置不同的选项:
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
这个就RGB分开设置


glBlendEquation(GLenum mode)允许我们设置运算符,它提供了三个选项:
GL_FUNC_ADD:默认选项,将两个分量相加:。
GL_FUNC_SUBTRACT:将两个分量相减: 。
GL_FUNC_REVERSE_SUBTRACT:将两个分量相减,但顺序相反:。
这个是设置运算模式的,默认是源x源factor加目标x目标factor

简单的排序
std::map<float, glm::vec3> sorted;
for (unsigned int i = 0; i < windows.size(); i++)
{
    float distance = glm::length(camera.Position - windows[i]);
    sorted[distance] = windows[i];
}
结果就是一个排序后的容器对象,它根据distance键值从低到高储存了每个窗户的位置。

之后,这次在渲染的时候,我们将以逆序(从远到近)从map中获取值,之后以正确的顺序绘制对应的窗户:

for(std::map<float,glm::vec3>::reverse_iterator it = sorted.rbegin(); it != sorted.rend(); ++it) 
{
    model = glm::mat4();
    model = glm::translate(model, it->second);              
    shader.setMat4("model", model);
    glDrawArrays(GL_TRIANGLES, 0, 6);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值