Qt OpenGL裁剪测试
剪裁测试(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裁剪测试的更多相关文章
- OpenGL光照测试
OpenGL光照测试 花了大概半个月,研究了OpenGL的光照.请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过.这个程序是通过光照对模型的照射,来研究OpenGL光照的性质.以后可以通过这个 ...
- ubuntu下配置qt+opengl+opencv
原地址:http://www.cnblogs.com/aleny-liu/archive/2011/12/16/aleny-Qtnote1.html http://blog.csdn.net/jdh9 ...
- Qt OpenGL:学习现代3D图形编程之四,透视投影浅析
一.非真实的世界 与之前几篇文章不同的是,这里要画12个三角形,这个12个三角形构造一个方形棱柱(这里为长方体).棱柱的每个四边形表面由两个三角形组成.这两个三角形其中的一条边重合,而且它们的六个顶点 ...
- Qt OpenGL三维绘图
简介 OpenGL是为三维绘图提供的标准应用编程接口. OpenGL处理的仅仅是三维绘图方面,而很少或是根本不提供图形用户界面编程方面的支持.OpenGL*应用程序的用户界面必须由其它工具包创建,比 ...
- Qt 内存泄漏测试
在说Qt的内存测试之前,首先需要说明和肯定的一点是:Qt是绝对没有内存泄漏的,我们必须相信这一点. 接下来,说明一下基于Linux的Qt内存测试工具及其用法和说明: 一.内存测试工具Valgrind ...
- QT OpenGL中文教程在QT4版本后的错误代码更改(一)
由于教程中说的已经够可以了,这里就不对代码进行分析了,有兴趣可以自己去看看.这个教程来源于原来的NeHeOpenGL中文教程 (http://www.yakergong.net/nehe/) ,但其有 ...
- Qt OpenGL 鼠标拾取实现
在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...
- QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)
本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...
- OpenGL.Tutorial03_Matrices_测试
1. 2. // ZC: 工程-->右键-->属性--> 配置属性: // ZC: C/C++ -->常规-->附加包含目录,里面添加: // ZC: E:\OpenGL ...
随机推荐
- sql优化方法学习和总结
首先要问自己几个问题: 哪些类型的sql会散发出坏味道? sql优化的基本原理是什么,为什么有的sql快有的慢? sql优化和底层的存储引擎关系大么? 怎么看执行过程? 优化建议 1. 缓存查询,sq ...
- centosmini7安装GNOME
1.在命令行下输入下面的命令来安装 Gnome 包 #:$sudo yum groupinstall "GNOME Desktop" "Graphical Admini ...
- 键盘 Input子系统
应用层测试代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <li ...
- Tomcat性能优化(二) ExpiresFilter设置浏览器缓存
Tomcat性能调优 通过ExpiresFilter设置资源缓存 [官方文档] http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#E ...
- python基础归结
00.python程序格式 #开头的语句是注释,其他每一行都是一个语句. 语句以冒号(:)结尾时,缩进的语句视为代码块(没有C语言中{}区分代码块). 约定俗称, 4个空格缩进,Tab或空格均可以,但 ...
- 初试 spring web mvc
作为一名code需要了解更多的知识,编程方面的东西太多了,是个逐渐积累的过程.最近学习一下spring web mvc,写下我个人的一些经验. 1.准备jar包.spring mvc 已经到了版本4, ...
- Java设计模式(12)迭代模式(Iterator模式)
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...
- Linux 套接字与文件描述符
端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信.端口和套接字的使用可以基于以下几点: ①为每个应用过程分配一个过程标识符(Process ID),每次 ...
- Python 字典的操作
#-*- coding:utf-8 -*- people = {"name":"jack","age":18,"addr" ...
- Qt Creator设置多核编译(-j8参数)
In the qtcreator go to the "Projects tab" and set "Make arguments" as you like: ...