㈠ 《计算机图形学几何工具算法详解》pdf下载在线阅读全文,求百度网盘云资源
《计算机图形学几何工具算法详解》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1_FF1Id2nDQk2Ed-QeBLEGA
㈡ 在线等计算机图形学(第三版) Computer Graphics with OpenGL Third Edition 中文与英文书的电子版
我有这本书《计算机图形学-用OpenGL实现(第2版)》和《3D计算机图形学(原书第三版)》的一部分,不知道这两本书对你来说有没有用。如果,想要这两本书,我可以不要分发给你。
㈢ 计算机图形学(OPENGL):材质
本文同时发布在我的个人博客上: https://dragon_boy.gitee.io
在真实世界中,每种物体对灯光的反应都不同,我们在OpenGL中定义不同的材质来模拟不同种类的物体。在OpenGL中,我们可以定义一个材质结构体管理对光照的影响信息(比如Phong模型),例如:
这里提供一个 网站 ,总结了一些不同物体的材质.
下面是上面创建的结构体在片元着色器的main方法中的应用(针对Phong模型):
可以看到,我们通过 来访问结构体的属性,这和C语言类似。虽然我们全局声明了材质结构体,但若是要为材质结构体的属性赋值,我们还是必须逐一赋值:
运行程序我们会发现场景太亮:
为解决场景过亮问题,我们可以定义一个灯光结构体:
灯光结构体中的ambient,diffuse,specular分别代表对各个类型光的强度影响。我们可以这样计算各个光照的效果:
设置灯光结构体的属性:
运行结果如下:
可以看到结果好了很多。通过这种方式,我们就可以通过改变属性来模拟不同的材质在不同灯光下的效果。
㈣ 求计算机图形学第三版(OPENGL)英文原版作者Hearn
《计算机图形学(第3版)》是一本内容丰富、取材新颖的计算机图形学着作,并在其前一版的基础上进行了全面扩充,增加了许多新的内容,覆盖了近年来计算机图形学的最新发展与成就。全书层次分明、重点突出,并附有使用OpenGL编写的大量程序以及各种效果图,是一本难得的优秀教材。
《计算机图形学(第3版)》共分为15章,全面系统地讲解了计算机图形学的基本概念和相关技术。作者首先对计算机图形学进行综述;然后讲解二维图形的对象表示、算法和应用,以及三维图形的相关技术、建模和变换;接着介绍光照模型、颜色模型和动画技术。《计算机图形学(第三版)》还新增了有关层次建模和图形文件格式的介绍,最后的附录给出了计算机图形学中用到的基本数学概念。
《计算机图形学(第3版)》可作为信息技术等相关专业本科生和研究生教材或参考书,也可以作为计算机图形学工作者的参考书。
㈤ 计算机图形学(OPENGL):PBR理论
本文同时发布在我的个人博客上: https://dragon_boy.gitee.io
PBR,全称phsically based rendering,即基于物理的渲染,是一系列基于相同理论的渲染技术的集合,更接近于真实的物理世界。因为PBR的目标是模拟真实的光照,它比Phong和Blinn-Phong更为真实,而且使用者可以不必调整一些不必要的参数区尽力模拟效果。
PBR本身也并不是完全的真实的物理模拟,只是基于物理的规则。一个PBR光照模型,需要满足下面3个条件:
所有的PBR技术都基于微表面模型的理论。该理论定义了,所有微观尺度的表面都可以被描述为微小独立的镜面,被称为微表面。由于表面的粗糙度不同,这些微小的镜面的排列会很不同:
微表面模型的近似采用一组能量守恒公式:离开表面的光的能量不能高于与表面发生作用前的光的能量,即能量会有一部分损失在物体内部。从上面的图中我们看到,粗糙度越高,高光范围越大,但高光的亮度越低。
对于能量守恒公式,我们需要区分漫反射和高光。当一束光线碰撞表面时,它就被分为折射部分和反射部分,反射部分形成高光,并不进入表面,这是广义上的高光光照。这是部分留在物体内部分吸收,这是广义上的漫反射光照。
其实和广义上的模型相比还是有一细微差别,折射光线并不会马上被吸收。在物理层面,我们可以将光线认为是一个带有能量能量体,在失去所有能量前会一直向前移动,而失去能量的方式是碰撞。每个物体都可以考虑为内部包含大量的粒子,这些粒子会作为碰撞体和光线进行碰撞,每次碰撞,这写粒子会吸收一部分光线的能量并转化为热能:
所有进入物体内部的折射光线的能量并不会被完全吸收,大多数都会向各个方向散射离开表面,而这些能量被吸收过的光线会参与表面的漫反射颜色计算。在PBR中,我们简化这一流程,我们假定所有的折射光线被吸收的能量接着在一个很小的范围内散射,忽略会离开表面一定距离的光线。有一些着色技术考虑了这些离开一定距离的光线,这一技术称为次表面散射,被应用于模拟皮肤、大理石蜡烛这些材质。
一个额外的差别是金属和非金属表面的区别(也被称为电解质和非电解质)。金属表面的反射和折射所基于的原则和上述一致,但折射光线全被吸收不考虑散射,这就意味着金属表面不考虑漫反射颜色只考虑高光。而非金属表面和上面的原则完全一致。正因为这种金属和非金属的差别,它们在PBR流程中会被区别对待。
反射和折射的区别也给予了我们另一个不同于能量守恒公式的结论:它们两个是相互排斥的。当光线反射时它永远不会被吸收能量,所以进入表面的能量就全部都是折射光线。
这样我们可以根据能量守恒公式首先计算高光部分,代表原光线能量被反射的部分,接着剩下的部分的能量直接用来计算折射,即漫反射部分|
通过这种方式,我们同时拥有了进入光线的反射值和折射值,同时也秉承了能量守恒原则。通过这种方式,让反射值和折射值超过1是不可能的,这确保了它们的能量值的和不会超过进入的光线的能量。
根据上面讲述的理论,我们可以得出一个名为渲染方程的工具,这个方程时目前模拟光照的最好的方法。基于物理的渲染使用的渲染方程的版本称为反射方程,下面给出反射方程:
我们将积分区域分为按w所在轴100等分,对每一份dW值,我们计算相应的辐射率,循环将值叠加得到辐照率的结果。
反射方程将半球 内照射到 点的入射光的辐射率叠加起来,经由 缩放,并返回从观察者方向的反射光辐射率 的总和。入射光辐射率可以来自光源或环境贴图。
方法代表BRDF方程,也就是双向反射分布方程,可以基于物体的材质属性缩放入射光的辐射率权重。
BRDF,即双向反射分布方程,将入射光方向,反射光方向,法线,表面粗糙度作为输入参数。BRDF近似描述了每个输入光对最后反射光的贡献,例如,一个类似镜面的表面,BRDF方程对几乎所有的输入光返回0值,除了与反射光方向 呈反射关系的输入光返回1值。
BRDF基于微表面模型近似模拟材质的反射和折射属性。为了让BRDF的结果物理上可信,它必须遵循能量守恒方程。技术上来说,Blinn-Phong其实是使用相同的 和 作为输入的BRDF,但由于Blinn-Phong并不遵守能量守恒定律,它也不是基于物理的模拟。目前存在许多不同种类的BRDF来基于物理模拟表面材质,对于实时渲染的PBR流程使用的是Cook-Torrance BRDF。
Cook-Torrance BRDF包含一个漫反射和一个高光部分:
这里我们使用Trowbridge-Reitz GGX:
几何函数描述的是每个微表面之间的相互遮挡关系:
菲涅尔等式描述了不同观察视角的反射光和折射光的比率。每个表面或材质都有一个基础反射率,对应垂直观察表面,从其它角度观察反射会更加明显。举个例子,看看周围的桌子,或木制,或金属制,从垂直方向观察的话会得到基础反射率的效果,如果近乎平行表面观察的方向观察表面,反射会非常明显。所有的表面从这种近乎平行的方向观察得到的强烈反射结果就是菲涅尔效应。
菲涅尔等式本身十分复杂,这里使用Fresnel-Schlick来近似模拟:
Fresnel-Schlick函数实现:
通过Cook-Torrance BRDF的每个组件,我们可以获得最终的反射方程:
这个反射方程完整的描述了一个PBR模型。
在实际工作中,往往使用各种贴图来控制PBR流程中的表面的参数,描述了平面中的某一点对光照的反应,即:这个点的金属度,粗糙度,平面如何应对不同波长的光。
下面是PBR流程中使用的几张贴图,并使用这几张贴图进行渲染输出:
最后,给出原文地址供参考: https://learnopengl.com/PBR/Theory
㈥ 计算机图形学(OPENGL):基础光照
本文同时发布在我的个人博客上: https://dragon_boy.gitee.io
光往往不来源于单一的光源,而是多个光源将光线散射到我们周围。光线可以散射和四处反射,这样会直接或间接影响物体的颜色。基于这种理论的算法是全局光照算法,但这里我们暂时将环境光模型考虑为单一的颜色,并降低它的光照强度来显得更为真实。比如我们在待渲染的立方体的片元着色器中这么定义:
运行程序之后,结果如下:
现在立方体有了一个基础的环境光颜色。
环境光照的细节并不丰富,但添加漫反射光照后,物体的颜色信息就丰富了起来。我们想象一束直射光线:
由于我们定义的是顶点,那么这里的法线就是顶点法线,可以通过与周围的顶点找出一个平面来计算该顶点处的顶点法线。由于立方体并不复杂,这里我们就简单地给出顶点的法线属性:
修改顶点着色器:
同时记得修改顶点属性指针。(灯光立方体我们不使用法线属性)
我们需要在片元着色器中定义灯光的位置:
接着在渲染循环中赋值:
接下来我们需要片元的位置,这个可以在顶点着色器中计算(通过将顶点的位置和model矩阵相乘):
接着需要在片元着色其中计算漫反射光照对颜色的影响,首先要输入FragPos;
接着标准化法线,并通过lightPos和FragPos相减来获得灯光的方向,并标准化:
之后计算灯光方向和法线的点积来获得漫反射光照的影响度,当然不能小于0,即光线和法线的角度不能大于90度,我们通过max函数来限制大小:
最后,我们可以在结果颜色中添加漫反射光照的影响了:
运行结果如下:
可以看到立方体的显示更为真实了。
之前我们将法线直接从顶点着色器传入了片元着色器,但由于片元着色器的光照计算在世界空间中,那么我们应该将model矩阵作用于法线来进行一些转换,但这里有一些问题。首先法线仅仅代表方向,并不代表确切的位置。其次,法线是三维向量,并没有w组件,所以model矩阵的平移将不会影响法线,也就是说我们要先舍弃model的第四个维度再与法线向量相乘。然后就是model矩阵中会包含非全局缩放,如果这样的话,法线与model矩阵相乘后将可能不再垂直于平面:
针对这些问题的解决方式是专门为法线定义model矩阵,做法是将原model矩阵的逆矩阵转置后降至3维:
注意,在着色器中计算逆矩阵开销很大,最好能后在CPU中计算好再送往着色器。
类似于漫反射光照,高光的计算基于光线的方向和片段的法线,其次,还要加入视线的方向。高光的实际计算和反射光线、视线方向有关:
我们通过光线的方向和法线计算反射光线的方向,接着与视线方向作点积来计算高光影响。视线方向通过摄像机位置和片段位置作减法运算得到。(我们这里选择在世界空间中计算高光,当然也可以在视图空间中计算高光,在视图空间中计算的好处是摄像机的位置即观察者的位置永远在原点。)
我们在片元着色器中添加观察位置:
并将摄像机的位置赋予这个变量:
接着定义一个控制高光强度的参数:
接着计算观察方向和反射光线方向(通过内建reflect函数计算):
reflect函数要求第一个参数指向片段,所以我们反向灯光方向。
接下来计算高光对颜色的影响:
pow方法中的32是反光度,用来控制高光的大小和范围:下面是一些不同反光度的效果:
可以看到反光度越高,高光越亮,同时高光的范围更小。
最后,我们加上高光的颜色影响:
运行结果如下:
㈦ 求《3D计算机图形学odf(原书第三版)》全文免费下载百度网盘资源,谢谢~
《3D计算机图形学odf(原书第三版)》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1__yJNprGQuh49h8dFwp11w
㈧ 计算机图形学(OPENGL):发光
本文同时发布在我的个人博客上: https://dragon_boy.gitee.io
从显示器上辨别一个光源是比较困难的,我们可以通过让光源发光来让光源突出。发光是一种后期处理效果,它在光源外围生成一圈模糊的光亮范围来模拟辉光效果。下面是一组对比例子:
HDR和发光技术可以很好的结合起来,不过人们常将HDR和发光技术混淆,但二者基于的规则是不同的。发光技术可以通过默认8bit的帧缓冲来实现效果,但HDR不行。不过HDR可以让发光更有效的实现。
为实现发光,我们先正常渲染场景,接着提取出场景的HDR颜色缓冲,以及一张只有亮的场景区域的图片。接着处理这张提取出来的亮度图片,进行模糊处理,并将结果附加到原来的HDR场景图片上。
实现过程如下。我们首先渲染一个包含4个光源的场景,这4个光源是带有颜色的立方体,亮度值在1.5到15.0之间,我们用HDR渲染这个场景,如下:
我们接着模糊这一纹理图片:
发光技术的第一步要求我们从场景中提取两张图片,我们可以使用不同的着色器渲染场景两次,将结果存储在不同的帧缓冲中。除此之外,我们也可以使用多重渲染目标(MRT),这允许我们配置片元着色器的多个输出,也就允许我们只渲染一次场景来提取两张不同的图片。我们可以在片元着色器的开头配置不同颜色缓冲的位置:
这一方式只有在我们有多个缓冲需要写入时有用。为了这一目的,我们需要将多个颜色缓冲对象绑定至当前的帧缓冲。我们可以为第一个颜色缓冲使用GL_COLOR_ATTACHMENT0附加项,第二个颜色缓冲使用GL_COLOR_ATTACHMENT1附加项:
接着,我们需要告知我们想要渲染至多个颜色缓冲,通过glDrawBuffers方法。OpenGL默认只渲染到帧缓冲的第一个颜色缓冲附加项,忽略其它的颜色缓冲附加项。我们可以将颜色附加项数组传入glDrawBuffers:
这样做的话,当使用一个帧缓冲渲染时,便会按照我们在片元着色器中的配置渲染到两个颜色缓冲。我们在片元着色器中进行颜色提取:
我们这里首先正常计算光照,并将颜色传到第一个位置的FragColor作为输出,接着我们使用这个FragColor来判断亮度是否超过一个特定的阈值,我们可以通过将其灰度化来判断(将片段颜色和我们给定的权重点积进行灰度化),如果亮度大于1.0(或其它阈值),我们就将片段颜色传入BrightColor中。
上述的过程也表明了发光和HDR渲染的配合,因为HDR允许颜色范围高于1.0,我们才可以设置一个高于LDR范围的阈值来进行亮度判断。
下面是两张提取出来的颜色图片:
接着我们处理右边这张图片,我们这里使用高斯模糊。
高斯模糊基于高斯曲线:
由于高斯曲线中间的值高,两边的值低,且曲线的渐变比较平滑,所以可以用来进行比较自然的模糊。比如我们对一个像素片段使用包括其在内的32*32放格进行模糊,离中心像素片段的距离越远,权重越小,这就是高斯模糊。
高斯模糊的步骤是分离两个维度,其中一个代表水平的权重,另一个代表垂直的权重。我们首先对水平方向的片段进行权重分布,接着对结果的垂直方向进行权重分布,这一过程又称为两步高斯模糊,流程图如下:
接着我们创建两个帧缓冲,每个拥有一个颜色缓冲纹理:
接着在我们获得HDR场景和亮度图后,我们首先用亮度图纹理填充其中一个帧缓冲,接着模糊10次,水平5次,竖直5次。
在每一次循环中,我们根据要模糊水平方向的纹理还是竖直方向的纹理来绑定两个之中的一个帧缓冲,并将另一个帧缓冲的颜色缓冲作为纹理去模糊。
最后,模糊5次的结果:
最后,我们要将这张模糊的图片叠加到原来的HDR图片上。
在最后的渲染中,我们在片元着色器中如下设置:
注意我们在色调映射前将发光结果混合进来,以保证细节可以比较好的传递至LDR范围。最后的叠加效果如下:
㈨ 《计算机图形学教程第三版》pdf下载在线阅读全文,求百度网盘云资源
《计算机图形学教程第三版》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1N7znxK2CdBrExSQsezBT3A
㈩ 《计算机图形学基础教程VisualC++版第四版》pdf下载在线阅读全文,求百度网盘云资源
《计算机图形学基础教程VisualC++版第四版》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1HfkyTeiuyobNWSwFcEYirQ