自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 问答 (1)
  • 收藏
  • 关注

转载 OpenGL着色器程序解析--曲面细分基础

转载自:https://blog.csdn.net/cordova/article/details/80899013背景曲面细分技术是OpenGL 4.x加入的一个令人振奋的新特性。曲面细分处理的核心是3d模型的细节和多边形数量等静态属性,例如当我们观察一个复杂的模型,像人的脸部,当靠近看时我们应该使用一个高度精细的模型来展示小的细节(例如皮肤表面的小突起等)。而高度精细的模型意味着需要更多的三角...

2018-07-06 21:51:14 3883

转载 OpenGL着色器程序解析--3D拾取

转载自:https://blog.csdn.net/cordova/article/details/79564134背景3D拾取指的是将鼠标在屏幕上点击的位置匹配到3d游戏场景中的某个图元上,该图元投影到屏幕上的像素恰好就是鼠标点击的像素。3D场景在很多交互情境中有重要作用,使开发者的应用能够将用户的点击对应到场景空间中的物体上。例如:用户可以通过点击选中某个物体或者物体的某一部分进行删除等后续操...

2018-07-04 21:51:38 847

转载 OpenGL着色器程序解析--Transform Feedback粒子系统

转载自:https://blog.csdn.net/cordova/article/details/75675342背景粒子系统是一种模拟像烟雾、灰尘、火焰、雨等自然现象的技术统称。这些自然现象的共性是它们都是由大量的小粒子组成的,并按照不同现象的特性进行特定形态的整体运动。为了模拟由大量粒子组成的自然现象,我们通常要维护每个粒子的位置信息和其他一些属性(例如速度、颜色等等),并且在每一帧要进行下...

2018-07-02 15:34:19 945

转载 OpenGL着色器程序解析--公告牌技术与几何着色器

转载自:https://blog.csdn.net/cordova/article/details/71056784背景从最初的一系列教程我们已经应用过了顶点着色器和片段着色器,但事实上我们还忽略了一个非常重要的着色阶段,叫做几何着色器(GS)。几何着色器在微软的DirectX 10之后被引入,之后也加入到了核心的OpenGL 3.2中。顶点着色器中是按照顶点一个一个执行的,片段着色器则是一个像素...

2018-07-02 12:56:07 594

转载 OpenGL着色器程序解析--法线贴图

转载自:https://blog.csdn.net/cordova/article/details/68962552背景之前的我们的光线着色器类已经可以达到很不错的效果了,光线效果通过插值计算遍布到整个模型表面,使整个场景看上去比较真实,但这个效果还可以进行更好的优化。事实上,有时插值计算反而会影响场景的真实性,尤其是用材质来表现一些凹凸不平的纹理的时候,插值会让模型表面看上去太平坦了,例如下图的...

2018-07-02 12:50:34 848

转载 OpenGL着色器程序解析--

转载自:https://blog.csdn.net/cordova/article/details/54646519背景天空盒子是一种让场景看上去更广阔无垠的一种视觉技术,用无缝对接的封闭纹理将摄像机的视口360度无死角的包裹起来。封闭纹理通常是天空纹理和地形纹理(山脉、高楼大厦等)组合而成,当玩家在周围环境中探索的时候,视角中除了真实模型的其他空余部分被封闭纹理所完全填充充当背景。下面是一张‘半...

2018-07-02 12:17:06 300

转载 OpenGL着色器程序解析--阴影图技术2

转载自:https://blog.csdn.net/cordova/article/details/54092090背景在之前的教程中,我们学习了阴影图技术背后的基本原理,并学习了如何在纹理中渲染深度信息并通过从深度缓冲中采样将其显示在屏幕上。这个教程我们将利用这些技术将阴影本身显示在屏幕上制作我们真正想要的阴影效果。我们已经知道阴影图是一个有两个pass通道的技术(二次渲染),第一个pass通道...

2018-06-21 16:26:43 454

转载 OpenGL着色器程序解析--阴影图技术1

转载自:https://blog.csdn.net/cordova/article/details/53785032背景阴影和光是紧密联系的,正如你需要光才能投射出阴影。有许多的技术可以生成阴影,在接下来的两个章节中我们将学习一种基础而简单的技术-阴影图。当涉及到光栅化和阴影的问题时,你可能会问这个像素是否位于阴影中?或者说,从光源到像素的路径是否通过其他物体?如果是,这个像素可能位于阴影中(假定...

