当前位置: 首页 > news >正文

QT之OpenGL混合

QT之OpenGL混合

  • 1. 概述
  • 2. 实现
    • 2.1 丢弃片段
    • 2.1.1 Demo
    • 2.2 混合
      • 2.2.1 相关函数
      • 2.2.2 排序问题
    • 2.2.3 Demo

1. 概述

OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。

2. 实现

2.1 丢弃片段

在某些情况下,有些片段是只需要设置显示或者不显示,而不需要考虑其透明的情况。而此时就需要对不显示的片段进行丢弃(Discard)操作。此时的片段丢弃是根据alpha通道的值判断的。

2.1.1 Demo

Demo源码
在这里插入图片描述

2.2 混合

混合(Blending)相对于丢弃(Discard)来说则是处于一种中间的状态,即所有的片段都要绘制,但是各片段存在叠加的状态。

2.2.1 相关函数

  • 启用混合模式

    glEnable(GL_BLEND);
    
  • 告诉OpenGL该如何混合
    在这里插入图片描述

    /*
    sfactor : 源因子
    dfactor : 目标因子
    glBlendColor()可以用来设置常量颜色
    */
    glBlendFunc(GLenum sfactor, GLenum dfactor)
    /*
    此函数则可以为RGB和alpha通道分别设置不同的选项
    */
    glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
    

    在这里插入图片描述

    /*
    可以影响混合方程的计算方式,一般是默认的设置
    */
    glBlendEquation(GLenum mode)
    

    在这里插入图片描述

2.2.2 排序问题

在混合绘制的时候通常有遵循以下原则:

  • 先绘制所有不透明的物体
  • 对所有透明的物体排序
  • 按顺序绘制所有透明的物体

否则容易出现遮挡情况,如下所示:
在这里插入图片描述
排序后的效果如下:
在这里插入图片描述

2.2.3 Demo

混合Demo源码

http://www.lryc.cn/news/20913.html

相关文章:

  • 【1255. 得分最高的单词集合】
  • nginx模块介绍
  • 排错工具ping和trace(电子科技大学TCP/IP实验四)
  • node.js中ws模块创建服务端和客户端
  • kubernates-1.26.1 kubeadm containerd 单机部署
  • 如何在 iPhone 上恢复已删除的通话记录/通话记录
  • Canonical为所有支持的Ubuntu LTS系统发布了新的Linux内核更新
  • MS9122是一款USB单芯片投屏器,内部集成了USB2 0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示
  • C++学习笔记-数据抽象
  • 【Android】Android开发笔记(一)
  • C语言数据结构(二)—— 受限线性表 【栈(Stack)、队列(Queue)】
  • 线程安全之synchronized和volatile
  • 量子计算对网络安全的影响
  • MyBatis——增删改查操作的实现
  • 【7】linux命令每日分享——cat查看文件内容
  • 新氧2023年财务业绩预测:退市风险大幅降低,收入增长将放缓
  • C++使用shared_ptr与weak_ptr轻松管理内存
  • Buuctf reverse [FlareOn4]IgniteMe 题解
  • ChatGPT懂SAP吗?跟ChatGPT聊完后,我暂时不担心会失业
  • Communications link failure 解决方法 !!!
  • pytorch入门2--数据预处理、线性代数的矩阵实现、求导
  • 15.消息队列RabbitMQ
  • 并发编程之死锁问题介绍
  • 【python学习笔记】:SQL常用脚本(一)
  • Spring是怎么解决循环依赖的
  • HTML创意动画代码
  • 软工第一次个人作业——阅读和提问
  • urho3d的自定义文件格式
  • spark第一章:环境安装
  • MySQL---存储过程与存储函数的相关概念