opengl超级宝典(第五版)阅读笔记 4 裁剪

通过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;
}

这里并不能缩放显示的图片,因为所绘制出来的图案是基于坐标的,缩小可能导致不能正常看到图案。
效果图如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43813453/article/details/85327193