2018-06-21 16:08:01 657

转载 OpenGL着色器程序解析--OpenGL使用Assimp库导入3d模型

转载自:https://blog.csdn.net/cordova/article/details/53350395背景通过之前的学习我们实现了很多不错的效果,但是我们并不能手能创建复杂的模型,可以想象通过代码来定义物体的每个顶点位置和其他属性是不可行的。一个盒子,金字塔或者简单的表面贴图还好说,但如果是立体的人脸怎么办?事实上在游戏中,在一些商业的游戏应用中模型的网格是由美工艺术家使用一些建模软...

2018-06-21 15:45:59 1224

转载 OpenGL着色器程序解析--聚光灯光源

背景聚光灯光源是目前这里要介绍的第三种也是最后一种光源类型了,它比平行光和点光源要复杂,但聚光灯光源其实是具有平行光和点光源核心特征的一种特殊光源。聚光灯光源也会随着距离衰减,但它不是像点光源照向四面八方的而是像平行光那样有一个聚光方向(相当于取点光源的一个锥形的一小部分),聚光灯光源呈锥形,因此有一个新的属性,就是离光源越远,照亮的圆形区域会越大(光源位于锥形体的尖端)。聚光灯光源,顾名思义,对...

2018-06-20 18:31:44 1013

转载 OpenGL着色器程序解析--点光源

背景之前已经学习了三个基本的光照模型(环境光,漫射光和镜面反射光),这三种模型都是基于平行光的。平行光只是通过一个向量来表示,没有光源起点,因此它不会随着距离的增大而衰减(实际上没有起点根本无法定义光源和某个物体的距离)。现在我们再来看点光源类型,它有光源起点而且有衰减效果,距离光源越远光线越弱。点光源的经典例子是灯泡,灯泡在屋子里可能效果不明显,但是拿到室外就会明显看出它的衰减效果了。注意之前平...

2018-06-20 18:24:29 1004

转载 OpenGL着色器程序解析--镜面反射光

背景我们在计算环境光的时候,光的强度是唯一的影响因素。然后处理漫射光的时候公式中加入了光的方向参数。镜面反射包含了上面所有的综合因素并且添加了一个新的元素:观察者的位置。镜面反射时光以一定角度照射到物体表面,同时会在法线的另一侧对称的角度上反射出去,如果观察者刚好在反射光线的路径上那么就会看到格外强烈的光线。镜面反射最终的结果是物体在从某个角度看上去会十分明亮,而移动开后这个光亮又会消失。现实中好...

2018-06-20 15:38:57 1884

转载 OpenGL着色器程序解析--漫射光

转载自:https://blog.csdn.net/cordova/article/details/52926057背景漫射光和环境光的主要不同是漫射光的特性依赖光线的方向,而环境光完全忽略光的方向。当只有环境光时整个场景是被均匀照亮的,而漫射光使物体朝向它的那一面比其他背向光的面要更亮。漫射光还增加了一个光强度的变化现象,光的强度大小还取决于光线和物体表面的角度,这个概念可以在下图看出:假想两边...

2018-05-30 15:21:51 294

转载 OpenGL着色器程序解析--环境光

转载自:https://blog.csdn.net/cordova/article/details/52878110背景光照是是3D图形领域中一个最重要的对象之一。光照模型对于场景的渲染很重要,可以增添很多真实性效果。之所以叫做‘光照模型’是因为你不能去准确的去模拟现实世界的光照过程,因为现实中的光照是由大量的叫做‘光子’的粒子组成,并且同时有波动性和离子性(光的波粒二象性)。如果要在程序中对每一...

2018-05-28 19:48:26 525

转载 OpenGL着色器程序解析--纹理贴图

背景纹理贴图意思是将任意类型的图片贴在3d模型的一个或者多个面上。图片可以是任意的但通常是一种通用的样式,比如:砖块、植物、荒芜的土地等等,可以提高场景的真实性。比较下面两幅图片: 为了实现纹理贴图我们需要做三件事:将一张贴图加载到OpenGL中,提供纹理坐标和顶点(将纹理对应匹配到顶点上),并使用纹理坐标从纹理中进行取样操作取得像素颜色。由于三角形会被缩放、旋转、平移变换导致最后会以不同的结果投...

