- 博客(44)
- 资源 (2)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 毕业前的flag
c++ 补基础立个flag,希望能在毕业前c++专栏博客200+最近在啃C++ Prime Plus,发现还是有很多基础没有补全和弥补目前进度:Prime Plus(175/745)待看书清单计算机图形学shader入门精要游戏引擎架构...
2020-09-26 16:09:57
179
原创 公司的毕业生封闭培训有感
培训结束后,我找到了leader对工作中的问题,提出了我心中的几个困惑点,不管怎么说,我觉得对于新人来说,保持对导师一周至少一次、对leader一个月至少一次的沟通机会是特别有帮助的。Q作为一个秘书,上司吩咐你需要通知所有参与会议的经理打印资料,你再三地在通知群说了两遍,并且用红字标明事情的重要性,但结果到开会的时候,很多经理却并没有打印资料,你觉得这是谁的错?找到了培训所在班的大巴,咦~居然有六个班,每个班五十多号人,好多。Q程序员35岁年龄问题(提问题的是一个27岁的同学)...
2022-07-27 00:24:52
301
1
原创 光线追踪学习:Oren-Nayar Reflectance model
光线追踪学习之Oren-Nayar Reflectance modelMicrofacet Models(微表面模型)许多基于几何光学的表面反射和透射建模方法都是基于这样的想法:粗糙的表面可以被建模为小的微孔的集合。下图显示了一个相对粗糙的表面和一个更光滑的微平面表面的横截面。为了区别,使用术语microsurface来描述microfacet表面和macrosurface来描述下面的光滑表面。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dYkLWofO-16533
2022-05-24 10:00:00
1690
原创 c++中返回值优化(RVO)和命名返回值优化(NRVO)介绍
RVO和NRVO介绍前言半年前就想写一篇关于RVO和NRVO的介绍,但碍于没什么时间去写博客。在跟身边人进行学术探讨的时候,会发现部分人可能尝到了编译器给它做返回值优化的好处,知道这段代码被优化了,但为什么 如何去做,却不知道。因此,为了尝试说明RVO和NRVO的好处、使用场景、局限性等,在看了数个StackOverflow的讨论之后,有了这篇博客。RVO(返回值优化(Return Value Optimization))如果函数返回一个无名的临时对象,该对象将被编译器移动或拷贝到目标中,在此时
2022-03-07 16:10:37
3918
1
原创 C++ 特性进阶学习总结(一)(三/五/零之法则、RAII、CRTP、RTTI、RTTR)
三/五/零之法则、CRTP、RAII、RTT、类型擦除、auto与std::vector<bool::reference、不能有const_cast<>(T)的原因,c++20初始化表达式
2022-02-11 13:26:58
1987
原创 记录自己Unreal Engine配置中出现过的问题
此文会持续更新,记录遇到的奇怪事情:)编UE的时候(dll经常会编译失败)【md,编几小时已经够折磨了,还犯病】,直接把dll删了,重新编(快速有效)通过.uproject生成的解决方案有Client和Editor,Client不经常用(看项目情况),如果没有使用到Client,选了这个解决方案,就出以下问题,切到Editor模式即可...
2021-12-30 17:45:30
8061
原创 More Effective C++ 条款(1-11)总结
More Effective C++ 基础议题(条款1-4)总结条款1:仔细区别pointers和references如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)这个变量,那么应该使用pointer,因为可将pointer设为null,反之设计不允许变量为null,那么使用reference以下这是有害的行为,其结果不可预期(C++对此没有定义),编译器可以产生任何可能的输出 char *pc = 0; // 将 pointer 设定为nul
2021-12-23 16:18:56
719
原创 记录自己VS配置中出现过的问题
此文会持续更新,记录遇到的奇怪事情:)github拉下来的proj,build生成的.lib放进个人项目中就会出错,检查项目的运行时库是否对应(MT/DLL)
2021-12-12 11:10:49
324
原创 Vulkan中shader glsl编spv spv反编译glsl方式
前言由于我经常容易遗忘编译的方式,故在此进行记录,因为用Vulkan做RayTracing,所以传统的glslc因version不够会经常报错,识别不到GL_EXT_ray_tracing等东西GLSL->SPVgithub上找到的一个库,spirv-cross,clone后,cd在SPIRV-Cross\目录,然后输入以下命令即可,封装成.batset shader_path=B:\repos\Vulkan\src\RayTracing\assets\shadersglslangValid
2021-11-14 10:42:39
6715
5
原创 vcpkg安装Building package brotli:x64-windows failed with: BUILD_FAILED问题缺失applocal.ps1
前言在输入.\vcpkg.exe install brotli:x64-windows后看到如下提示,于是去看log发现提示vcpkg/scripts/buildsystems/msbuild/applocal.ps1' is not recognized as the name of a script file,原来是这个文件缺失了,于是直接去vcpkg官网去补充这个文件,最终好了https://github.com/microsoft/vcpkg/blob/9b4535e7ee7673fb8515d
2021-10-19 10:57:36
4481
原创 Microfacet模型采样下的brdf
本文前言在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子),为了搜寻解决办法,因此看到了这篇博客,因为是全英文,所以就花了一点时间翻译了一下,方便日后重新观看,红色字对原博客的补充说明前言最近我正在为我的渲染器开发microfacet brdf模型,我注意到为microfacet brdf提供一个单独的采样方法是非常必要的,而不是使用默认的方法,因为默认的方法通常用
2021-09-27 14:09:54
469
原创 低差异序列 (low-discrepancy sequences)之Halton序列均匀产生多维随机数的介绍与实现
Halton序列在统计学中,Halton序列是用于生成空间中的点的序列,如Monte Carlo模拟的数值方法,虽然这些序列是确定性的,但它们的差异性很低,也就是说,在许多方面看起来是随机的。它们在1960年首次提出,是准随机数列的一个例子。它们概括了一维Van der Corput序列用于生成R2R^2R2中(0,1)x(0,1)点的Halton序列的例子Haton数列是根据一种确定性的方法构建的,它使用共素数作为基数。作为一个简单的例子,让我们把Halton数列的一个维度基于2,另一个基于3。为了
2021-09-24 16:25:59
3250
原创 低差异序列 (low-discrepancy sequences)之Hammerysley在半球中采样点方法的介绍
半球上的HammersleyHolger Dammertz一组关于如何在2D中使用Hammersley点集以在着色器程序中快速实用地生成半球方向的笔记。如果你发现任何错误或有意见,不要犹豫,请联系我或在我的博客上留言。1.概述在编写与光照有关的着色器时,人们经常需要一些以表面法线为方向的半球方向。通常的做法是预先计算这些方向,并将它们存储在一个静态/统一的数组中,或者创建一个包含这些方向的可查询的纹理。在这一页,我研究了如何在着色器中直接使用2d中的Hammersley点集来快速计算合理的分布方向。
2021-09-24 01:48:01
1835
原创 【光线追踪】 流程分析与实现的路径跟踪渲染器
前言搞光追是图形学的浪漫,先放张目前渲染图,分析了部分代码框架,后续补上完整效果左边黄色球是Blinn-Phong,右边是MicrofacetBVH,1024x1024,200spp,2x2MSAA,VS Omp32线程,渲染了二十三分钟基于games101作业7的作业框架...
2021-09-19 10:51:09
332
原创 回顾games101中的SSAA和MSAA
回顾games101中的AA(抗锯齿)前言善于进行课后总结,可以更加巩固自己的知识和具体细节锯齿(走样)产生的原因本质上,在光栅化阶段中,用有限离散的数据想表示连续的(类似三角形的某一边),就可能存在采样点不够的问题,也就引申出了锯齿(走样 Aliasing)的这个概念,在信号处理以及相关领域中,走样(混叠)在对不同的信号进行采样时,导致得出的信号相同的现象。它也可以指信号从采样点重新信号导致的跟原始信号不匹配的瑕疵具体到实时渲染领域中,走样有以下三种:[3]几何体走样(几何物体的边缘有锯齿)
2021-08-28 15:43:36
1171
原创 回顾Games101图形学(一)几何变换中一些公式的推导
回顾Games101 chatper1 - 6前言本文只写回顾后重新加深认识的知识透视除法的意义经过MVP矩阵之后,将模型空间下某点的坐标,转换成了裁剪空间下的坐标,此时因为裁剪空间的范围是x∈[-W/2,W/2]和y∈[-H/2,H/2],所以经过以下两个变换,其中除以pz就是透视除法一:−1≤2⋅(pxpz⋅near)w≤1−1≤2⋅(pypz⋅near)h≤1-1≤2·\frac{\left( \frac{p_x}{p_z}·near \right)}{w}≤1\\-1≤2·\fra
2021-06-24 16:22:38
499
1
原创 vscode 配置lua环境的步骤
前言vscode中code runner无法正常运行lua的问题下载lua首先去官网下载lua的压缩包http://joedf.ahkscript.org/LuaBuilds/编辑系统环境将压缩包解压后,添加到系统环境中Code Runner编辑输入ex搜索Executor Map点击Edit in settings.json最后更换"lua":“D:\Lua\lua.exe” 后面换成前面压缩包解压的路径然后就可以了...
2021-06-09 09:24:25
5830
2
原创 C++STL—pair<int,int>与unordered_map的结合使用
因为unordered_map内部是由哈希表实现的,哈希表中的每一项为一个桶,分别装着键和值,原stl中不包含pair<int,int>类型的键,所以需要自定义#include <bits/stdc++.h>using namespace std;// 分别计算出内置类型的 Hash Value 然后对它们进行 Combine 得到一个哈希值// 一般直接采用移位加异或(XOR)得到哈希值struct HashFunc{ template<typename T,
2021-04-19 14:39:31
3533
2
转载 高斯模糊介绍
转自:1.高斯模糊的算法:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html 通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。 "模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。 本文介绍...
2021-03-17 16:38:30
6322
转载 OBB碰撞算法-2D
概述本篇博客来源:https://www.jianshu.com/p/2c842362fb22/OBB 即 oriented bounding box(方向包围盒),用来抽象化复杂几何图形,以简化碰撞如下图,可以看到,在 2D 视图中计算真实的碰撞,需要将物体外轮廓离散为多条线段,来计算物体位置关系;而计算包围盒的碰撞,则相当于将问题抽象和简化为了:求中两个矩形的位置关系真实轮廓与包围盒判断两矩形相离如下图,在坐标系中有两个矩形,我们欲解决的问题可描述为:已知两矩形的中心位置、长宽、
2021-03-17 14:16:48
851
原创 腾讯游戏学院 游戏程序设计第十章(个人总结)—— 网络同步技术
腾讯游戏学院 第十章 网络同步技术 学习打卡同步一致性及时性鱼和熊掌的关系输入模块= 函数输入核心逻辑模块函数输出控制模块函数输出输出模块画面定点数以32位定点数为例内部的原始表示方式为32位整数基于定点数的四则运算用整数运算来实现定点数的运算基于定点数的开方及超越函数多项式拟合、迭代法、查表法等基于定点数的随机函数如何得到一致性的逻辑及对应的状态保持客户端的版本一致不要依赖不确定性的外部逻辑(比如UI交互逻辑)
2021-01-18 23:00:51
310
原创 腾讯游戏学院 游戏程序设计第八章(个人总结)——材质着色与光照
第八章材质着色与光照 学习打卡这章老师讲的嘴速有点快…后续补充物理回顾什么是渲染平衡物理和有限计算资源的艺术基于物理渲染(材质+光照)=光与物质的交互电影的画面:离线渲染基物流渲染:PBR(光照基于更精确的物理模型进行渲染)产生波的特性同时体现出粒子的特性材质光与粒子交互粒子产生极化的现象,电子吸收光一部分的能量,原子内部的电子从低能态跃迁到高能态,对某些频率的可见光进行吸收,看到红色物体,是因为物体把除红色以外别的波长吸收掉,只剩下红色去反射人的眼睛光通量:每单位时间内产生的
2021-01-16 15:31:14
196
原创 腾讯游戏学院 游戏程序设计第九章(个人总结)——游戏动画
第九章游戏动画 学习打卡视觉暂留1824年,马克罗杰首次提出“视觉停留”视觉停留(视觉暂留)(英文:Presistence of vision),是光对视网膜所产生的视觉,在光停止作用后,仍然保留一段时间的现象人眼视觉停留时间:0.1-0.4秒(约为1秒播放2.5张或10张图片)采样是将信号从连续时间域上的模拟信号转换到离散时间域上的离散信号的过程帧率(frame per second/fps)指每秒播放静态画面的个数动画采样越多、帧率越高,动画效果就越好不同场景有不同帧率要
2021-01-16 15:27:12
834
原创 内存的分配和回收实验(首次适配、下次适配、最佳适配、最坏适配)
第6次实验 内存分配与回收模拟实验目的通过使用位图或空闲表,跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收管理过程;实验内容假设内存容量为256KB,并且划分成1KB大小的块,也即每个内存单元为1KB。一个进程所需要的内存为3到10个单元。同时假设一个作业在运行过程中所需内存的大小不变。模拟包括3部分实现特定的内存分配算法(first fit,next fit, best fit, worst fit)四种实现内存回收模拟每种内存分配策略对应
2020-12-16 19:22:23
4241
3
原创 MIT HAKM 算法求二进制形式1的个数
MIT HAKM算法前言: 求32位无符号数的二进制形式中1的个数,这是个经典的题。求解这个题目,我们常规的做法就是将此二进制数右移31此,每次移位后判断最低位的那个是否为1,如果是1,那么计数加一那么有没有更优的解法来减少移位和运算次数呢?在1972年MIT人工智能实验室发布的一本备忘录中,提到了一个非常有趣的算法来解决这个问题,下面我们先来看以下这个算法是怎么做到的上图的count函数即为MIT HAKM算法,其原理则是分治法。运算步骤:一个自然数的多项式表示nN%(n−1)=1n
2020-10-10 14:56:27
332
原创 变量存储的五种形式
持 续 性作 用 域链 接 性如 何 声 明自动自动代码块无在代码块中寄存器自动代码块无在代码块中,使用关键字register静态,无链接性静态代码块无在代码块中,使用关键字static静态,外部链接性静态文件外部不在任何函数内静态,内部链接性静态文件内部不再去任何函数内,使用关键字staticconst声明的对象默认为文件的局部变量,此变量只能在那个文件中,不能被其他文件访问,通过指定const变量为ex...
2020-10-10 14:30:55
462
转载 C++异常 和 SEH异常 的一点小结
【如何区分异常】 “C++异常” 就是 try{}catch(...){} “SEH异常” 就是 __try{} __except(-1/0/1){} 目前微软所有的VC编译器(从VC6到VC2010),都默认是打开对C++异常的编译支持的(位于项目选项中的“代码生成”->启用C++异常:/EHsc,VC6是Enable Exception h...
2020-09-26 17:00:50
640
原创 c++ 左移/右移运算符总结
c++ 左移/右移运算符总结逻辑移位和算数移位明确两种概念(逻辑移位和算数移位)逻辑移位和算数移位有区别,仅针对于有符号整数的左移/右移运算,对于无符号整数,没有这两者运算之间的差距无符号整数采用逻辑移位,无论左移右移都用“0”填充有符号整数逻辑移位即为有符号整数进行左移运算,高位舍掉,低位进行补“0”算数移位即为有符号整数进行右移运算,低位舍掉,低位补“符号位”常数对于常数,只要左移超过31位,就是0#include <bits/stdc++.h>#i
2020-09-26 16:31:06
5172
原创 Unity—获取人物当前执行的动画
获取人物当前执行的动画名称 public string getCurrentClipInfo() // 获取当前执行的动画 { AnimatorClipInfo[] m_CurrentClipInfo = gameObject.GetComponent<Animator>().GetCurrentAnimatorClipInfo(0); return m_CurrentClipInfo[0].clip.name; }...
2020-07-27 11:21:46
3886
转载 Unity Component.isActiveAndEnabled 确切含义解析
以下结果为测试结论。isActiveInHierachy,就是等价于gameObject是否处于激活状态,与简单的理解相同。isActiveAndEnabled,需要3个条件:gameObject的isActiveInHierachy为true enabled为true 正在或者已经调用OnEnable所以:在一个脚本的O...
2020-07-24 20:14:40
2050
原创 unity—四元数到欧拉角的之间的转换函数
四元数q转欧拉角vVector3 v = q.eulerAngles;欧拉角v转四元数qQuaternion q = Quaternion.Euler(v);
2020-07-23 12:12:27
803
原创 Unity—渲染层级关系—Camera、Sortinglayer、OrderInLayer
渲染层级关系渲染层级:1、CameraDepth 先绘制depth低的物体默认主摄像机Depth为-1,后在Hierarchy创建Camera的Depth默认比主摄像机高,所以Scene中后创建的摄像机的投影画面会遮挡住主摄像机2、同一个cameraSorting layer默认Default层级最低,新增Layer层优先级比Default高3、同一个Sorting layerOrder in layer在相同的Sorting layer下由Order in layer的大
2020-07-15 14:15:40
1106
原创 Unity 愤怒的小鸟拖尾效果——基于Pocket RPG Weapon Trails插件
Pocket RPG Weapon Trails 武器拖尾插件前言导入插件给小鸟加入子物体并添加拖尾WeaponTrail脚本接下来给小鸟加入TestMyTrail脚本控制拖尾的开始和结束时间小鸟脚本的修改,调用MyTestTrail脚本的拖尾开始和结束前言在学习愤怒的小鸟例子的时候,发现了这个插件,查阅了csdn上其他博客的分享,给例子添加了拖尾的效果Pocket RPG Weapon Trails 武器拖尾效果包:http://download.csdn.net/detail/akof1
2020-07-13 17:27:59
734
原创 腾讯游戏学院 游戏程序设计第七章(个人总结)——实时图形渲染管道
第七章实时图形渲染管道 学习打卡场景管理特别适合大规模的广阔室外场景管理。一般来说如果游戏场景是基于地形的(甚至没有高度)(如城市、平原、2D场景),那么适合用四叉树来管理。而如果游戏场景在高度轴上也有大量物体需要管理(如太空、高山),那么适合用八叉树来管理。顶点着色:模型变换模型(如网格)通常定义于模型空间为了把一个模型渲染成多个实例,会把模型的顶点位置V_model变换到世界空间Vworld=Mmodel−>worldVMmodelV_{world}=M_{model->w
2020-07-11 15:55:03
929
原创 腾讯游戏学院 游戏程序设计第六章(个人总结)——游戏性系统
第六章学习打卡迭代:MDA,即机制(Mechanics),动态(Dynamics), 美学(Aesthetics),是一种解构游戏的框架。
2020-07-10 14:26:48
304
原创 腾讯游戏学院 游戏程序设计第五章(个人总结)——随机数在游戏中的应用
第五章学习打卡线性同余法:Xn+1=(aXn+c) mod mX_{n+1} = (aX_n + c)\;mod\;mXn+1=(aXn+c)modm均匀分布VC的rand()函数范围是[0,32767]如何取得一个[0,9999]的随机数– x = rand % 10000的问题拒绝采样法 如果取到超过三万,重新取一次方法1: x = rand() * (RAND_MAX+1) + rand()方法2:用梅森旋转如何取得一个0~1的随机浮点数方法1:x =
2020-07-09 23:03:31
321
原创 腾讯游戏学院 游戏程序设计第三章(个人总结)——三维几何学
第三章学习打卡旋转欧拉角分别绕xyz轴旋转矩阵Rx(θ)(1000cosθ−sinθ0sinθcosθ) R_x(θ)\left( \begin{matrix} 1 & 0 & 0 \\ 0 & cosθ & -sinθ \\ 0 & sinθ & cosθ \end{matrix} \right)Rx(θ)⎝⎛1000cosθsinθ0−sinθcosθ⎠⎞Ry(θ)(cosθ0−sinθ010sinθ0c
2020-07-08 23:21:15
287
ShaderVS vs2019 shader高亮代码提示
2020-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人