3D渲染

学习OpenGL ES之渲染到纹理

本文将介绍渲染到纹理技术。之前的例子都是将3D物体渲染到屏幕上,在iOS中GLKView为我们做好了渲染到屏幕的所有准备工作,我们只需要调用Open GL ES的绘制方法就可以轻松的渲染到屏幕。那么我们接下来了解一下GLKView为我们做了哪些准备工作。

FrameBuffer

FrameBuffer是OpenGL ES中重要基础组件之一,经常被缩写成FBO(FrameBufferObject),它用来承载GPU计算出来的数据,包括颜色(Color),深度(Depth),遮罩(Stencil)。FrameBuffer包括3个缓冲区,颜色缓冲区,深度缓冲区,遮罩缓冲区,每个缓冲区就是一块内存,存储着对应的像素数据。比如颜色缓冲区,一般像素格式都是RGBA,一共4个字节,如果是一个大小1024乘以1024的FrameBuffer,那么颜色缓冲区所占的内存就是1024x1024x4个字节。深度和遮罩缓冲区也有自己的格式。GLKView默认为我们创建了一个FrameBuffer,并且绑定了刚才说的3个缓冲区到这个FrameBuffer上。我们所有绘制的操作,最终都被写入到这个FrameBuffer的缓冲区中。这个FrameBuffer里的颜色缓冲区的数据最终会被呈现在GLKView上。

3D图形学理论入门指南

介绍

当我还小的时候,我曾以为计算机图形学是最酷的玩意儿。但是随即我认识到,学习图形学——创建那些超级闪亮的计算机程序——比我想象的要难上许多。我四处出击,阅读OpenGL渲染管线详解之类的文章,浏览关于图形工作原理的博客、网站等,对照着教程学习,试图搞懂一切。结果呢,一无所获。当我按照NeHe的教程设置好一切,却因为错误的调用了某个glXXX()函数,导致各种错误。我不具备正确调试程序的基础理论知识,所以我放弃了——就像我那个年纪的少年在遇到挫折时通常会做的那样。

然而,在若干年之后,我有机会能够在大学里参加一些计算机图形学的课程。这次我终于知道它们是如何正确工作了。如果我早知道这些,我那时应该能获得更多成功。所以,为了帮助和我有类似困境的人们,我打算分享下我学到的东西。

图形学背后的理念

概览

来聊聊实时光线跟踪那些事

现在的实时图形技术发展很快,一些游戏和游戏引擎,在光栅图形学的应用研究已经做到了一定高度,各种全局光方案,反走样技术,物理材质及灯光,…综合在一起就是各种复杂,《刀锋铁骑》也一直在各种借(chao)鉴(xi)。为什么搞这么复杂呐,原因很简答,就是光栅化。光栅化因为速度极快,实时渲染一直在朝这个方向发展,但是最近几年实时光线跟踪技术发展也相当快,感觉这个离线渲染领域的技术离游戏真的近了。

大概介绍下“光栅化”与“光线跟踪”

  光栅化是一种将几何图元变为二维图像的过程,是目前3D游戏成像主流算法,覆盖市面上几乎100%的游戏。

  由于实时3D渲染程序要求对用户的即时操作作出迅速反应,通常要求每秒20帧以上的渲染速率(像《刀锋铁骑》这种竞技类动作游戏需要60帧☺),这也使得高效率的“光栅化”成为当今最受青睐的3D即时成像技术。

  “光栅化”的计算速度与“光线追踪”相比极快,不过由于它并非基于对物理光线的传递计算,因此对于现实中复杂的光照效果的真实模拟方面,“光栅化”有点无能为力。

GPU概念以及D3D渲染流水线(管线)

当游戏的画面拟真度越来越高时,仅仅靠CPU来进行图形图像处理已经不能满足游戏的需要了。于是,人们开始尝试用硬件加速卡来协助CPU进行3D图像处理,此举在技术上和商业上都大获成功。早期比较出名的比如 Voodoo等。于是,大量的加速卡及GPU(Graphic Processing Unit)设计公司开始迅速推出自己的设计,如 ATI(刚被AMD收购),NVidia,PowerVR(市场萎缩,转向嵌入式系统的3D加速单元,参考PowerVR MBX及OpenGL ES)等开始展露头角。

同步内容
--电子创新网--
粤ICP备12070055号