2018-05-10 15:20:27 4999

转载 OpenGL着色器程序解析--相机控制2(鼠标事件)

转载自:https://blog.csdn.net/cordova/article/details/52769741背景在这个教程我们将实现鼠标控制相机的方向,从而完成所有有关相机的部分。对于相机的设计有很多不同程度的自由度设置,我们要完成的是能够实现第一人称视角游戏(设计游戏等等),也就是说要能够使相机围绕Y轴正向360度旋转,对应的效果就是角色能够左右转动身体一整圈。另外,还要能够让相机镜头上...

2018-05-10 12:08:35 413

转载 OpenGL着色器程序解析--相机控制1(键盘事件)

转载自:https://blog.csdn.net/cordova/article/details/52664767背景在之前的教程中我们学习了如何将相机至于3d世界的任意一个位置,下一步就要实现让用户来控制它。移动应该是不受限制的:用户可以在任何方向上移动。相机的控制通过两种输入设备来实现:使用键盘控制位置的移动,使用鼠标来改变目标视角,这个和第一人称射击角色类似。这篇教程介绍键盘的控制,鼠标的...

2018-05-09 20:24:20 450 1

转载 OpenGL着色器程序解析--相机空间

转载至:https://blog.csdn.net/cordova/article/details/52650125背景在之前的几个教程我们已经学习了两种变换。第一种是基本变换,用来改变物体的位置(平移变换)、方向(旋转变换)、尺寸(缩放变换),可以将物体至于3d世界任意位置;第二种变换是透视投影变换用于将3d世界的一个顶点位置投射到2d世界(比如:一个平面),一旦坐标置于2d那么就很容易将他们映...

2018-05-09 19:27:15 591

转载 OpenGL着色器程序解析--透视投影

转载自:https://blog.csdn.net/cordova/article/details/52599161背景总算到了如何实现最优化显示3d图形的阶段了:在保留物体深度立体感的前提下将3d世界的物体投影到2d平面上。一个很典型的例子就是3d世界中往远方延伸的公路,2d屏幕上看上去会越来越窄最后在很远的地平线上交汇成了一个点。我们现在要创建一种满足上面要求的一种投影变换方式,同时我们还想对...

2018-05-08 20:17:57 501

转载 OpenGL着色器程序解析--复合变换

转载自:https://blog.csdn.net/cordova/article/details/52571920注:这个教程要添加更多的头文件了,基本上全了,其中用到了AntTweakBar这个库,安装很简单,和之前其他插件一样,去官网下载资源包,里面lib文件夹内已经有了编译好的dll和lib库,也可以运行vs项目自己重新编译。 将lib文件夹里面的dll文件复制到Windows/Syste...

2018-05-07 20:06:45 279

转载 OpenGL着色器程序解析--索引绘制

转载自:https://blog.csdn.net/cordova/article/details/52564074背景OpenGL提供了几个绘制函数,其中我们之前使用的glDrawArrays()属于顺序绘制的一个函数。顺序绘制是从指定的偏移量依次扫描顶点缓冲区所有图元的每一个顶点,这样很简单易用,但是缺点是如果一个顶点是多个图元的共同顶点,那么这个顶点将会在顶点缓冲区出现多次,也就是没有顶点共...

2018-05-07 17:17:18 244

转载 OpenGL着色器程序解析--插值

转载自:https://blog.csdn.net/cordova/article/details/52562663背景这个教程将介绍3d渲染管线中非常重要的一个部分:光栅器对从顶点着色器传来的变量的插值。通过之前的学习我们知道,为了让一些有意义东西在屏幕上真正显示,你必须将顶点着色器vs的输出变量设置为‘gl_Position’,gl_Position是一个保存着顶点齐次坐标的4维向量。XYZ分...

2018-05-07 14:58:55 1671

转载 OpenGL着色器程序解析--缩放变换

