裁剪是将OpenGL渲染限制在窗口中的一个特定的矩形区域中,这样可以渲染的时候只刷新屏幕上的一部分
我们来看一下效果 如下图
我们新建一个工程,工程的创建我们在第一节讲过了
来看一下需要包含的文件
#include <GLTools.h>
#define FREEGLUT_STATIC
#include <GL/glut.h>
下面是主函数
int main(int argc, char* argv[])
{
//初始化GLUT库
glutInit(&argc, argv);
//双缓冲模式就是图形先渲染到后台缓冲区,然后再调用glutSwapBuffers()一起渲染到前台缓冲区
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
//要创建的窗口大小
glutInitWindowSize(800,600);
//要创建的窗口标题
glutCreateWindow("OpenGL Scissor");
//窗口大小改变时的回调函数
glutReshapeFunc(ChangeSize);
//渲染的回调函数
glutDisplayFunc(RenderScene);
//开始主消息循环
glutMainLoop();
return 0;
}
void ChangeSize(int w, int h)
{
if (h == 0)
h = 1;
//设置视口大小
glViewport(0, 0, w, h);
}
下面是最后一个函数RenderScene(void)
我们先在窗口的x=100,y=100的地方绘制一个长和宽都是100的蓝色矩形
代码如下
void RenderScene(void)
{
//使下一次渲染时窗口颜色为蓝色
glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
//裁剪的区域
glScissor(100, 100, 100, 100);
//开启裁剪测试
glEnable(GL_SCISSOR_TEST);
//清除颜色缓冲区 就是将屏幕上最后绘制的内容删除
glClear(GL_COLOR_BUFFER_BIT);
//交换缓冲区
glutSwapBuffers();
}
效果图如下
其中glScissor(100, 100, 100, 100);就是来设置裁剪区域的,我们还需要通过glEnable(GL_SCISSOR_TEST) 来开启裁剪测试
在RenderScene函数中加入下面的代码 来绘制第二个矩形
//使下一次渲染时窗口颜色为绿色
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);
//裁剪的区域
glScissor(300, 300, 100, 100);
//清除颜色缓冲区
glClear(GL_COLOR_BUFFER_BIT);
//禁用裁剪测试
glDisable(GL_SCISSOR_TEST);
这样就是文章开始时的效果了