Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

OpenGL超级宝典学习笔记——变换

OpenGL超级宝典学习笔记——变换

变换包括:旋转,平移,缩放扭曲,投影。在指定了顶点之后,在屏幕上显示顶点之前,会进行三种变换:视图变换,模型变换,投影变换。术语如下表:变换类型用途视图(Viewing)指定观察者和照相机的位置模型(Modeling)场景中的物体变换模型视图(ModelView)描述视图和模型变换的对偶性投影(Projection)改变可视区域的大小和形状视口(Viewport)一种伪变换,对窗口的最终输出进行缩放视点坐标视点坐标是观察者的视角,与发生的变换无关。视点坐标...
OpenGL超级宝典学习笔记——操作矩阵

OpenGL超级宝典学习笔记——操作矩阵

为了更强大的功能和灵活性,我们有时需要直接操作矩阵。在OpenGL中4x4的矩阵用包含16个浮点数值的一维数组来表示,而不是用二维的4x4的数组来表示。OpenGL之所以这么做,因为使用一维数组更高效。当然OpenGL也支持二维数组的表示方式。而且要特别注意的是在矩阵中是使用列主序遍历数组的,即按列逐个遍历数组中的元素。事实上,这个矩阵里的16个值代表着空间中的一个特定的位置和三个轴的朝向(相对于视点坐标系)。前3列是方向向量分别代表着3个轴的朝向(绝大多...
OpenGL超级宝典学习笔记——颜色

OpenGL超级宝典学习笔记——颜色

什么是颜色颜色只是某种波长的光。现实中我们看到几乎都是由许多不同类型的光组合而成的。波长是光波相邻的波峰或相邻的波谷之间的距离。人肉眼可见的光波的波长位于390nm(紫色光)到720nm(红色光)之间。紫外线和红外线都是人肉眼不可见的光。事实上白色和黑色并不是一种颜色。黑色是没有颜色,因为可见光都被材料吸收了。而白色则是材料均匀的反射各种波长的光。光即是波也是粒子(波粒二象性)。人之所以看到颜色,是因为光子刺激视网膜上数以百万计的锥细胞,导致神经能量传递到...
OpenGL超级宝典笔记——现实中的颜色与材料

OpenGL超级宝典笔记——现实中的颜色与材料

现实中的颜色如下图:我们为物体构造好了模型,也为每个平面设置了颜色值,但最终画出来的物体却一点都不像真实世界中的物体。在真实世界中物体的表面最终呈现的颜色还取决于你观察它的角度以及光源。OpenGL提供了近似于真实世界的光照环境。在OpenGl中物体会被三种光照射:环境光,漫放射光,镜面光。通过调整这三种光源的属性,我们可以使得物体看起来更真实。环境光环境光没有特定的方向。环境光的光线充满着整个场景。场景中的物体都被环境光从各个方向照射着。环境光的特点是:...
OpenGL超级宝典学习笔记——光照参数与材料属性

OpenGL超级宝典学习笔记——光照参数与材料属性

添加光照glEnable(GL_LIGHTING);这个函数调用告诉OpenGL使用材料属性和光照参数去决定每个顶点的颜色值。如果没有开启这个函数,则看到的物体是昏暗的。开启光照后会根据你的材料属性和光照参数计算顶点的颜色值。下图对比未开启光照和开启光照的效果。(未开启光照)(开启光照)设置全局环境光OpenGL提供了一种全局的环境光。这种光是一种向所有方向均匀发射的光源。它可以照明没有被光源直接照射的物体的背面。在OpenGL中通过glLightMode...
OpenGL超级宝典学习笔记——使用光源

OpenGL超级宝典学习笔记——使用光源

使用光源要模拟真实世界,仅有环境光是不够的,需要指定更多的光源来提升真实感。OpenGL至少提供8种光源,可以在场景中的任意位置甚至是可视区域之外。你可以指定光源位于无限远处以获得平行光束,或者光源位于近处向外发射光束。还可以制造出聚光灯的效果。选择哪种方式?你可以指定一个光源位于哪里朝哪个方向发射光线。通常光源朝所有方向发射光线,但也可以为它指定方向。在指定的方向的光源环境下,并非每个多边形都需要被照射到。我们可以制造物体的阴影效果。OpenGL可以计算...
OpenGL超级宝典学习笔记——镜面光与法线平均

OpenGL超级宝典学习笔记——镜面光与法线平均

光照效果仅仅使用环境光和漫反射光的光照效果,喷气式飞机表面的颜色看起来比较平淡。在渲染木材,泥土,布料,纸箱上等这些表面粗糙的物体上,使用环境光和漫反射光的光照效果就基本足够了。但是在为光滑的金属物体建模时,为了使其显得更加逼真,仅仅使用环境光和漫反射光是不够的,还需要镜面光的效果。镜面亮点镜面光照和材料属性可以为物体表面添加光泽和亮斑的效果。当入射光与观察者的角度较小时,可以看到镜面加亮的效果。镜面亮点就是几乎所有的光照射在物体表面上并被反射开来。添加镜...
OpenGL超级宝典学习笔记——阴影

OpenGL超级宝典学习笔记——阴影

阴影影(又称影子、背影),光线被不透明物体阻档而产生的黑暗范围,与光源的方向相反。影的横切面是二维轮廓、阻档光线物体的倒转投影。影的大小、形状随光线的入射角而改变。(维基百科)在场景中添加阴影可以使得场景更加逼真。下面两幅图是有无阴影效果的对比:如何制造阴影?简单地做法,我们可以通过把源物体压平在物体表面所处的平面上,来制造阴影效果。然后被压平的物体用黑色或深色进行绘制。通过操作高级矩阵的方式,来把物体压平到其他表面上。被压平的效果我们需要压平的模型视图投...
OpenGL超级宝典学习笔记——混合

OpenGL超级宝典学习笔记——混合

混合在正常情况下,OpenGL渲染时会把颜色值输入到颜色缓冲区中,深度值输入到深度缓冲区中。如果我们关闭深度测试,那么新的颜色值会简单地覆盖已经存在于颜色缓冲区中的值。当开启深度测试时,颜色段只有在通过深度测试时,才会覆盖已经存在于颜色缓冲区中的值。在这两种情况下,在渲染时颜色值要么完全被废弃,要么就直接覆盖旧的颜色值。现在介绍一种新的方式,混合。glEnable(GL_BLEND);当开启混合时,输入的颜色值将会和已经存在于颜色缓冲区中的颜色进行组合。至...
OpenGL超级宝典学习笔记——反走样

OpenGL超级宝典学习笔记——反走样

反走样OpenGL的混合还可以用于反走样。在绝大多数情况下,一个渲染片段映射到屏幕上的一个像素。在屏幕上的像素是一个小方格。被着色的像素和未被着色的像素区分非常地明显。在这种情况下,可能会产生锯齿。锯齿是计算机生成图像的严重缺陷,使得图像看起来不自然。(没有开启反走样)(开启了反走样)为了消除图元的锯齿,OpenGL使用混合把像素的目标颜色与周边像素的颜色进行混合。在图元的边缘上,像素的颜色会稍微延伸到相邻的像素上。开启反走样,首先要开启alpha混合。g...
OpenGL超级宝典学习笔记——雾

OpenGL超级宝典学习笔记——雾

应用雾雾是OpenGL支持的一种易于使用的特殊效果。在使用雾时,OpenGL把雾的颜色与完成所有其他颜色计算的几何图元进行混合。雾与几何图元的混合程度取决于几何图元离观察者的距离。雾可以使物体逐渐模糊最终消失在雾色里(就像在雾中远去的父亲的背影)。在SetupRC函数中开启雾化效果。glClearColor(fLowLight[0],fLowLight[1],fLowLight[2],fLowLight[3]);glEnable(GL_FOG);glFog...
OpenGL超级宝典学习笔记——累积缓冲区与其他颜色操作

OpenGL超级宝典学习笔记——累积缓冲区与其他颜色操作

累积缓冲区OpenGL除了颜色缓冲区、深度缓冲区、模板缓冲区之外,还有累积缓冲区。累积缓冲区允许你把渲染到颜色缓冲区的值,拷贝到累积缓冲区。在多次拷贝操作到累积缓冲区时,可以用不同方式的把颜色缓冲区内容和当前累积缓冲区的内容进行重复混合。当在累积缓冲区完成一幅图像之后,可以拷回颜色缓冲区,然后通过SwapBuffers显示到屏幕上。累积缓冲区的操作通过void glAccum(GLenum op, GLfloat value);控制。第一个参数表示对累积缓...
OpenGL超级宝典学习笔记——位图

OpenGL超级宝典学习笔记——位图

位图最初的电子计算机,只能显示单色(绿色或琥珀色)图形,每一个像素只有两种状态打开和关闭。在计算器图形学前期,图像数据是用位图来表示的,位图就是一系列的0和1,表示打开或关闭的像素值。下图就是用位图表示的一匹马:下图是同一匹马的灰度图,在这个像素图中有256种不同强度的灰度级。位图这个术语也常应用于包含灰度级和全彩色的图像数据,特别是在Windows平台上有相应的位图格式.BMP文件。严格地讲,这是对位图这个术语的误用。在此处(正确地说),位图是只有打开和...
OpenGL超级宝典学习笔记——像素图

OpenGL超级宝典学习笔记——像素图

像素包装位图和像素图很少会被紧密包装到内存中。在许多硬件平台上,考虑到性能的原因位图和像素图的每一行的数据会从特殊的字节对齐地址开始。绝大多数编译器会自动把变量和缓冲区放置在当前计算机架构优化的对齐地址上。OpenGL默认是4字节对齐的。在之前的例子中,篝火图的数据是紧密包装在一起的,但这不会引起什么问题,因为篝火图刚好是按照4字节对齐的,其宽是32位即4字节。如果位图是34位宽的话,为了按照4字节对齐我们需要为每一行的数据多添加额外的30位(凑齐64位)...
OpenGL超级宝典学习笔记——纹理映射(一)

OpenGL超级宝典学习笔记——纹理映射(一)

纹理映射,是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。纹理映射是真实感图像制作的一个重要部分,运用它可以方便的制作出极具真实感的图形而不必花过多时间来考虑物体的表面细节。然而纹理加载的过程可能会影响程序运行速度,当纹理图像非常大时,这种情况尤为明显。如何妥善的管理纹理,减少不必要的开销,是系统优化时必须考虑的一个问题。其中OpenGL提供了纹理对象对象管理技术来解决上述问题。与显示列表一样,纹理对象通过一个单独的数字来标识。这允许OpenGL硬件...
OpenGL超级宝典学习笔记——纹理映射Mipmap

OpenGL超级宝典学习笔记——纹理映射Mipmap

MipmappingMipmap是一个功能强大的纹理技术,它可以提高渲染的性能以及提升场景的视觉质量。它可以用来解决使用一般的纹理贴图会出现的两个常见的问题:闪烁,当屏幕上被渲染物体的表面与它所应用的纹理图像相比显得非常小时,就会出现闪烁。尤其当相机和物体在移动的时候,这种负面效果更容易被看到。性能问题。加载了大量的纹理数据之后,还要对其进行过滤处理(缩小),在屏幕上显示的只是一小部分。纹理越大,所造成的性能影响就越大。Mipmap就可以解决上面那两个问题...
OpenGL超级宝典学习笔记——纹理高级(一)

OpenGL超级宝典学习笔记——纹理高级(一)

辅助颜色一般情况下,我们设置纹理的环境为GL_MODULATE模式,在这种情况下,受到光照的几何图形会和纹理的颜色进行结合。正常情况下,OpenGL进行光照计算,并根据标准的光照模型进行单个片段的颜色计算。然后,再把片段的颜色乘以纹理的颜色,等到结合后的颜色。但是这样的话会削弱图形的光照效果。因为经过光照计算过后的片段的颜色值最大值是1.0(即最亮的颜色),任何值乘以小于1.0的值,必定小于其本身(即不可能比原来更亮)。(if y <= 1.0 th...
OpenGL超级宝典学习笔记——纹理高级(二)

OpenGL超级宝典学习笔记——纹理高级(二)

立方体贴图还有两种纹理生成模式未介绍,GL_REFLECTION_MAP和GL_NORMAL_MAP,这两种模式需要用到新的纹理目标:立方体贴图。一个立方体贴图被当做一个纹理来看待,它由六个正方形的2D图像(必须是正方形)来组成立方体的六个面。下图展示了cubemap示例的立方体的六个面:这六个面分别是-X,+X,-Y,+Y,-Z,+Z.然后我们使用GL_REFLECTION_MAP的模式来生成纹理,能够制造一个真实的表面的倒影。加载立方体贴图立方体贴图有...
<< 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 >>