通过glScissor(100, 100, 600, 400)函数可以设置裁剪区域,参数分别为左下角和右上角的坐标
当然,别忘记要开启裁剪测试glEnable(GL_SCISSOR_TEST);
#include <GLTools.h> // OpenGL toolkit
#define FREEGLUT_STATIC //在windows和linux上,使用freeglut静态版本,需要添加这一行,否则会出现错误
#include <glut.h>
#pragma comment(lib,"gltools.lib")//要加上这一行链接一下gltools库
void RenderScene(void)
{
// Clear blue window
glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);//填充蓝色
// Now set scissor to smaller red sub region
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
glScissor(100, 100, 600, 400);//缩小裁剪区域
glEnable(GL_SCISSOR_TEST);//开启裁剪测试
glClear(GL_COLOR_BUFFER_BIT);//填充红色
// Finally, an even smaller green rectangle
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);
glScissor(200, 200, 400, 200);//缩小裁剪区域
glClear(GL_COLOR_BUFFER_BIT);//填充绿色
// Turn scissor back off for next render
glDisable(GL_SCISSOR_TEST);//关闭裁剪测试
glutSwapBuffers();
}
///////////////////////////////////////////////////////////
// Set viewport and projection
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
///////////////////////////////////////////////////////////
// Program entry point
int main(int argc, char* argv[])
{
glutInit(&argc, argv);//初始化glut
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);//设置双缓冲 ,rgb颜色格式
glutInitWindowSize(800, 600);//窗口大小
glutCreateWindow("OpenGL Scissor");//窗口标题
glutReshapeFunc(ChangeSize);//注册窗口大小变化的函数
glutDisplayFunc(RenderScene);//注册渲染场景的函数;
glutMainLoop();//绘制主窗口
return 0;
}
这里并不能缩放显示的图片,因为所绘制出来的图案是基于坐标的,缩小可能导致不能正常看到图案。
效果图如下: