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, 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裁剪测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net中XML,JSON的几种处理方式
- 下一篇: 抓捕盗窃犯(并查集)