《OpenGL编程指南(原书第9版)》——1.2 初识OpenGL程序

更新时间:2023-05-27 03:09:19 阅读: 评论:0

双四一《OpenGL编程指南(原书第9版)》——1.2 初识OpenGL
程序
1.2 初识OpenGL程序
淘米水洗脸有什么作用与功效正因为可以⽤OpenGL去做那么多的事情,所以OpenGL程序有可能会写得⾮常庞⼤和复杂。不过,所有OpenGL程序的基本结构通常都是类似的:
1.?初始化物体渲染所对应的状态。
勇敢的说再见2.?设置需要渲染的物体。
在阅读代码之前,我们有必要了解⼀些最常⽤的图形学名词。渲染(render)这个词在前⽂中已经多次出现,它表⽰计算机从模型创建最终图像的过程。OpenGL只是其中⼀种渲染系统,除此之外,还有很多其他的渲染系统。OpenGL是基于光栅化的系统,但是也有别的⽅法⽤于⽣成图像。例如光线跟踪(ray tracing),⽽这类技术已经超出了本书的介绍范围。不过,就算是⽤到了光线跟踪技术的系统,同样有可能需要⽤到OpenGL来显⽰图像,或者计算图像⽣成所需的信息。并且,OpenGL的最新版本如今已经变得更加灵活⽽强⼤,因此诸如光线跟踪、光⼦映射(photon mapping)、路径跟踪(path tracing)以及基于图像的渲染(image-bad rendering)这样的技术都可以相对简单地在可编程图形硬
件端实现了。
模型(model),或者场景对象(我们会交替地使⽤这两个名词)是通过⼏何图元,例如点、线和三⾓形来构建的,⽽图元与模型的顶点(vertex)也存在着各种对应的关系。
OpenGL另⼀个最本质的概念叫做着⾊器,它是图形硬件设备所执⾏的⼀类特殊函数。理解着⾊器最好的⽅法是把它看做专为图形处理单元(通常也叫做GPU)编译的⼀种⼩型程序。OpenGL在其内部包含了所有的编译器⼯具,可以直接从着⾊器源代码创建GPU所需的编译代码并执⾏。在OpenGL中,会⽤到六种不同的着⾊阶段(shader stage)。其中最常⽤的包括的顶点着⾊器(vertex shader)以及⽚元着⾊器,前者⽤于处理顶点数据,后者⽤于处理光栅化后的⽚元数据。
最终⽣成的图像包含了屏幕上绘制的所有像素点。像素(pixel)是显⽰器上最⼩的可见单元。计算机系统将所有的像素保存到帧缓存(framebuffer)当中,后者是由图形硬件设备管理的⼀块独⽴内存区域,可以直接映射到最终的显⽰设备上。
快乐母亲节
图1-1所⽰为⼀个简单的OpenGL程序的输出结果,它在⼀个窗⼝中渲染了两个蓝⾊的三⾓形。这个例⼦的完整源代码如例1.1所⽰。
例1.1  第⼀个OpenGL程序triangles.cpp
南湖驾校
达克宁栓说明书也许你会觉得这⾥的代码有点多,不过它的确就是⼏乎每⼀个OpenGL程序所必需的基本内容了。我们⽤到了不属于OpenGL正式部分的⼀些第三⽅软件库,以便实现⼀些简单的⼯作,例如创建窗⼝、接收⿏标和键盘输⼊等—OpenGL⾃⾝并不包含这些功能。我们还创建了⼀些辅助函数和简单的C++类来简化⽰例程序的编写。尽管OpenGL是⼀个C语⾔形式的库,但是本书中的所有⽰例都会使⽤C++来编写,但只是⾮常简单的C++。事实上,我们⽤到的绝⼤部分C++代码是⽤来实现⼀些数学概念如向量和矩阵的。
渭河
简单来说,下⾯列出的就是例1.1做的所有事情。不过不⽤担⼼,后⾯的章节会更详细地解释这些概念。
氨咖黄敏胶囊一次吃几粒在程序的起始部分,我们包含了必要的头⽂件并且声明了⼀些全局变量和其他有⽤的编程结构。
init()函数负责设置程序中需要⽤到的数据。它可能是渲染图元时⽤到的顶点信息,或者⽤于执⾏纹理映射(texture mapping)的图像数据,第6章会介绍这⼀技术。
在这个init()函数中,⾸先指定了两个被渲染的三⾓形的位置信息。然后指定了程序中使⽤的着⾊器。在这个⽰例中,我们只需要使⽤顶点和⽚元着⾊器。这⾥的LoadShaders()是我们为着⾊器进⼊GPU的操作专门实现的函数。第2章会详细介绍与它相关的内容。
init()函数的最后⼀部分叫做着⾊管线装配(shader plumbing),也就是将应⽤程序的数据与着⾊器程序的变量关联起来。同样会在第2章详细介绍这些内容。
display()函数真正执⾏了渲染的⼯作。也就是说,它负责调⽤OpenGL函数并渲染需要的内容。⼏乎所有的display()函数都要完成类似这个简单⽰例中的三个步骤。
1)调⽤glClearBufferfv()来清除窗⼝内容。
2)调⽤OpenGL命令来渲染对象。
3)将最终图像输出到屏幕。
最后,main()函数执⾏了创建窗⼝、调⽤init()以及最终进⼊事件循环体的⼀系列繁重⼯作。这⾥你也会看到⼀些以gl开头的函数,但是它们看起来和其他的函数⼜有⼀些不同。这些函数就是刚才所说的来⾃第三⽅库GLFW和GL3W的函数,我们会随时使⽤它们来快速完成⼀些简单的功能,并且保证OpenGL程序可以运⾏在不同的操作系统和窗⼝系统上。
在深⼊了解这些函数之前,我们有必要先解释⼀下OpenGL的函数、常量的命名⽅式,以及⼀些有⽤的编程结构。

本文发布于:2023-05-27 03:09:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/789366.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   函数   渲染   图像   创建   需要   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图