文档章节

FBO的使用例程,使用了自己编写的GL封装类

周卓
 周卓
发布于 2014/07/03 17:49
字数 319
阅读 61
收藏 0
  m_gl.BeginScene();
	glewInit();
	
	int OpenGLVersion[2];
	glGetIntegerv(GL_MAJOR_VERSION, &OpenGLVersion[0]);
	glGetIntegerv(GL_MINOR_VERSION, &OpenGLVersion[1]);
	GLFBO m_FBO(Width,Height,0);
	m_FBO.GenRenderBuffers();

	m_FBO.BindDrawFBO();
	m_FBO.BindReadFBO();
	glViewport(0,0,Width,Height);//每次绑定都要重新设置视口

	//glGenFramebuffersEXT(1,&FrameBufferObjectDrawID);
	//glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, FrameBufferObjectDrawID);
	//glGenFramebuffersEXT(1,&FrameBufferObjectReadID);
	//glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT,FrameBufferObjectReadID);
	////glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
	////glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, ShadowTex, 0);

	//glGenRenderbuffersEXT(1, &RenderBufferColorID[0]);
	//glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RenderBufferColorID[0]);
	//glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, 16, Width, Height);
	//glGenRenderbuffersEXT(1, &RenderBufferDepthID);
	//glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RenderBufferDepthID);
	//glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, 16, Width, Height);

	//glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, RenderBufferColorID[0]);
	//glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, RenderBufferDepthID);

	//bool status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
	//if (!status)
	//	return;

	glClearColor(1.0f,1.0f,1.0f,1.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//一定要清理深度缓冲区,否则画不出来
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-Width/2, Width/2, -Height/2,  Height/2, -20000.0f, 20000.0f); 
	

	//DrawPencilline(Width,Height,pMesh);
	
	glBegin(GL_TRIANGLES);
	glColor4f(0.0, 0.0, 1.0,1.0f);
	glVertex3f(0.0 ,0.0 ,-100.0);
	glVertex3f(100.0 ,100.0 ,-100.0);
	glVertex3f(100.0 ,200.0 ,-100.0);
	glEnd();
	
	glFlush(); // remember to flush GL output!

	

	glReadBuffer(GL_COLOR_ATTACHMENT0);//这句可有可无,因为默认就是GL_COLOR_ATTACHMENT0
	glPixelStorei(GL_UNPACK_ALIGNMENT,1);
	GLubyte * readpixels = new GLubyte[Width*Height*4];
	glReadPixels(0,0,Width,Height,GL_RGBA,GL_UNSIGNED_BYTE,readpixels);

	CImagePixel img;
	img.SetSize(Width,Height);
	cvector<CiColor>::iterator p;
	p = img.GetBuffer();
	for(int j =0;j<Height;j++)
	{
		for (int i = 0;i<Width;i++)
		{
			p[j*Width+i].r = readpixels[((Height-j-1)*Width+i)*4+0];
			p[j*Width+i].g = readpixels[((Height-j-1)*Width+i)*4+1];
			p[j*Width+i].b = readpixels[((Height-j-1)*Width+i)*4+2];
			p[j*Width+i].a = readpixels[((Height-j-1)*Width+i)*4+3];

		}
	}
	char* name1 = new char[20];
	sprintf(name1,"D://test//FBOabce%d.bmp",id);

	BMPImage saver(img);
	CStreamFile is(name1, CStreamFile::WRITE);
	saver.Write(is);
	m_gl.EndScene();


© 著作权归作者所有

周卓
粉丝 5
博文 7
码字总数 3519
作品 0
沈阳
私信 提问
关于opengl中多重纹理,离屏与渲染到屏幕切换,可编程管线有固定管线切换的理解

最近用opengl写项目时遇见几个问题,感觉比较通用写下啦分享; 一, opengl多重纹理的使用 二, opengl离屏渲染与渲染到屏幕切换使用 三, opengl可编程管线与固定管线切换使用 经过一个成功...

lixiaoguang20
2018/04/23
0
0
OpenGL中FBO的概念及其应用

FBO一个最常见的应用就是:渲染到纹理(render to texture),通过这项技术可以实现发光效果,环境映射,阴影映射等很炫的效果。 OpenGL中的Frame Buffer Object(FBO)扩展,被推荐用于把数据渲...

Jerikc
2016/02/19
84
0
Opengl 离屏渲染的小问题

我通过在FBO上绑定了Texture2D进行渲染到纹理,但在后面使用该纹理时发现alpha的值是不对的,主要代码如下请大神指教: 代码段1: glBindTexture(GL_TEXTURE_2D, m_textWhiteId); glColorMa...

kbug
2018/03/22
162
2
RenderTexture 渲染到纹理

cocos2d里面有个CCRenderTexture,用于将指定对象渲染到纹理。在unity3d里面也有同样的技术。 今天查阅了相关资料,再看了一下cocos2d的源码,发现他实际上用的是FBO(帧缓存对象)渲染到纹理...

yizhangxyz
2016/07/01
167
0
使用Hibernate来实现持久对象

对象、关系的映射(ORM)是一种耗时的工作,在Java环境下,有几种框架来表示持久数据,如实体Bean、OJB、JDO、Hibernate等。 Hibernate是一种新的ORM映射工具,它不仅提供了从Java类到数据表...

红薯
2008/10/05
376
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty源码学习(一)--导入IDEA并编译

1.从github下载最新的Netty稳定版本源码 2.解压源码文件夹 3.导入IDEA 4.跳过checkstyle和xml validate <plugin> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.12.......

湖之风情
9分钟前
1
0
电商网站用户端FE

需求拆分原则 1、单个迭代不宜太大 2、需求可交付,能够形成功能闭环 3、有成本意识,遵循二八原则 4、有预期的价值体现 提炼核心需求 用户端:商品、购物车、下单、支付、订单、用户 后台管...

星闪海洋
20分钟前
1
0
Awesome Blockchain 区块链技术导航

区块链技术导航:收集整理最全面最优质的区块链(BlockChain)技术开发相关资源。 以后找不到文档资料的时候去导航站看看。 先亮个像,我长这样: 导航站内容 区块链开发所涉及的资源: 如 项目...

Tiny熊
24分钟前
1
0
聊聊我的第一篇10万+,同时反驳某些评论

元旦的时候,我立了一个Flag,今年要写一篇10万+,现在目标算是完成一半了。 终于有了一篇10万+ 知乎后台显示我的回答《如何衡量一个人的 JavaScript 水平?》的阅读量已经超过了10万,具体截...

Fundebug
30分钟前
1
0
ping的用法

ping的用法: -t ping指定的主机,直到停止。若要查看统计信息并继续操作-请键入 Control-Break; 若要停止-请键入Control-C。 -a 将地址解析成主机名。 -n count 要发送的回显请求数。 -l s...

WinkJie
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部