zoukankan      html  css  js  c++  java
  • 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);

    // 裁剪区域

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

    修改后运行效果:

  • 相关阅读:
    SQL 2008 TSQL(表变量参数) (转)
    当前主流浏览器并行连接数(同域名)
    ASP.NET 页生命周期概述
    使用SecureCRT连接ubuntu或者redhat
    Linux下查看CPU使用率
    在网上搜罗的一些有阀值的性能测试指标(转)
    httpModule测试
    狙击怪物还不错,O(∩_∩)O~
    IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
    Sql Server 分区演练
  • 原文地址:https://www.cnblogs.com/MakeView660/p/10457905.html
Copyright © 2011-2022 走看看