自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 QT国际化与多语言实现

1.Unicode编码        Unicode是一种支持世界上绝大多数文字系统的字符编码标准。QT中的QString类用于将字符串存储为Unicode。2.应用程序如何翻译QT文件      如果想让应用程序能使用多种语言,必须做2件事情:      1.确保每一个可见的字符串都使用tr()函数      2.在应用程序启动时,载入了一个翻译文件(.q

2015-11-16 13:25:24 1489

原创 LearnOpenGL学习笔记——延迟着色法

我们现在一直使用的光照方式叫做正向渲染(Forward Rendering)或者正向着色法(Forward Shading),它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现,但是同时它对程序性能的影响也很大,因为对于每一个需要渲染的物体,程序都要对每一个光源每一个需要渲染的片段进行迭代,这是非常多的!因为大部分片段着色器的输出都会被之后的输出覆盖,正向渲染还会在场景中因为高深的复杂度(多个物体重合在一个像素上)浪费大量

2022-08-16 00:26:50 317

原创 系统运维——Linux环境

yum install 不可用解决方案https://techglimpse.com/failed-metadata-repo-appstream-centos-8/

2022-06-16 19:10:46 195 1

原创 Unity入门指南——常见问题整理

问题1:vs没有自动补全脚本https://blog.csdn.net/qq_41835314/article/details/123401064

2022-06-12 16:07:11 820

转载 LearnOpenGL学习笔记——泛光

泛光 高斯模糊 多渲染目标

2022-06-05 23:07:00 407

原创 LearnOpenGL学习笔记——HDR

一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0~1.0之间的。但是如果我们遇上了一个特性的区域,其中有多个光源使这些数值综合超过了1.0,又会发生什么呢?答案是这些片段中超过1.0的亮度或者颜色会被约束在1.0,从而导致场景混成一片,难以分辨:这是由于大量片段的颜色值都非常接近1.0,在很大一个区域内每一个亮的片段都有相同的白色。这损失了很多的细节,使场景看起来非常假。解决这个问题的一个方案是减小光源的强度从而保证场景内没有一个片段亮于1.0。然而这并不是一个

2022-06-03 14:27:48 316

转载 LearnOpenGL学习笔记——视差贴图

视差贴图

2022-06-01 22:56:19 370

原创 Docker指南

docker 踩坑指南

2022-06-01 21:56:36 300

转载 LearnOpenGL学习笔记——法线贴图

法线贴图我们的场景中已经充满了多边形物体,其中每个都可能由成百上千平坦的三角形组成。我们以向三角形上附加纹理的方式来增加额外细节,提升真实感,隐藏多边形几何体是由无数三角形组成的事实。纹理确有助益,然而当你近看它们时,这个事实便隐藏不住了。现实中的物体表面并非是平坦的,而是表现出无数(凹凸不平的)细节。例如,砖块的表面。砖块的表面非常粗糙,显然不是完全平坦的:它包含着接缝处水泥凹痕,以及非常多的细小的空洞。如果我们在一个有光的场景中看这样一个砖块的表面,问题就出来了。下图中我们可以看到砖块纹理应用到了平

2022-05-28 00:02:34 656

原创 LearnOpenGL学习笔记——阴影

阴影阴影是光线遮挡的结果;当一个光源的光线由于其他物体的阻挡不能够达到一个物体表面的时候,那么这个物体就在阴影中了。阴影可以让场景更加真实阴影映射(Shadow Mapping)阴影映射(Shadow Mapping)背后的思路非常简单:我们以光的位置为视角进行渲染,我们能看到的东西都将被点亮,看不见的一定是在阴影之中了。假设有一个地板,在光源和它之间有一个大盒子。由于光源处向光线方向看去,可以看到这个盒子,但看不到地板的一部分,这部分就应该在阴影中了。在深度缓冲里的一个值是摄像机视角下,对应

2022-05-21 21:53:14 791

原创 LearnOpenGL学习笔记——Gamma校正

Gamma校正https://www.zhihu.com/question/27467127/answer/37602200https://learnopengl-cn.github.io/05%20Advanced%20Lighting/02%20Gamma%20Correction/

2022-05-16 22:57:24 122

原创 LearnOpenGL学习笔记——高级光照

Blinn-Phong冯氏光照不仅对真实光照有很好的近似,而且性能也很高。但是它的镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。下面这张图展示了当反光度为1.0时地板会出现的效果:可以看到,在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数,镜面光分量会变为0.0。你可能会觉得,当光线与视线夹角大于90度时你应该不会接收到任何光才对,所以这不是什么问题。然而,这种想法仅仅只适用于漫反射

2022-05-16 22:31:52 168

原创 LearnOpenGL学习笔记——抗锯齿

如何开启抗锯齿原理见末尾链接glfwWindowHint(GLFW_SAMPLES, 4);glEnable(GL_MULTISAMPLE);// 一般默认是打开状态离屏MSAAhttps://learnopengl-cn.github.io/04%20Advanced%20OpenGL/11%20Anti%20Aliasing/

2022-05-14 15:13:13 399

原创 LearnOpenGL学习笔记——实例化

实例化假设你有一个绘制了很多模型的场景,而大部分的模型包含的是同一组顶点数据,只不过进行的是不同的世界空间变换。想象一个充满草的场景:每根草都是一个包含几个三角形的小模型。你可能会需要绘制很多根草,最终在每帧中你可能会需要渲染上千或者上万根草。因为每一根草仅仅是由几个三角形构成,渲染几乎是瞬间完成的,但上千个渲染函数调用却会极大地影响性能。如果我们需要渲染大量物体时,代码看起来会像这样: for(unsigned int i = 0; i < amount_of_models_to_draw; i

2022-05-12 00:49:05 209

原创 LearnOpenGL学习笔记——几何着色器

几何着色器在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader),几何着色器的输入是一个图元(如点或三角形)的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而,几何着色器最有趣的地方在于,它能够将(这一组)顶点变换为完全不同的图元,并且还能生成比原来更多的顶点。废话不多说,我们直接先看一个几何着色器的例子:#version 330 corelayout (points) in;layout (line_strip, max_vertices = 2)

2022-05-11 00:44:08 1101

原创 LearnOpenGL学习笔记——高级GLSL

顶点着色器变量gl_PointSize :可以设置渲染出来点的大小。使用 glEnable(GL_PROGRAM_POINT_SIZE);`开始启用点大小设置,点的大小会随着观察者距顶点距离变远而增大。 void main() { gl_Position = projection * view * model * vec4(aPos, 1.0); gl_PointSize = gl_Position.z; }gl_VertexID:整型变量gl_Vert

2022-05-09 23:05:46 1726

原创 LearnOpenGL学习笔记——高级数据

高级数据我们在OpenGL中大量使用缓冲来存储数据已经有很长时间了。操作缓冲其实还有更有意思的方式,而且使用纹理将大量输出传入着色器也有更有趣的方法。这一节中,我们将讨论一些更有意思的缓冲函数,以及我们该如何使用纹理来存储大量的数据(纹理部分还没有完成)。OpenGL中的缓冲只是一个管理特定内存块的对象,没有其它更多的功能了。在我们将它绑定到一个缓冲目标(Buffer Target)时,我们才赋予了其意义。当我们绑定一个缓冲到GL_ARRAY_BUFFER时,它就是一个顶点数组缓冲,但我们也可以很容易地

2022-05-08 23:22:49 135

原创 LearnOpenGL学习笔记——立方体贴图

立方体贴图在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。简单来说,立方体贴图就是一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。你可能会奇怪,这样一个立方体有什么用途呢?为什么要把6张纹理合并到一张纹理中,而不是直接使用6个单独的纹理呢?立方体贴图有一个非常有用的特性,它可以通过一个方向向量来进行索引/采样。假设我们有一个1x1x1的单位立方体,方向向量的原点位于它的中心。使用一个橘黄色的方向向量来从立方体贴

2022-05-08 12:36:31 541

原创 LearnOpenGL学习笔记——帧缓冲

帧缓冲用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲。我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的(GLFW帮我们做了这些)。有了我们自己的帧缓冲,我们就能够有更多方式来渲染了。如何创建自己的帧缓冲: // 创建帧缓

2022-05-06 01:07:55 768

原创 LearnOpenGL学习笔记——面剔除

面剔除尝试在脑子中想象一个3D立方体,数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了,你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体,但你永远不能看到3个以上的面。所以我们为什么要浪费时间绘制我们不能看见的那3个面呢?如果我们能够以某种方式丢弃这几个看不见的面,我们能省下超过50%的片段着色器执行数!如果我们想象任何一个闭合形状,它的每一个面都有两侧,每一侧要么面向用户,要么背对用户。如果我们能够只绘制面向观察者的面呢?这正是面剔除(Face Culling)所

2022-05-03 15:41:31 211 1

原创 LearnOpenGL学习笔记——混合

混合(个人感觉叫透明度更好些)OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是一个透明的物体,玻璃有它自己的颜色,但它最终的颜色还包含了玻璃之后所有物体的颜色。这也是混合这一名字的出处,我们混合(Blend)(不同物体的)多种颜色为一种颜色。所以透明度能让我们看穿物体。也就是我们通常说的RGBA,A指的a

2022-05-03 11:02:00 756

原创 LearnOpenGL学习笔记——模板测试

模板测试当片段着色器处理完一个片段之后,模板测试(Stencil Buffer)会开始执行,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,它叫模板缓冲(Stencil Buffer),我们可以在渲染的时候更新它来获得一些很有意思的效果。一个模板缓冲中,(通常)每个模板值(Stencil Value)是8位的。所以每个像素/片段一共能有256种不同的模板值。我们可以将这些模板值设置为我们想要的值,然后当某一个片段有某一个模

2022-05-02 23:07:14 557

原创 LearnOpenGL学习笔记——深度测试

什么是深度测试我们在绘制物体的时候,物体之间是有遮挡关系的。比如下图,箱子遮挡住地面。遮挡关系是由深度确定的。从视觉上来讲,可以简单的理解为从摄像机(眼睛)看过去,距离摄像机(眼睛距离越近),深度值越小,越不会被遮挡。如下图:OpenGL中,默认是禁用深度测试的,也就是说,OpengGL在绘制物体时候,并不关心哪个物体遮挡哪个物体。后绘制的物体总是遮挡前面的。如果不做深度测试,那我们上图的地面和箱子就变成了下图:现在大部分的GPU都提供一个叫做提前深度测试(Early Depth Testing

2022-05-02 17:13:31 1044

原创 LearnOpenGL学习笔记——投光物

平行光当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。不论物体和/或者观察者的位置,看起来好像所有的光都来自于同一个方向。当我们使用一个假设光源处于无限远处的模型时,它就被称为定向光,因为它的所有光线都有着相同的方向,它与光源的位置是没有关系的。因为所有的光线都是平行的,所以物体与光源的相对位置是不重要的,因为对场景中每一个物体光的方向都是一致的。由于光的位置向量保持一致,场景中每个物体的光照计算将会是类似的。struct Light { // vec3 position;

2022-05-01 14:41:08 571

原创 LearnOpenGL学习笔记——光照贴图

光照贴图如果需要描述物体的材质,仅仅描述漫反射,环境光照,高光项是远远不够的,比如:一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽,所以它没有镜面高光,轮毂非常闪亮(如果你洗车了的话)。汽车同样会有漫反射和环境光颜色,它们在整个物体上也不会是一样的,汽车有着许多种不同的环境光/漫反射颜色。总之,这样的物体在不同的部件上都有不同的材质属性。我们希望通过某种方式对物体的每个片段单独设置漫反射颜色。漫反射贴图可以将需要细节化的物体光照信息做成纹理存储,并在shader中读取它。

2022-04-30 21:07:16 359

原创 LearnOpenGL学习笔记——基础光照

1.光照模型现实世界的光照是极其复杂的,而且会受到诸多因素的影响。我们一般模拟光照,使用的是冯氏光照模型:环境光(Ambient):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。漫反射(Diffuse):模拟光源对物体的方向性影响(Directional Impact)。它是冯氏光照模型中视觉上最显著的分量。物体的某一部分越是正对着光源,它就会越亮。镜面(Specular:模

2022-04-30 19:09:10 269

原创 计算机图形学--实时渲染中常用的工业界技术

SVGF1.考虑深度以及深度的梯度A点和B点是在同一个平面的,颜色也是相同的,所以说A和B应该互相影 响但是A和B的深度是差异比较大的切平面的法线,法线平面的梯度2.考虑法线判定法线的差异是否严格如果场景应用了法线贴图,我们也使用几何的数据3.颜色差异A点是否贡献到B,A和B的颜色差异,如何能够去除噪声的影响。获取B点精准的颜色。再去贡献给A.SVGF效果SVGF失败例子:RAETAA(时间上的复用)Temporal Super Resolut

2022-03-15 23:01:26 468

原创 计算机图形学--实时光线追踪2

如何实现滤波使用高斯滤波双边滤波一个高斯只能保留低频信息。边界(可以理解为高频信息)会模糊。像素i和j的差距特别大,让j对i的贡献变小。如何判断是边界还是噪声呢?联合双边滤波我们用更多的标准指导滤波,引入更多的参数。联合双边滤波很适合路径追踪的噪声我们在几何上可以获取很多数据,而且G-buffers是完全没有噪声的。可以选择很多按照距离衰减的核,并不一定使用高斯1.A和B点的差异可以用深度计算出来 A和B不应该又贡献2.B和C的差异可以用法线区分 B和C不应该又贡献3.D

2022-03-13 17:15:16 242

原创 计算机图形学--实时光线追踪

实时光线追踪光线追踪的应用场景实时光线追踪的算法和传统光线追踪在算法本身上并没有什么差异。而是硬件上的突破让速度更快。RTRT关键的技术是降噪下图的降噪后的效果工业界对于实时光线追踪的降噪是如何做的思路:1.当前帧需要滤波,假设前一帧是滤波好的2.假设场景的运动是非常连续的,使用motion vectors 找到一个像素上一帧在哪里3.把上一帧的结果拿到当前帧来用,渲染当前场景当前帧的某个像素点,在上一帧该点在什么位置。如下图蓝色点所示。当前帧的渲染结果,依赖上一

2022-03-13 12:16:44 946

原创 计算机图形学--基于物理的材质2

基于物理的材质LTC方法LTC解决的问题是,在微表面模型下,我们用一个多边形的光源去照亮物体,它的着色情况(不包含阴影)。思路:1.下图第一张图的方向,通过线性变换变换到第二张图的方式2.将光源也做类似的线性变换3. 在以下变换情况下的积分,是有解析解的Disney’s Principled BRDF微表面模型不好解决的问题:木头桌子涂上清漆(清漆本身没有颜色)。微表面模型只能解决一层材质。思路:1.看起来并不是物理的,或者说并不是基于物理参数的2.比较能够好描述的(比

2022-03-12 16:16:30 201

原创 计算机图形学--基于物理的材质

计算机图形学材质

2022-03-08 17:57:51 304

原创 C++新特新

字符串分割#include #include std::vectorstd::string s_split(const std::string& in, const std::string& delim) {std::regex re{ delim };return std::vectorstd::string {std::sregex_token_iterator(in.begin(), in.end(), re, -1),std::sregex_token_iterator

2022-03-08 09:17:56 500

原创 计算机图形学--全局光照(屏幕空间:SSDO,SSR)

SSDO使用屏幕的次级光源光照SSDO基本思路SSAO与SSDO差别DO中假设间接光照来自近处的AO假设间接光照来自无穷远处问题:1.小范围的间接光照2.可见性问题3.屏幕空间SSR**SSR场景举例**观察1:基本上反射的都是场景中存在的SSR流程:步长多大,一次走多远加速一个光线和场景的求交问题:只有壳的信息,眼睛看不到手掌心,手掌心的反射就没有了反射出屏幕的信息无法获取假设反射物是diffuse的![在这里插

2022-01-14 21:07:01 1683

原创 计算机图形学--全局光照(3D 空间:LPV,VXGI;屏幕空间:SSAO)

LPV算法LPV做全局光照:1.质量好2.非常快LPV的基本思想:1.在任何一个shading point上,我如果可以立刻知道四面八方到达该点radiance,就可以很好的做全局光照。2.在直线转播的过程中,radiance是不变的量3.解决方法:将场景分成3D的网格,这些格子用来传播radiance。需要传播间接光照的radiance。LVP算法思路:Step1 : 找到次级光源(RSM方法)Step2:a.将次级光源放到对应的格子里面b.对于每个格子,找到虚拟光源c

2022-01-06 21:05:11 1496

原创 计算机图形学--全局光照RSM

全局光照直接光照+间接光照=全局光照间接光照:从Q点反射到P的光照,Q点可以假设为光源(次级光源)直接光照直接光照 + 一次弹射的间接光照想得到间接光照,需要解决的问题:1.哪些是我们的次级光源(被直接光照照到的物体) shadowmap2.次级光源的贡献如何计算1.假设所有的反射物都是diffuse的 ,接受物可以不是diffuse2.次级光源像各个方向发散复习辐射度量学的概念光源积分1.不去计算次级光源和它照亮物体的可见性大胆假设...

2022-01-03 02:02:14 888

原创 计算机图形学--环境光照2

环境光照的阴影

2021-12-29 12:07:19 1341 2

原创 Unity Shader的内置变量

2021-12-11 11:26:24 2571

原创 Unity Shader的形式

表面着色器顶点/片元着色器固定函数着色器

2021-12-10 23:09:41 2063

原创 Unity入门之--UnityShader基础

ShaderLabUnity提供了ShaderLab专门为Shader服务。UnityShader结构Shader "Unlit/NewUnlitShader"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass

2021-12-10 23:00:43 293

原创 计算机图形学--基于物理的计算机动画入门

待定

2021-12-05 16:51:30 163

空空如也

空空如也

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

TA关注的人

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