转载至:https://blog.csdn.net/cordova/article/details/52558804背景缩放变换非常简单,它的目的是增大或者缩小物体的尺寸。比如你想使用同一个模型来制作很多不同的物体(大小不一的树组成的树林,用的同一个模型),或者你想按照比例让物体和现实世界尺寸一致。在上面的情形中你就需要在三个坐标轴上同等缩放顶点的位置。当然,有时也希望物体只在一个轴上或者两个轴上...

2018-05-07 14:39:12 471

转载 OpenGL着色器程序解析--旋转变换

转载至:https://blog.csdn.net/cordova/article/details/52558133背景继上个教程的平移变换之后,这里开始学习旋转变换,也就是能够实现让一个点沿着一个坐标轴旋转一定的角度。旋转变换将总是改变位置的其中两个坐标,第三个坐标保持不变,这意味着旋转的路径会保持在其中一个平面上:XY平面(绕Z轴旋转),YZ平面(绕X轴旋转)和XZ平面(绕Y轴旋转)。也有一些...

2018-05-07 14:35:16 669

转载 OpenGL着色器程序解析--平移变换

转载至:https://blog.csdn.net/cordova/article/details/52541902背景从这个教程开始我们开始研究各种各样的图形变换,图形变换就可以让一个3d物体在屏幕中变换的的时候看上去保持有深度的错觉,也就是立体的投影效果。实现立体效果的方法是使用一个经过多次相乘的变换矩阵得到的最终变换矩阵来和顶点的位置再相乘,这样得到3d物体的一个多次变换后的最终复合变换效果...

2018-05-07 11:26:38 558

原创 OpenGL着色器程序解析--一致变量Uniform Variables

转载至:https://blog.csdn.net/cordova/article/details/52504118背景在这个教程中我们将遇到一个新的shader变量:一致变量(Uniform Variables)。一致变量和普通属性的区别:普通变量所包含的数据是顶点具体化的,所以在每个着色器引入的时候它们将从顶点缓冲区加载一个新的值;但是一致变量的值在整个draw call中保持不变。这意味着你...

2018-05-05 15:03:31 765

转载 OpenGL着色器程序解析--着色器

转载至:https://blog.csdn.net/cordova/article/details/52495077背景:从这篇教程开始,我们将使用shader着色器来实现每一个效果和技术点,着色器是目前做3D图形最流行的方式。在某种程度上着色器功能是一个“退步”,或者说技术实现上的一个回退,因为本来多数固定功能管线自身就提供的那些3D功能(开发者只需要定义配置参数即可实现的功能函数)现在开发者必...

2018-05-05 13:00:26 1396

转载 OpenGL着色器程序解析--第一个三角形

转载至:https://blog.csdn.net/cordova/article/details/52494549背景这篇教程非常简短,我们只是扩展前一个教程来渲染一个三角形。 这篇教程中我们依然使用那个单位化的盒子模型。可见的点必须在这个盒子内,这样他们将可以通过视窗的变换映射到窗口中可见的坐标上。当俯视Z坐标轴的负方向时这个单位化盒子看上去如下图:点(-1.0, -1.0)映射到盒子的左下角...

2018-05-05 10:56:38 1080

转载 OpenGL着色器程序解析--hello 顶点

转载自:https://blog.csdn.net/cordova/article/details/52491762背景这里要第一次开始使用GLEW(the OpenGL Extension Wrangler Library)库。GLEW可以帮助我们解决一些伴随OpenGL扩展库管理出现的一些头疼的问题,初始化之后,它会检索你平台中所有可用的扩展库,动态的加载并且可以通过简单引用一个头文件来使用。...

2018-05-03 13:27:41 1762

原创 OpenGL着色器程序解析--打开一个窗口

#include <GL/freeglut.h>static void RenderSceneCB(){ glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers();}static void InitializeGlutCallbacks(){ glutDisplayFunc(RenderSceneCB);}...

2018-05-03 13:22:27 227

原创 OpenGL着色器程序解析--从新开始

经过一段时间的学习,我发现学习openGL着色器编程太容易遇到不靠谱的教程,因此后面我决定还是系统学习ogldev,这是一套完备的着色器编程教程,并且已经有很专业的中文翻译,因此,后面我主要是直接搬用前辈的学习资料,并在这个基础上想办法让它最大化地适合初学者。下面是一些相关链接:ogldev官网:http://ogldev.atspace.co.uk/中文版:https://blog.csdn.n...

