Opengl 初学

本文详细介绍了OpenGL中的关键概念,如图元、顶点着色器、片段着色器、帧缓冲区及其作用,着重讲解了纹理过滤、深度测试和三缓冲区技术,展示了如何在OpenGL中进行高效的渲染和颜色混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Opengl

它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。OpenGL的函数本质上都是对OpenGL上下文这个庞大的状态机中的某个状态或者对象进行操作。

帧缓冲区就是OpenGL中的画板,这些画布可以是纹理(Texture)或者是渲染缓冲区(RenderBuffer),而放置这些画布的位置被称为帧缓冲区的附着(Attachment)

帧缓冲区并不是实际存储数据的地方,实际存储图像数据数据的对象就是纹理和渲染缓冲区。纹理或渲染缓冲区作为帧缓冲区的附着。
渲染缓冲区对应操作系统提供的窗口2D,而纹理代表列离屏的图像存储区域1D、2D、3D。值得注意的是,一般来说渲染缓冲区和纹理不能同时挂载在同一个帧缓冲区上。

OpenGL中的图像都是由图元组成。在OpenGL ES中,有3种类型的图元:点、线、三角形
索引数据的目的主要是为了实现顶点的复用

OpenGL在实际调用绘制函数之前,还需要指定一个由shader编译成的着色器程序
OpenGL ES 3.0 顶点着色器和片段着色器
在OpenGL进行绘制的时候,首先由顶点着色器对传入的顶点数据进行运算。
再通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种矢量图形,转换为栅格化数据。
最后,将栅格化数据传入片段着色器中进行运算。
片段着色器会对栅格化数据中的每一个像素进行运算,并决定像素的颜色,也可以在这个阶段将某些像素丢弃。

如果图元有纹理,就必须用纹理来产生图元的二维渲染图象上每个像素的颜色。
我们把这一过程称为纹理过滤通过了深度测试和模板测试,会和帧缓冲区上的颜色附着上的颜色进行混合,决定最终留在画布上的颜色是什么。

顶点着色器是OpenGL中用于计算顶点属性的程序。顶点着色器是逐顶点运算的程序,顶点着色器的数据输入主要有两种,统一变量、顶点属性
同时顶点着色器的输出结果,也会作为片段着色器的输入。

片段着色器是OpenGL中用于计算片段(像素)颜色的程序,是逐像素运算的程序。
片段着色器的的数据输入主要有三种种,统一变量、顶点着色器输入变量(也被称为可变变量varying)、采样器
顶点着色器输入变量在每个像素运算中则一般是不同的,它的值由组成图元的顶点的顶点着色器运算输出的值,根据像素位置进行插值的结果而决定。采样器则是用于从设定好的纹理中,获取纹理的像素颜色的。

在着色器程序完成之后,我们得到了像素数据,这些数据必须要通过测试才能最终绘制到画布。
深度测试:根据OpenGL设定好的深度测试程序,决定是否最终渲染到画布上,一般默认的程序是将离屏幕较近的像素保留,而将离屏幕较远的像素丢弃。三维物体的描边技术,就是模板测试典型的用处之一。

如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜色进行混合,混合的算法可以通过OpenGL的函数进行指定,如果帧缓冲区的颜色附着设置为一张纹理,那么渲染完成之后,可以重新构造新的帧缓冲区,并将上次渲染出来的纹理作为输入,重新进行前面所述的流程。

常规的OpenGL程序至少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。
由于总是要等待缓冲区交换之后再进行下一帧的渲染,使得帧率无法完全达到硬件允许的最高水平。为了解决这个问题,引入了三缓冲区技术。

NEHE的OPENGL教程 第42课 多视窗口… NEHE的OPENGL教程 第42课 多视窗口… NeHe的OPENGL中文教程:第41课 体… NeHe的OPENGL中文教程:第40课 绳… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第38课 从… NeHe的OPENGL中文教程:第37课 卡… 愚人节十大IT假新闻:Opera浏览器… NeHe的OPENGL中文教程:第36课 放… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第34课 从… NeHe的OPENGL中文教程:第33课 加… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第31课 模… NEHE的OPENGL中文教程:第30课 碰… NEHE的OPENGL中文教程:第30课 碰… NeHe的OPENGL中文教程:第29课 Bli… NeHe的OPENGL中文教程:第28课 贝… NeHe的OPENGL中文教程:第27课 影… NeHe的OPENGL中文教程:第26课剪裁… NeHe的OPENGL中文教程:第25课 变… NeHe的OPENGL中文教程:第24课 TAG… NeHe的OPENGL中文教程:第23课 球… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第20课 蒙… NeHe的OPENGL中文教程:第19课 粒… NeHe的OPENGL中文教程:第18课 二… NeHe的OPENGL中文教程:第17课 2D… NeHe的OPENGL中文教程:第16课 雾 NeHe的OPENGL中文教程:第15课 图… NeHe的OPENGL中文教程:第14课 图… NeHe的OPENGL中文教程:第13课 位… NeHe的OPENGL中文教程:第12课 显… NeHe的OPENGL中文教程:第11课 飘… NeHe的OPENGL中文教程:第十课 漫… NeHe的OPENGL中文教程:第九课 漂… NeHe的OPENGL中文教程:第八课 Alp… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第六课 纹… NeHe的OPENGL中文教程:第五课 向3… NeHe的OPENGL中文教程:第四课 旋… NeHe的OPENGL中文教程:第三课 着… NeHe的OPENGL中文教程:第二课 多… NeHe的OPENGL中文教程:第一课 新… NeHe的OPENGL中文教程:第一课 新… DirectX与OpenGL方面的经典电子书… VC++ 6.0下OpengGL配置以及glut配… 怎样开始学习OpenGL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值