一、裁剪
在 OpenGL 中提高渲染的一种方式。只刷新屏幕上发生变化的部分,OpenGL 允许将要进行渲染的窗口只去指定一个裁剪框。
基本原理:用于渲染时限制绘制区域,通过此技术可以在屏幕(帧缓冲)指定一个矩形区域。启用裁剪测试之后,不在此矩形区域内的片元被丢弃,只有在此矩形区域内的片元才有可能进入帧缓冲。因此实际达到的效果就是在屏幕上开辟一个小窗口,可以再其中进行指定内容的绘制。
1、裁剪相关代码配置
1.1、开启裁剪测试
glEnable(GL_SCISSOR_TEST);
1.2、开启裁剪测试
glDisable(GL_SCISSOR_TEST);
1.3、指定裁剪窗⼝
void glScissor(Glint x,Glint y,GLSize width,GLSize height);
x,y:指定裁剪框左下⻆位置;
width , height:指定裁剪尺⼨
2、理解窗口、视口、裁剪区域
- 窗口:就是显示解码
- 视口:就是窗口中用来显示图形的一块矩形区域,它可以和窗口等大,也可以比窗口大或者小。只有绘制在视口区域中的图形才能被显示,如果图形有一部分超出了视口区域,那么那一部分是看不到的。通过glViewPort() 函数设置。
- 裁剪区域(平行投影):就是视口矩形区域的最小最大 X 坐标(left, right)和最小最大 y 坐标 (bottom, top),而不是窗口的最小最大 x 坐标和 y 坐标。通过 glOrtho() 函数设置,这个函数还需指定最近最远 z 坐标,形成一个立体的裁剪区域。
3、裁剪实践
效果图
代码
#include "GLTools.h"
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif
//召唤场景
void RenderScene(void)
{
//设置清屏颜色为蓝色
glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
//1.现在剪成小红色分区
//(1)设置裁剪区颜色为红色
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
//(2)设置裁剪尺寸
glScissor(100, 100, 600, 400);
//(3)开启裁剪测试
glEnable(GL_SCISSOR_TEST);
//(4)开启清屏,执行裁剪
glClear(GL_COLOR_BUFFER_BIT);
// 2.裁剪一个绿色的小矩形
//(1).设置清屏颜色为绿色
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);
//(2).设置裁剪尺寸
glScissor(200, 200, 400, 200);
//(3).开始清屏执行裁剪
glClear(GL_COLOR_BUFFER_BIT);
//关闭裁剪测试
glDisable(GL_SCISSOR_TEST);
//强制执行缓存区
glutSwapBuffers()