OpenGL裁剪

裁剪是将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);

这样就是文章开始时的效果了





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值