
opengl学习
Estelle_Z
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenGL渲染管线
渲染的过程主要包括顶点变换、裁剪、投影和光栅化,光栅化分为消隐、光照计算、纹理映射和颜色融合。原创 2019-05-05 16:04:42 · 1256 阅读 · 0 评论 -
OpenGL学习之光照中的材质
本文参考LearnOpenGL CN在现实世界中,每个物体会对光产生不同的反应。比如:钢看起来通常会比陶瓷瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。每个梧桐对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射,因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OPenGL中模拟多种类型的物体,我们必须为每个物体分别定义一...原创 2019-06-02 09:16:20 · 415 阅读 · 0 评论 -
OpenGL学习之光照贴图
在上一节中,我们提到不同的物体对光有不同的反应,实际上同一物体的部分往往不是同一种材料构成的,比如汽车的车身喷漆之后往往很光亮,车窗会部分反射周围的环境,而轮胎的橡胶部分则比较暗淡。为了更好的模拟现实中的物体接受光照效果,我们应该为物体的不同部分指定不同的材质属性,而不是整个物体共用一个材质。不同的部分对应不同的材质,这有点类似于根据纹理坐标获取不同的纹素,我们采用与纹理坐标类似的light ...原创 2019-06-03 11:49:53 · 420 阅读 · 0 评论 -
OpenGL学习之着色器详解
OpenGL着色器语言(GLSL)看上去很像C语言,它由OpenGL实现进行编译和连接,并且(经常是)完全在图形硬件中运行。我们有顶点着色器、片段着色器和几何着色器,前两种是必需的,后一种是可选的。有三种向顶点着色器传递数据的方式:(1)参数,是对每个顶点而言;(2)统一值,是针对整个顶点数据批次的常量(所以是一致的)(3)加载和使用纹理数据可以为片段着色器设置统一值和纹理数据...原创 2019-06-23 09:32:03 · 2859 阅读 · 0 评论 -
OpenGL学习之缓冲区对象
缓冲区对象是一个强大的概念,它允许应用程序迅速方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对象。缓冲区:缓冲区有很多不同的用途,它们能够保存顶点数据、像素数据、纹理数据、着色器处理的输入,或者不同阶段着色器阶段的输出。缓冲区保存在GPU内存中,它们提供高速和高效的访问。在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU中存储数据。另外,在GPU...原创 2019-06-24 14:14:08 · 2210 阅读 · 2 评论 -
OpenGL中顶点着色器(vertex shader)和片元着色器(fragment shader)间的数据流
VS和FS之间色数据流VS的输入:针对顶点的属性、一致性变量(uniform)VS的输出:针对顶点的数据FS的输入:针对片元的属性、一致型变量(uniform)FS的输出:gl_FragColor;gl_FragDepth...VS:对单个顶点的操作FS:对单个片元的操作数据流是单向的VS/FS的输入与输出变量a)内建的uniform变量(只读)Va...原创 2019-08-04 17:19:59 · 1311 阅读 · 0 评论 -
GLSL的基本语法
数据类型及其使用基本数据类型float,bool,int,uint与C语言类似,定义一个变量的同时可以进行初始化GLSL是强类型语言:必须进行显式的强势类型转换,不存在隐式的类型转换。int b=2.0;//错误,无自动类型转换int b=int(2.0); //正确向量类型(vec)vec{2,3,4}:a vector of 2,3,or 4floatsb...原创 2019-08-04 19:13:37 · 1792 阅读 · 0 评论 -
OpenGL中创建与分配缓存
顶点数组对象使用glGenVertexArrays()分配顶点数组对象。void glGenVertexArrays(GLsizei n,GLuint* arrays);返回n个未使用的对象到数组arrays中,用作顶点数组对象,它们负责分配不同类型的OpenGL对象名称。这里的名称类似C语言中的一个指针比那辆,我们必须分配内存并且用名称引用它之后,名称才有意义,使用glBind...原创 2019-08-08 21:13:38 · 774 阅读 · 0 评论 -
三维渲染引擎
概念三维渲染引擎,即将现实中各种物质以各类曲线或多边形的形式抽象出来,再通过计算机输出最终图像的算法实现的集合。分类三维渲染引擎主要分为:实时三维渲染引擎和离线三维渲染引擎。实时三维渲染引擎主要用于游戏中三维画面的生成,而离线三维渲染引擎用于视频中三维画面的生成。对物质的抽象方式三维渲染引擎对物质的抽象主要有多边形和NURBS曲线(非均匀有理B样条)两种。实时引擎用多边...原创 2019-08-11 15:47:16 · 7506 阅读 · 0 评论 -
三维渲染之地形渲染
地形渲染是三维场景的重点,地形渲染的质量和效率直接影响整个场景渲染的质量和效率。一般来说,为了渲染出更加真实的地形,则地形的单个网格要尽量小,这样才能保证地形各个部分更加的精细。但如果网格变小,则对系统的开销也就大了,从而会影响渲染的效率。因此地形算法的设计实际上就是围绕着渲染质量和渲染效率这两方面的取舍,针对不同的硬件平台和设计目的,以求达到最合适的选取。地形渲染算法目前,有两种主要的地...原创 2019-08-11 17:02:38 · 2878 阅读 · 0 评论 -
三维场景渲染之天空体生成
天空模型仿真方法静态天空体主要是用天空纹理进行贴图,为了渲染能用较好的效果,静态天空体渲染对纹理的要求较高,金泰天空体的优点是在三维产经渲染时不会对程序造成负担,因为它的纹理是一开始载入的,之后无需动态更新,缺点是渲染出来的天空不够逼真。动态天空体动态天空体的生成一般有两种方法,第一种是动态的生成天空纹理。一般使用柏林噪声算法生成该种纹理。柏林噪声算法生成的云彩真实感强,但却有个很...原创 2019-08-11 19:48:34 · 1284 阅读 · 0 评论 -
OpenGL学习之多光源
定向光首先我们定义一个LightDirection结构体和一个uniform变量struct LightDirection{vec3 pos;vec3 color;vec3 dirToLight;};uniform LightDirection lightD;接下来我们将LightDirection传入CalcLightDirection函数vec3 CalcLi...原创 2019-06-06 17:03:29 · 300 阅读 · 0 评论 -
OpenGL学习资源总结
1.LearnOpenGL CN它是https://learnopengl.com/的中文翻译,个人推荐大家可以去B站上找[傅老师/OpenGL教学]课程,这个课程跟这个网站配套使用效果更佳。2.中国大学MOOC(慕课)个人在上面看过华中科技大学的老师讲的计算机图形学课程,感觉受益良多。还有一个《图形编程技术》,还没有更完,虽然讲的是固定渲染管线的知识,但是也对opengl的理解...原创 2019-06-06 08:40:33 · 447 阅读 · 0 评论 -
OpenGL学习之投光物
本文参考LearnOpenGL CN在前面的章节中,我们使用的实际上都是点光源,除了点光源之外,还有平行光,聚光灯。平行光平行光的特点是光的方向几乎都平行,只有一个方向,这是为了模拟光源在无限远处的情景,例如太阳光。平行光一般不考虑光的衰减,它与光源位置无关,我们只需为它指定方向即可。一般情况下,我们指定光源时,习惯从光源指向物体,而在计算光照时,又需要从物体指向光源的方向,因此需要做...原创 2019-06-05 10:03:49 · 326 阅读 · 0 评论 -
OpenGL学习之环境搭建
搭建环境是学习OpenGL的第一步原创 2019-05-09 15:00:28 · 1128 阅读 · 0 评论 -
OpenGL学习之坐标系统
在我的OpenGL渲染管线中介绍了几何变换中的几个坐标系系统(局部空间、世界空间、观察空间、裁剪空间、屏幕空间)以及它们之间的转换。当我们同时对物体进行平移,旋转,视图,投影灯变换时,一个顶点坐标将会根据以下过程被变换到裁剪坐标矩阵运算顺序为从右到左接着OpenGL需要对裁剪坐标执行透视除法,使得它们均变换到标准设备坐标,OpenGL会使用glViewPort内部的参数来标准化设备...原创 2019-05-19 14:11:38 · 473 阅读 · 0 评论 -
OpenGL学习之纹理
本篇博客主要介绍了纹理相关的一些基本概念,纹理环绕,纹理过滤,纹理加载与创建,以及纹理单元的相关知识及应用方法。原创 2019-05-15 10:57:39 · 943 阅读 · 0 评论 -
OpenGL学习之绘制三角形
配置好opengl环境以后就可以实现第一个三角形绘制了,并且学习VAO,VBO,EBO及其使用原创 2019-05-10 19:01:44 · 1444 阅读 · 0 评论 -
OpenGL学习之摄像机
在OpenGL中,我们通过把场景中的所有物体往反方向移动的方式来模拟相机的移动。1.摄像机/观察空间讨论摄像机/观察空间(Camera/view space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界左边变换为相对于摄像机位置与方向的观察坐标。为了定义一个摄像机,需要用到它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及指向它上方的向...原创 2019-05-21 09:21:25 · 492 阅读 · 0 评论 -
OpenGL学习之着色器上
此部分主要介绍了GLSL语言的数据类型,输入与输出及uniform的使用原创 2019-05-11 20:46:02 · 339 阅读 · 0 评论 -
OpenGL学习之着色器下
上一节OpenGL学习之着色器上我们通过着色器绘制出了一个彩色的矩形,这一节我们将创建一个着色器类,并使用C++文件流读取着色器内容。一、创建着色器类我们可以直接右键单击解决方案,选择新建类,这样就会自动生成一个.h和一个.cpp文件,也可以自己分别新建.h和.cpp文件。接着我们在.h中定义类的成员变量和成员函数,并在.cpp中实现函数功能。1.定义类结构`#ifdefine SHADE...原创 2019-05-12 15:26:19 · 335 阅读 · 0 评论 -
OpenGL学习之颜色
一、颜色的表示颜色纺锤体(颜色锥体)颜色的视觉模型:颜色三特性的空间表示明度(亮度):垂直轴线表示黑白亮度变化 色调:水平圆周上的不同角度点,代表了不同色调的颜色饱和度:从圆心向圆周过渡表示,同一色调下饱和度的提高。某个平面圆形上的色调饱和度不同,而明度(亮度)相同。CIE(Commission...原创 2019-05-26 09:34:07 · 1725 阅读 · 0 评论 -
OpenGL学习之使用glm库实现变换
一、glm简介glm常用三维数据类型vec2 二维向量vec3 三维向量vec4 四维向量mat2 二阶矩阵mat3 三阶矩阵mat4 四阶矩阵常用的函数glm::radians()角度制转弧度制glm::translate()创建一个平移矩阵,第一个参数是目标矩阵,第二个参数是平移的方向向量glm::rotate()创建一个将点绕某个轴旋转x弧度的旋转...原创 2019-05-18 20:27:01 · 7074 阅读 · 0 评论 -
OpenGL学习之基础光照
Phong模型简单光照明模拟物体表面对光的反射作用。光源为点光源。反射作用分为环境光(Ambient Light)漫反射(Diffuse Reflection)镜面反射(Specular Reflection)环境光(Ambient Light)在没有光源的地方,景物没有受到光源的直接照射,但其表面仍有一定的亮度,使它们可见。这是因为光线在场景中经过复杂...原创 2019-05-30 21:14:00 · 847 阅读 · 0 评论 -
GLSL中Uniform块
Uniform块当着色器程序变复杂时,用到的uniform变量数量也会上升。通常会在多个着色器程序中用到同一个uniform变量。由于uniform变量的位置是着色器链接的时候产生的(也就是glLinkProgram()的时候),因此它在应用程序中获得的索引可能会有变化,即使我们给uniform变量设置的值可能是完全相同的。而uniform缓存对象就是一种优化uniform变量访问,以及在不同...原创 2019-08-11 21:17:17 · 1352 阅读 · 0 评论