剪裁测试(Scissor Test)用于限制绘制区域。

我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃。

换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改。

可以通过下面的代码来启用或禁用剪裁测试:

glEnable(GL_SCISSOR_TEST);             // 启用剪裁测试

glDisable(GL_SCISSOR_TEST);             // 禁用剪裁测试

可以通过下面的代码来指定一个位置在(x, y),宽度为width,高度为height的剪裁窗口。glScissor(x, y, width, height);

注意: glScissor窗口坐标是以左下角为(0, 0),右上角为(width, height)的,这与Windows系统窗口有所不同。

下面的代码将GLWidget绘图区域中进行四周边界处10像素的裁剪:

// 启用剪裁测试

glEnable(GL_SCISSOR_TEST);

// 裁剪区域

glScissor(10, 10, this->geometry().width()- 20,this->geometry().height()- 20);

运行效果:

Qt自带的boxes例程中,QtBox类可以显示一个旋转的漂亮立方体,但是在其旋转的过程中绘制区域会超出图形项Item的黄色边界,如下图所示:

此时可以设置裁剪区,黄色边界内的绘制显示,边界外的则不绘制!

在QtBox::paint中添加代码如下:

//全局绘制区域的大小

float width = float(painter->device()->width());

float height = float(painter->device()->height());

//全局绘制区域的大小

glScissor(pos().x() - m_size / 2, height - m_size / 2 - pos().y(), m_size, m_size);

glEnable(GL_SCISSOR_TEST);

……

glDisable(GL_SCISSOR_TEST);

其中,m_size为黄色正方形区域的大小,pos()获取在全局场景绘制区域中的图元中心坐标位置。

修改后运行效果:

转载于:https://www.cnblogs.com/MakeView660/p/10457905.html

Qt OpenGL裁剪测试相关推荐

  1. linux上qt配置opengl,Ubuntu下配置Qt+OpenGL+OpenCV

    我的平台:Ubuntu 10.04+Qt+OpenGL+OpenCV OpenGL是Qt自带的,Windows下的版本OpenGL库已经随同Qt的Windows发行版一同安装,Linux版本则没有安装 ...

  2. OpenGL(十六)——Qt OpenGL融合(将两张图片叠合成一张图片)

    OpenGL(十六)--Qt OpenGL融合(将两张图片叠合成一张图片) 一.场景 在常用的项目场景中,我们经常会遇到将两个图片合在一起变成一张图片,这时候就会有前后之分,特别是两个物体合在一起的时 ...

  3. QT + opengl 三维视图变换

    QT + Opengl 三维视图变换 原本是导师的项目,要求像paraview一样实现三维网格的可视化以及三键操作,从qt 和opengl零基础开始动手鼓捣了大半个月的才完成 QT +Opengl环境 ...

  4. QT+OpenGL中glTexImage2D不生效问题

    QT+opengl开发,生成texture并赋值如下 glGenTextures(1,&m_inputTexture); glBindTexture(GL_TEXTURE_2D, m_inpu ...

  5. OpenGL(十二)——Qt OpenGL绕着坐标轴旋转多边形

    OpenGL(十二)--Qt OpenGL绕着坐标轴旋转多边形 一.旋转多边形 前两篇介绍了如何绘制多边形,并且给多边形进行上色.本篇介绍如何旋转多边形. 多边形的旋转,在类中增加两个变量来控制这两个 ...

  6. QT openGL环境光照

    先看上一篇文章:Qt Opengl 给两个立方体设置两中不同颜色 使用环境光非常的简单,我们只需要设置一个环境光强度,用这个强度值乘上光源的颜色得到环境光颜色.最后,用环境光颜色乘上物体的颜色,得到物 ...

  7. Qt OpenGL(08)通过递归细分正二十面体逼近球面

    文章目录 Qt OpenGL 使用递归细分正二十面体逼近球体 下面就是绘制的代码: Widget.cpp 顶点着色器 片段着色器 Qt OpenGL 使用递归细分正二十面体逼近球体 在上一章中,我们讨 ...

  8. OpenGL(十四)——Qt OpenGL纹理

    OpenGL(十四)--Qt OpenGL纹理 一.纹理 终于写到纹理的部分了: 纹理(Texture)的本质是一个2D图片(1D和3D),或者叫图形数据.只是在OpenGL中专业术语中称其为纹理. ...

  9. Qt OpenGL 旋转、平移、缩放

    Qt OpenGL 设置旋转.平移.缩放.接上一篇文章: Qt OpenGL 纹理贴图 修改顶点着色器: #version 330 core layout (location = 0) in vec3 ...

最新文章

  1. post 与 get 的区别
  2. arch linux 安装 arm,给树莓派安装 Arch Linux ARM
  3. Swift3.0中如何完成不同View Controller之间的切换
  4. [html] H5播放的video视频,如何实现对视频截图?
  5. tcp状态机-三次握手-四次挥手以及常见面试题
  6. re.DOTALL --编写多行模式的正则表达式
  7. 条件语句和循环语句_总结一下条件语句和循环语句
  8. 【线程】——初识线程
  9. 微软邮件系统Exchange 2013系列(七)创建发送连接器
  10. 第008讲 div css开山篇
  11. iOS 修改系统定位(非越狱)
  12. 《早起的奇迹》(死过一次的人生赢家)
  13. Django DTL 与verbatim
  14. cas112-27-6|三乙二醇/二缩三乙二醇/三甘醇|三乙二醇 透明液体
  15. 绘制圆形 和 椭圆形:边圆形 imageellipse() 、 填充圆形imagefilledellipse()
  16. 电影下载的TS TC版
  17. Kotlin高仿微信-第26篇-朋友圈-选择图片、小视频对话框
  18. mysql打开eqd_备注数据库到MySQL(带CF?)/或如何获得NSF数据结构
  19. Dapper.Contrib
  20. MTK 平台 efuse 配置

热门文章

  1. sqoop 导入mysql blob字段,Sqoop导入的数据格式问题
  2. ansible(4)——配置文件及以对面某个用户来登录
  3. 嵌入式Linux操作系统学习规划 (转)
  4. arm--ldm、stm指令解析
  5. 设计模式C++实现——观察者模式
  6. Kali Linux ver2020.4安装Google中文输入法以及nslookup、dig等工具
  7. string学习笔记1
  8. C++四种类型强制转换——const_cast、static_cast、dynamic_cast、reinterpret_cast
  9. java怎样实现自定义过滤关键词_SpringSecurity学习之自定义过滤器的实现代码
  10. c++-内存管理-BC5