剪裁测试(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);

// 裁剪区域

,, ,);

运行效果:

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()获取在全局场景绘制区域中的图元中心坐标位置。

修改后运行效果:

Qt OpenGL裁剪测试的更多相关文章

  1. OpenGL光照测试

    OpenGL光照测试 花了大概半个月,研究了OpenGL的光照.请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过.这个程序是通过光照对模型的照射,来研究OpenGL光照的性质.以后可以通过这个 ...

  2. ubuntu下配置qt+opengl+opencv

    原地址:http://www.cnblogs.com/aleny-liu/archive/2011/12/16/aleny-Qtnote1.html http://blog.csdn.net/jdh9 ...

  3. Qt OpenGL:学习现代3D图形编程之四,透视投影浅析

    一.非真实的世界 与之前几篇文章不同的是,这里要画12个三角形,这个12个三角形构造一个方形棱柱(这里为长方体).棱柱的每个四边形表面由两个三角形组成.这两个三角形其中的一条边重合,而且它们的六个顶点 ...

  4. Qt OpenGL三维绘图

     简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...

  5. Qt 内存泄漏测试

    在说Qt的内存测试之前,首先需要说明和肯定的一点是:Qt是绝对没有内存泄漏的,我们必须相信这一点. 接下来,说明一下基于Linux的Qt内存测试工具及其用法和说明: 一.内存测试工具Valgrind ...

  6. QT OpenGL中文教程在QT4版本后的错误代码更改(一)

    由于教程中说的已经够可以了,这里就不对代码进行分析了,有兴趣可以自己去看看.这个教程来源于原来的NeHeOpenGL中文教程 (http://www.yakergong.net/nehe/) ,但其有 ...

  7. Qt OpenGL 鼠标拾取实现

    在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...

  8. QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

    本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...

  9. OpenGL.Tutorial03_Matrices_测试

    1. 2. // ZC: 工程-->右键-->属性--> 配置属性: // ZC: C/C++ -->常规-->附加包含目录,里面添加: // ZC: E:\OpenGL ...

随机推荐

  1. 【Unity Shader】六、使用法线贴图(Normal Map)的Shader

    学习资料: http://www.sikiedu.com/course/37/task/456/show# http://www.sikiedu.com/course/37/task/458/show ...

  2. 如何在CentOS 6.5上升级PHP

    CentOS 6.5上默认安装PHP 5.3.因为后台网站无法正确运行在PHP 5.3上,所以计划将PHP升级到开发平台一样的版本PHP 5.5.为了方便,我们采用YUM的方式升级PHP 工具/原料 ...

  3. 百度地图Api进阶教程-点聚合9.html

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. java 生成指定区间随机数

    int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

  5. String.valueOf 的坑

    一个方法返回 null,如果使用 String.valueOf() 进行转换,则会将 null 转为字符串 "null". 前者是个空类型,后者则是包含四个字母(n,u,l,l)的 ...

  6. linux 安装 vsftpd服务

    yum install vsftpd 修改配置文件 vim /etc/vsftpd/ftpusers vim /etc/vsftpd/user_list 简单起见,注释掉两个配置文件中的所有用户.

  7. window10删除导航栏中的onedrive

    前面介绍了如何删除导航栏中的“快速访问”,对于一个根本用不着的“oneDrive”肯定也得搞掉. 0.处理前: 1.卸载onedrive是不能清除导航栏里面的onedrive的,进入注册表regedi ...

  8. WampServer 常见问题

    Wamp就是Windows 下的Apache Mysql PHP集成环境. 支持phpmyadmin 注意:安装前请先安装VC 2010运行库(vcredist2010.exe ),否则会提示没有找到 ...

  9. MFC中的句柄

    1.引出句柄 CDC问题:1.CDC dc;dc.LineTo(point);无法运行 2.CDC *dc=GetDC();dc->LineTo(point);就可以运行了 MFC中有大量的句柄 ...

  10. 強大的javascrpt原型链學習

    一个自带隐式的 __proto__ 属性[implicit __proto__ property],指向foo的原型 這有點類似實現C# 繼承作用 a類的公共東西,給b和c類共用 var a = { ...