OpenGL
文章平均质量分 94
csu_xiji
这个作者很懒,什么都没留下…
展开
-
LearnOpenGL 高级OpenGL—高级数据
文章目录写在前面高级数据分批顶点属性复制缓冲总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。高级数据我们在OpenGL中大量使用缓冲来储存数据已经有很长时间了。操作缓冲其实还有更有意思的方式,而且使用纹理将大量数据传入着色器也有更有趣的方法。这一节中,我们将讨论一些更有意思的缓冲函数,以及我们该如何使用纹理对象来储存大量的数据(纹理的部分还没有完成)。OpenGL中的缓冲只是一个管理特定内存块的对象,没有其它更多的功能了。在我们将它绑定到一个缓原创 2021-04-17 22:19:16 · 173 阅读 · 0 评论 -
LearnOpenGL 高级OpenGL—立方体贴图
文章目录写在前面立方体贴图创建立方体贴图天空盒加载天空盒显示天空盒优化环境映射反射折射动态环境贴图总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。立方体贴图我们已经使用2D纹理很长时间了,但除此之外仍有更多的纹理类型等着我们探索。在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你原创 2021-04-17 15:31:57 · 491 阅读 · 0 评论 -
OpenGL 立方体贴图(CubeMap)原理
文章目录参考文章什么是立方体贴图创建一个立方体贴图采样方式参考文章Learn OpenGL知乎—Sqazine什么是立方体贴图简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。这样做的好处是什么?不妨假设我们使用的立方体是1×1×1的,那么从坐标原点到该立方体上的任意一点可以组成一个方向向量,该方向向量最终会击中立方体的某个面,从而获取与之对应的纹理值。如下图所示:所以用立方体贴图来实现天空盒非常简单。创建一个立方体贴图由于它有6原创 2021-04-17 02:55:39 · 3021 阅读 · 0 评论 -
LearnOpenGL 模型加载—模型(二 绘制模型)
文章目录写在前面和箱子模型告别坑点回到主题写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。和箱子模型告别所以,让我们导入一个由真正的艺术家所创造的模型,替代我这个天才的作品(你要承认,这些箱子可能是你看过的最漂亮的立方体了),测试一下我们的实现吧。由于我不想让我占太多的功劳,我会偶尔让别的艺术家也加入我们,这次我们将会加载Crytek的游戏孤岛危机(Crysis)中的原版纳米装(Nanosuit)。这个模型被输出为一个.obj文件以及一个.mtl文件原创 2021-03-28 14:18:25 · 685 阅读 · 1 评论 -
LearnOpenGL 模型加载—模型(一 利用Assimp库解析obj文件)
文章目录写在前面模型导入3D模型到OpenGL从Assimp到网格索引材质重大优化继续优化?总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。模型现在是时候接触Assimp并创建实际的加载和转换代码了。这个教程的目标是创建另一个类来完整地表示一个模型,或者说是包含多个网格,甚至是多个物体的模型。一个包含木制阳台、塔楼、甚至游泳池的房子可能仍会被加载为一个模型。我们会使用Assimp来加载模型,并将它转换(Translate)至多个在上一节中创建的M原创 2021-03-27 20:24:39 · 3261 阅读 · 0 评论 -
LearnOpenGL 模型加载—网格
文章目录写在前面网格初始化渲染总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。网格通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。我们从上一节中学到,网格(Mesh)代表的是单个的可绘制实体,我们现在先来定义一个我们自己的网格类。首先我们来回顾一下我们目前学到的知识,想想一个网格最少需要什么数据。一个网格应该至少需原创 2021-03-27 02:25:39 · 380 阅读 · 0 评论 -
LearnOpenGL 模型加载—Assimp
文章目录写在前面Assimp模型加载库构建Assimp总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。Assimp到目前为止的所有场景中,我们一直都在滥用我们的箱子朋友,但时间久了甚至是我们最好的朋友也会感到无聊。在日常的图形程序中,通常都会使用非常复杂且好玩的模型,它们比静态的箱子要好看多了。然而,和箱子对象不同,我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们想要的是将这些模型(Model)导入(原创 2021-03-27 01:28:39 · 701 阅读 · 0 评论 -
LearnOpenGL 光照—复习
文章目录写在前面复习词汇表写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。复习恭喜您已经学习到了这个地方!辛苦啦!不知道你有没有注意到,总的来说我们在学习光照教程的时候关于OpenGL本身并没有什么新东西,除了想访问uniform数组这样细枝末节的知识。目前为止的所有教程都是关于使用一些技巧或者公式来操作着色器,达到真实的光照效果。这再一次向你展示了着色器的威力。着色器是非常灵活的,你也亲眼见证了我们仅仅使用一些3D向量和可配置的变量就能够创造出惊人原创 2021-03-25 23:39:06 · 146 阅读 · 0 评论 -
LearnOpenGL 光照—多光源
文章目录写在前面多光源定向光点光源合成结果总结练习写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。多光源我们在前面的教程中已经学习了许多关于OpenGL中光照的知识,其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的场景。我们将模拟一个类似太阳的定向光(Directional L原创 2021-03-25 22:29:13 · 532 阅读 · 0 评论 -
LearnOpenGL 光照—投光物
文章目录写在前面投光物平行光点光源衰减选择正确的值实现衰减聚光手电筒平滑/软化边缘总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。投光物我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。在这一节中,我们将会讨论几种不同类型的投光物。学会模拟不同种类的光源是又一个能够进一步丰富场景的工具。我们首先将会讨论定向原创 2021-03-25 16:15:32 · 212 阅读 · 0 评论 -
LearnOpenGL 光照—光照贴图—练习(放射光贴图)
文章目录初始代码练习一练习二练习三练习四初始代码light shader:light\ shader:light shader:#version 330 corelayout (location = 0) in vec3 aPos;uniform mat4 model;uniform mat4 view;uniform mat4 projection;void main(){ gl_Position = projection * view * model * ve原创 2021-03-24 00:33:04 · 1015 阅读 · 1 评论 -
LearnOpenGL 光照—光照贴图
文章目录写在前面光照贴图漫反射贴图镜面光贴图采样镜面光贴图总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。光照贴图在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个物体的视觉输出提供足够多的灵活性。在上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非原创 2021-03-23 18:39:40 · 294 阅读 · 0 评论 -
LearnOpenGL 光照—材质
文章目录写在前面材质设置材质光的属性不同的光源颜色总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。材质在现实世界里,每个物体会对光产生不同的反应。比如说,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OpenGL中模拟多种类型的转载 2021-03-23 16:50:42 · 348 阅读 · 0 评论 -
LearnOpenGL 光照—基础光照—练习题
文章目录初始代码练习一练习二练习三练习四初始代码object shader:object\ shader:object shader:#version 330 corelayout (location = 0) in vec3 aPos; // 位置变量的属性位置值为 0 layout (location = 1) in vec3 aNormal;uniform mat4 model; //模型uniform mat4 view; //观察uniform mat4原创 2021-03-21 18:49:30 · 267 阅读 · 0 评论 -
LearnOpenGL 光照—基础光照
文章目录写在前面基础光照环境光照漫反射光照法向量计算漫反射光照最后一件事镜面光照总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。基础光照现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting M原创 2021-03-21 15:23:25 · 447 阅读 · 3 评论 -
LearnOpenGL 光照—颜色
文章目录写在前面颜色创建一个光照场景写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。颜色现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异。颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。仅仅原创 2021-03-21 13:37:26 · 339 阅读 · 0 评论 -
OpenGL VAO VBO EBO(IBO)的绑定、解绑问题
文章目录前言VBO链接顶点属性EBO(IBO)VAO绑定顺序解绑顺序前言首先感谢知乎的一篇文章,解答了我的疑惑,在此记录一下心得。那么我们先简单介绍一下这三个对象,以及一些必要操作。VBOVBO,全称Vertex Buffer Object,中文名称:顶点缓冲对象。我们利用这个对象来管理显存,如果你想往显卡上发送数据,就需要用到这个对象,大体流程如下:链接顶点属性对应的函数名称:glVertexAttribPointer。这个函数用来干嘛呢?我们利用VBO向显卡传送数据,但是没有告诉显卡原创 2021-03-17 16:41:54 · 4405 阅读 · 3 评论 -
LearnOpenGL 入门—复习
文章目录写在前面复习词汇表写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。复习 恭喜您完成了本章的学习,至此为止你应该能够创建一个窗口,创建并且编译着色器,通过缓冲对象或者uniform发送顶点数据,绘制物体,使用纹理,理解向量和矩阵,并且可以综合上述知识创建一个3D场景并可以通过摄像机来移动。 最后这几章我们学了太多的东西了。你可以尝试在教程的基础上改动程序,或者实验一下,有一点自己的想法并解决问题。一旦你认为你真正熟悉了我们讨论的所有的原创 2021-01-25 16:01:50 · 153 阅读 · 0 评论 -
LearnOpenGL 入门—摄像机
文章目录写在前面摄像机摄像机/观察空间摄像机位置摄像机方向右轴上轴Look At自由移动移动速度视角移动欧拉角鼠标输入缩放摄像机类总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。摄像机 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节原创 2021-01-25 01:04:55 · 425 阅读 · 0 评论 -
LearnOpenGL 入门—坐标系统
文章目录写在前面坐标系统概述局部空间世界空间观察空间裁剪空间正射投影透视投影把它们都组合到一起进入3D更多的3DZ缓冲更多的立方体!总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。坐标系统 在上一个教程中,我们学习了如何有效地利用矩阵的变换来对所有顶点进行变换。OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z原创 2021-01-24 01:47:31 · 496 阅读 · 0 评论 -
LearnOpenGL 入门—变换
文章目录写在前面变换向量向量与标量运算向量取反向量加减长度向量相乘点乘叉乘矩阵矩阵的加减矩阵的数乘矩阵相乘矩阵与向量相乘单位矩阵缩放位移旋转矩阵的组合实践GLM拓展阅读总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。变换 尽管我们现在已经知道了如何创建一个物体、着色、加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣。我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的原创 2021-01-23 01:04:10 · 931 阅读 · 0 评论 -
LearnOpenGL 入门—纹理
文章目录写在前面纹理纹理环绕方式纹理过滤多级渐远纹理stb_image.h生成纹理应用纹理纹理单元总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。纹理 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。 艺术家和程序员更喜欢使用纹理(Tex原创 2021-01-22 15:57:15 · 830 阅读 · 0 评论 -
LearnOpenGL 入门—着色器
文章目录写在前面GLSL数据类型向量输入与输出Uniform更多属性!我们自己的着色器类总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。GLSL 着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。 着色器是使用一种叫GLSL的类C语言写成的。原创 2021-01-21 20:42:02 · 412 阅读 · 1 评论 -
LearnOpenGL 入门—绘制一个三角形
文章目录写在前面图形渲染管线顶点输入顶点着色器编译着色器片段着色器着色器程序链接顶点属性顶点数组对象我们一直期待的三角形索引缓冲对象总结写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。图形渲染管线 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大原创 2021-01-20 18:53:50 · 497 阅读 · 0 评论 -
LearnOpenGL 入门—创建一个窗口
文章目录写在前面初始化GLFW窗口对象GLAD视口渲染循环最后一件事输入渲染总结写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。初始化GLFW 首先,我们在main函数中调用glfwInit函数来初始化GLFW,然后我们可以使用glfwWindowHint函数来配置GLFW。glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整型,用来设置这个选项的值。该函数的所有的选项原创 2021-01-18 23:31:22 · 386 阅读 · 0 评论 -
LearnOpenGL 入门—OpenGL
文章目录写在前面OpenGL核心模式与立即渲染模式扩展状态机对象写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。OpenGL 在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specificati原创 2021-01-18 22:56:18 · 864 阅读 · 0 评论 -
vs2019配置glfw、glad等环境
文章目录写在前面构建GLFWCMake编译我们的第一个工程链接GLAD配置GLAD写在前面 打算学习一下openGL。原文地址。这里主要记录一下自己配置环境的过程以及遇到的问题,毕竟原文使用的是vs2015,而我用的是vs2019。构建GLFW 首先去官网下载源码包: 解压: 在开始下一步之前,我们还需要CMakeCMakeCMake。CMake CMakeCMakeCMake是一个工程文件生成工具。用户可以使用预定义好的CMakeCMakeCMake脚本,根据自己的选择(像是原创 2021-01-18 18:56:02 · 2531 阅读 · 10 评论