
图形学
文章平均质量分 94
csu_xiji
这个作者很懒,什么都没留下…
展开
-
LearnOpenGL 高级OpenGL—立方体贴图
文章目录写在前面立方体贴图创建立方体贴图天空盒加载天空盒显示天空盒优化环境映射反射折射动态环境贴图总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。立方体贴图我们已经使用2D纹理很长时间了,但除此之外仍有更多的纹理类型等着我们探索。在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你原创 2021-04-17 15:31:57 · 560 阅读 · 0 评论 -
OpenGL 立方体贴图(CubeMap)原理
文章目录参考文章什么是立方体贴图创建一个立方体贴图采样方式参考文章Learn OpenGL知乎—Sqazine什么是立方体贴图简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。这样做的好处是什么?不妨假设我们使用的立方体是1×1×1的,那么从坐标原点到该立方体上的任意一点可以组成一个方向向量,该方向向量最终会击中立方体的某个面,从而获取与之对应的纹理值。如下图所示:所以用立方体贴图来实现天空盒非常简单。创建一个立方体贴图由于它有6原创 2021-04-17 02:55:39 · 3188 阅读 · 0 评论 -
LearnOpenGL 模型加载—模型(二 绘制模型)
文章目录写在前面和箱子模型告别坑点回到主题写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。和箱子模型告别所以,让我们导入一个由真正的艺术家所创造的模型,替代我这个天才的作品(你要承认,这些箱子可能是你看过的最漂亮的立方体了),测试一下我们的实现吧。由于我不想让我占太多的功劳,我会偶尔让别的艺术家也加入我们,这次我们将会加载Crytek的游戏孤岛危机(Crysis)中的原版纳米装(Nanosuit)。这个模型被输出为一个.obj文件以及一个.mtl文件原创 2021-03-28 14:18:25 · 744 阅读 · 1 评论 -
LearnOpenGL 模型加载—模型(一 利用Assimp库解析obj文件)
文章目录写在前面模型导入3D模型到OpenGL从Assimp到网格索引材质重大优化继续优化?总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。模型现在是时候接触Assimp并创建实际的加载和转换代码了。这个教程的目标是创建另一个类来完整地表示一个模型,或者说是包含多个网格,甚至是多个物体的模型。一个包含木制阳台、塔楼、甚至游泳池的房子可能仍会被加载为一个模型。我们会使用Assimp来加载模型,并将它转换(Translate)至多个在上一节中创建的M原创 2021-03-27 20:24:39 · 3564 阅读 · 0 评论 -
LearnOpenGL 模型加载—网格
文章目录写在前面网格初始化渲染总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。网格通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构。我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体。我们从上一节中学到,网格(Mesh)代表的是单个的可绘制实体,我们现在先来定义一个我们自己的网格类。首先我们来回顾一下我们目前学到的知识,想想一个网格最少需要什么数据。一个网格应该至少需原创 2021-03-27 02:25:39 · 419 阅读 · 0 评论 -
LearnOpenGL 模型加载—Assimp
文章目录写在前面Assimp模型加载库构建Assimp总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。Assimp到目前为止的所有场景中,我们一直都在滥用我们的箱子朋友,但时间久了甚至是我们最好的朋友也会感到无聊。在日常的图形程序中,通常都会使用非常复杂且好玩的模型,它们比静态的箱子要好看多了。然而,和箱子对象不同,我们不太能够对像是房子、汽车或者人形角色这样的复杂形状手工定义所有的顶点、法线和纹理坐标。我们想要的是将这些模型(Model)导入(原创 2021-03-27 01:28:39 · 769 阅读 · 0 评论 -
LearnOpenGL 光照—复习
文章目录写在前面复习词汇表写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。复习恭喜您已经学习到了这个地方!辛苦啦!不知道你有没有注意到,总的来说我们在学习光照教程的时候关于OpenGL本身并没有什么新东西,除了想访问uniform数组这样细枝末节的知识。目前为止的所有教程都是关于使用一些技巧或者公式来操作着色器,达到真实的光照效果。这再一次向你展示了着色器的威力。着色器是非常灵活的,你也亲眼见证了我们仅仅使用一些3D向量和可配置的变量就能够创造出惊人原创 2021-03-25 23:39:06 · 174 阅读 · 0 评论 -
LearnOpenGL 光照—多光源
文章目录写在前面多光源定向光点光源合成结果总结练习写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。多光源我们在前面的教程中已经学习了许多关于OpenGL中光照的知识,其中包括冯氏着色(Phong Shading)、材质(Material)、光照贴图(Lighting Map)以及不同种类的投光物(Light Caster)。在这一节中,我们将结合之前学过的所有知识,创建一个包含六个光源的场景。我们将模拟一个类似太阳的定向光(Directional L原创 2021-03-25 22:29:13 · 623 阅读 · 0 评论 -
LearnOpenGL 光照—投光物
文章目录写在前面投光物平行光点光源衰减选择正确的值实现衰减聚光手电筒平滑/软化边缘总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。投光物我们目前使用的光照都来自于空间中的一个点。它能给我们不错的效果,但现实世界中,我们有很多种类的光照,每种的表现都不同。将光投射(Cast)到物体的光源叫做投光物(Light Caster)。在这一节中,我们将会讨论几种不同类型的投光物。学会模拟不同种类的光源是又一个能够进一步丰富场景的工具。我们首先将会讨论定向原创 2021-03-25 16:15:32 · 235 阅读 · 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 · 1116 阅读 · 1 评论 -
LearnOpenGL 光照—光照贴图
文章目录写在前面光照贴图漫反射贴图镜面光贴图采样镜面光贴图总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。光照贴图在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个物体的视觉输出提供足够多的灵活性。在上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非原创 2021-03-23 18:39:40 · 314 阅读 · 0 评论 -
LearnOpenGL 光照—材质
文章目录写在前面材质设置材质光的属性不同的光源颜色总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。材质在现实世界里,每个物体会对光产生不同的反应。比如说,钢看起来通常会比陶瓷花瓶更闪闪发光,木头箱子也不会像钢制箱子那样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体反射光的时候不会有太多的散射(Scatter),因而产生一个较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OpenGL中模拟多种类型的转载 2021-03-23 16:50:42 · 387 阅读 · 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 · 318 阅读 · 0 评论 -
法线矩阵
文章目录原文链接正文原文链接参见http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/。知乎这篇文章也不错。正文gl_NormalMatrix出现在很多顶点着色器中。这篇文章会解释什么是法线矩阵以及它是用来干什么的。本文灵感来源于《Mathematics for 3D Game Programming and Computer Graphics》 by Eric Lengyel。许多计算是在观察空间里进行原创 2021-03-21 17:38:37 · 1122 阅读 · 0 评论 -
LearnOpenGL 入门—OpenGL
文章目录写在前面OpenGL核心模式与立即渲染模式扩展状态机对象写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。OpenGL 在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specificati原创 2021-01-18 22:56:18 · 921 阅读 · 0 评论 -
LearnOpenGL 入门—创建一个窗口
文章目录写在前面初始化GLFW窗口对象GLAD视口渲染循环最后一件事输入渲染总结写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。初始化GLFW 首先,我们在main函数中调用glfwInit函数来初始化GLFW,然后我们可以使用glfwWindowHint函数来配置GLFW。glfwWindowHint函数的第一个参数代表选项的名称,我们可以从很多以GLFW_开头的枚举值中选择;第二个参数接受一个整型,用来设置这个选项的值。该函数的所有的选项原创 2021-01-18 23:31:22 · 420 阅读 · 0 评论 -
LearnOpenGL 入门—绘制一个三角形
文章目录写在前面图形渲染管线顶点输入顶点着色器编译着色器片段着色器着色器程序链接顶点属性顶点数组对象我们一直期待的三角形索引缓冲对象总结写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。图形渲染管线 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大原创 2021-01-20 18:53:50 · 529 阅读 · 0 评论 -
LearnOpenGL 入门—着色器
文章目录写在前面GLSL数据类型向量输入与输出Uniform更多属性!我们自己的着色器类总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。GLSL 着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。 着色器是使用一种叫GLSL的类C语言写成的。原创 2021-01-21 20:42:02 · 445 阅读 · 1 评论 -
LearnOpenGL 入门—纹理
文章目录写在前面纹理纹理环绕方式纹理过滤多级渐远纹理stb_image.h生成纹理应用纹理纹理单元总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。纹理 我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。 艺术家和程序员更喜欢使用纹理(Tex原创 2021-01-22 15:57:15 · 885 阅读 · 0 评论 -
LearnOpenGL 入门—变换
文章目录写在前面变换向量向量与标量运算向量取反向量加减长度向量相乘点乘叉乘矩阵矩阵的加减矩阵的数乘矩阵相乘矩阵与向量相乘单位矩阵缩放位移旋转矩阵的组合实践GLM拓展阅读总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。变换 尽管我们现在已经知道了如何创建一个物体、着色、加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣。我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的原创 2021-01-23 01:04:10 · 1000 阅读 · 0 评论 -
LearnOpenGL 入门—坐标系统
文章目录写在前面坐标系统概述局部空间世界空间观察空间裁剪空间正射投影透视投影把它们都组合到一起进入3D更多的3DZ缓冲更多的立方体!总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。坐标系统 在上一个教程中,我们学习了如何有效地利用矩阵的变换来对所有顶点进行变换。OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z原创 2021-01-24 01:47:31 · 525 阅读 · 0 评论 -
LearnOpenGL 入门—摄像机
文章目录写在前面摄像机摄像机/观察空间摄像机位置摄像机方向右轴上轴Look At自由移动移动速度视角移动欧拉角鼠标输入缩放摄像机类总结练习写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。摄像机 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 本节原创 2021-01-25 01:04:55 · 459 阅读 · 0 评论 -
LearnOpenGL 入门—复习
文章目录写在前面复习词汇表写在前面 原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。复习 恭喜您完成了本章的学习,至此为止你应该能够创建一个窗口,创建并且编译着色器,通过缓冲对象或者uniform发送顶点数据,绘制物体,使用纹理,理解向量和矩阵,并且可以综合上述知识创建一个3D场景并可以通过摄像机来移动。 最后这几章我们学了太多的东西了。你可以尝试在教程的基础上改动程序,或者实验一下,有一点自己的想法并解决问题。一旦你认为你真正熟悉了我们讨论的所有的原创 2021-01-25 16:01:50 · 171 阅读 · 0 评论 -
LearnOpenGL 光照—颜色
文章目录写在前面颜色创建一个光照场景写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。颜色现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。然而我们仍能通过数值来表现出非常多的颜色,甚至你可能都不会注意到与现实的颜色有任何的差异。颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。仅仅原创 2021-03-21 13:37:26 · 378 阅读 · 0 评论 -
LearnOpenGL 光照—基础光照
文章目录写在前面基础光照环境光照漫反射光照法向量计算漫反射光照最后一件事镜面光照总结写在前面原文链接。原文应该是github上的一个项目,本文主要用来记录一些知识点和自己遇到的问题。基础光照现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting M原创 2021-03-21 15:23:25 · 488 阅读 · 3 评论 -
三维旋转矩阵推导及演示
推导过程 设vvv是三维空间中任意向量,求vvv绕nnn顺时针旋转θ\thetaθ所得到的向量v′v'v′,其中nnn是单位向量,n=[nxnynz]n=\left[ \begin{matrix} n_x\\n_y\\n_z \end{matrix} \right]n=⎣⎡nxnynz⎦⎤,nx2+ny2+nz2=1n_x^2+n_y^2+n_z^2=1nx2+ny2+nz2=1。 首先把vvv分解为垂直、平行于nnn的两个分量:v⊥=v−(vTn)nv_{⊥}=v-(v^Tn)原创 2021-01-17 16:24:35 · 1559 阅读 · 0 评论 -
Ray Tracing in One Weekend(中文翻译)
文章目录1. 写在前面2. Output an Image2.1 The PPM Image Format2.2 Creating an Image File3. The vec3 Class3.1 Variables and Methods3.2 vec3 Utility Functions3.3 Color Utility Functions4. Rays, a Simple Camera, and Background4.1 The ray Class4.2 Sending Rays Into the原创 2020-09-25 00:22:51 · 13960 阅读 · 9 评论 -
Whitted光线追踪
更详细的内容可以看知乎的这篇文章。这里简要的说了一下几何光学的规则。这里引出了光线追踪:正向(从光源开始)和反向(从眼睛开始)。在介绍光线追踪前,先来看一些比较简单的。WhittedWhittedWhitted光线追踪算法,结合了反向光线追踪和rays to lightrays\ to\ lightrays to light(看图会更清晰一点),而且需要递归计算。具体的算法:1.1.1.对于每个像素,沿VVV方向跟踪主光线到第一个可见表面。2.2.2.原创 2020-09-17 18:32:15 · 453 阅读 · 0 评论 -
Phong和Blinn-Phong光照模型
文章内容来自上面这篇pdfpdfpdf,如有错误,欢迎指正。简要介绍一下PhongPhongPhong和Blinn−PhongBlinn-PhongBlinn−Phong光照模型的特点。简要介绍一下问题,同时给出了N、L、V、PN、L、V、PN、L、V、P的意义(之后计算会用到)。第000步,此时最终颜色仅与物体本身的材质有关。第111步,我们可以加上环境光(它能将灯光均匀地照射在场景中每个物体上面)。这里对Ke、Ka、ILaK_e、K_a、I_{La}Ke、Ka、ILa进行了更.原创 2020-09-14 22:21:48 · 437 阅读 · 0 评论 -
射线与球体/三角面片求交、重心坐标、插值
射线已知射线方程为P(t)=Pˉ+t∗DˉP(t)=\bar{P}+t*\bar{D}P(t)=Pˉ+t∗Dˉ,其中Pˉ\bar{P}Pˉ为射线的起点(x0,y0,z0)(x_0,y_0,z_0)(x0,y0,z0),Dˉ\bar{D}Dˉ为射线的方向向量,其模长为111,只要知道距离ttt,我们就可以计算出对应点的坐标。球体求交不妨设球体的方程为(Xˉ−Cˉ)2=R2(\bar{X}-\bar{C})^2=R^2(Xˉ−Cˉ)2=R2,其中Xˉ\bar{X}Xˉ为球体上任意一点的坐标,Cˉ\b原创 2020-09-14 22:19:48 · 1857 阅读 · 0 评论