2018-05-03 13:16:42 191

原创 OpenGL着色器程序解析--keypress

该程序示范了如何写键盘响应函数。////////////////////////////////////////////////////////////////////////////////// Triangles.cpp////////////////////////////////////////////////////////////////////////////////#in

2017-12-10 15:34:16 357

原创 OpenGL着色器程序解析--着色器基础

部分内容来源于https://yq.aliyun.com/articles/212816?spm=5176.100239.blogcont212814.16.7FHthK 现代OpenGL渲染管线严重依赖着色器来处理传入的数据。如果不使用着色器,那么用OpenGL可以做到的事情可能只有清除窗口内容了,可见着色器对于OpenGL的重要性。在OpenGL 3.0版本以前(含该版本),或者如果你用到了兼

2017-12-07 14:51:26 291

原创 OpenGL着色器程序解析--初识着色器

OpenGL的版本已经从1994年的1.0版本发展到了现在的4.6版本,OpenGL早已发生了质的变迁,我们现在抛开以前的固定管线来谈谈渲染管线,即着色器的使用。 在这里我们使用的代码都来自于《OpenGL编程指南(第八版)》,由于网络上各种资源已经非常丰富(源码http://www.opengl-redbook.com/,教材https://yq.aliyun.com/articles/212

2017-12-05 14:30:32 451

原创 OpenGL从1.0开始--GLUT菜单

我们现在来学习如何利用GLUT添加弹出式菜单,直接看示例:#include <Gl/glut.h>#include <stdio.h>const GLint pickBuffsize = 32;GLsizei winWidth = 400, winHeight = 400;GLfloat red = 1.0, green = 1.0, blue = 1.0;GLenum fillMode

2017-11-28 20:34:53 1329

原创 OpenGL从1.0开始--拾取操作

基本上,拾取操作是通过一个修正观察体来实现的,而这个观察体根据一个指定的拾取窗口形成。我们队一个场景内的对象用整数进行标识。所有与观察体相交的对象的标识符都保存在一个拾取缓冲区数组中。因此,为了使用OpenGL的拾取功能,我们必须在程序中包含以下过程: 1.创建并显示一个场景 2.拾取一个屏幕位置,并且在鼠标回调函数内部进行如下操作: 设置一个拾取缓冲区 激活拾取

2017-11-28 17:31:04 1194

原创 OpenGL从1.0开始--交互式输入设备函数

在OpenGL程序中,交互设备输入有GLUT中的子程序处理,GLUT有从标准输入设备(包括鼠标、键盘、数据板、空间球、按钮盒和拨号盘)接受输入的函数。我们来看一个示例。#include <Gl/glut.h>GLsizei winWidth = 400, winHeight = 300;void init(){ glClearColor(0.0,0.0,1.0, 1.0); g

2017-11-28 14:42:00 1036

原创 OpenGL从1.0开始--纹理与表面细节

要让绘制对象更加逼真,除了需要添加光照外,另一个重要的因素就是纹理了。,我们先看一个简单的示例。 #include <Gl/glut.h>void init(){ glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 200.0, 0.0, 150.0);}voi

2017-11-27 20:51:44 544

原创 OpenGL从1.0开始--光照和表面绘制函数

对场景的对象进行透视投影,然后再可见面上产生自然光照效果,可以实现场景的真实感显示。多说无益,看一个示例是最直接的方法(示例代码来源于http://blog.csdn.net/timidsmile/article/details/7017197)。 #include <gl/glut.h> #define WIDTH 400 #define HEIGHT 400 static GLfl

2017-11-27 16:05:29 984

原创 OpenGL从1.0开始--绘制二次曲面

类似规则多面体,GLUT可以绘制球面或其他三维的二次曲面对象,甚至能绘制一个茶壶。同样的这些函数分为两个版本:一个生产线框图,一个把曲面显示为一组填充多边形面片。这两个版本都是将曲面细分成小平面以逼近二次曲面。 主要代码和上一篇相同,我们来看看核心代码段。glutWireSphere(r,nLongitudes,nLatitudes);//球面线框图,参数分别为半径,经纬度数目glutSolid

2017-11-22 20:18:54 1023 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除