9 syddf_shadow

尚未进行身份认证

暂无相关简介

等级
TA的排名 6w+

【Vulkan学习记录-基础篇-5】多线程渲染

现代的图形API都具备对多线程渲染友好的特性,所谓的多线程并不是指GPU端的多线程图像渲染,而是指在CPU提交DrawCall时所做的一系列工作可以并行化,也就是说多线程渲染其实是在CPU端提升程序的性能。在使用D3D 11或者OpenGL的时候,每次提交DrawCall之前,都需要将相关的状态进行更新,将需要用的资源进行绑定,在提交DrawCall时,还要进行相关的参数检查等工作,这些看上去耗...

2019-10-23 19:29:01

圆面、球面上的采样方法

(本文内容主要来自《pbrt》13.5、13.6)如果yyy满足概率密度分布p(y)p(y)p(y),如果要随机地获取一个yyy的话,可以先获取一个随机数ttt,然后代入它的累积概率密度P(y)=tP(y)=tP(y)=t,然后求解出yyy即可。但是很多情况需要的不仅是对单个变量做采样,往往需要对多个维度下的多个变量进行采样,而这些多个变量之间很有可能有互相关联,并且直接采样也不容易,可以考虑...

2019-10-23 17:34:51

【Vulkan学习记录-基础篇-4】Vulkan中的同步机制

在Vulkan中,对资源读写所需要做的同步是应用程序的职责,Vulkan本身只提供了很少的隐式同步机制,其余的都需要在程序中显式地使用Vulkan中的同步机制来实现。提交顺序提交顺序是Vulkan中的一个非常基本的概念,它本身并不具有任何同步的意义,但是不管是Vulkan提供的隐式同步,还是用户要自己实现的显式同步,都要以这个精确的概念为前提。在Vulkan中,用户需要将命令写入Comman...

2019-09-25 16:25:19

【Vulkan学习记录-基础篇-3】纹理和模型导入、生成Mipmap

前两篇的代码是在太过于冗杂,于是我做了一下简单的封装,现在的代码结构为:VKApp 负责初始化窗口以及VkInstance、VkDeviceVKResourceCreator 负责创建各种资源(Image、ImageView、Buffer等)VKScene 负责初始化Pipeline RenderPass等,在每一帧中执行渲染VKCommand 负责创建所有可复用的命令(CopyBuff...

2019-08-09 23:48:26

【Vulkan学习记录-基础篇-2】用Vulkan画两个重叠的矩形

在前一篇中完成了对Vulkan的初始化和三角形的绘制,其中很多东西还没有被用到,这一节最终将绘制这样两个重叠的矩形,并且它们会一直绕着屏幕中心点进行旋转。将要补充使用的内容有:VertexBuffer、IndexBuffer、StagingBuffer、UniformBuffer的创建和使用,深度缓冲的创建和设定。代码将基于第一节的内容进行增添和修改。1. 创建VertexBuffer、I...

2019-08-06 11:21:50

【Vulkan学习记录-基础篇-1】用Vulkan画一个三角形

好久没有更新过博客了,上半年一直忙着找实习的事情,不过现在已经入职一段时间了,也可以抽出时间来继续整理一些内容,所以最近会尽量变得勤快一点来写博客。Vulkan是新一代的图形API,具有跨平台、高性能的优势,它强调减少对驱动的依赖性,和传统的图形API(例如OpenGL、Direct3D)相比,它需要程序员自己在程序方面做以往驱动做的事情,因此Vulkan的代码量会比传统的图形API多很多,学习...

2019-07-30 14:59:57

TrueType字体文件解析和字体光栅化

本文主要记录一下这几天做的一个小Demo,它能够读取.ttf格式的字体文件,获取其中的相关数据,将得到的字体信息光栅化处理后输出到一张PNG文件中,最终输出的结果如下:有兴趣的可以参考一下源码:https://github.com/syddf/TTFFontRenderTTF文件解析首先要注意ttf采用的是大端编址,即最低位的字节在最后面,而最高位的字节在最前面,如果所在的环境用的是小...

2019-03-16 16:42:05

pbrt源码中用全主元消去法求矩阵逆的实现

《pbrt》一书配套源码上对于矩阵求逆使用的是全主元消去法,但是它的实现与我所见到过的全主元消去法还是略有不同的,有的地方还是值得思考一下的。学过线性代数的应该都知道求矩阵的逆有伴随矩阵法和初等变换法等方法,而高斯消元法、列主元消去法、全主元消去法这些算法都基于初等变换法,简单说一下,对于矩阵AAA,我们想要求一个矩阵BBB,使得AB=IAB=IAB=I,那么可以先对AAA做一系列的初等行(列)...

2019-02-06 01:10:47

平方根倒数的一个快速近似计算算法

已知一个浮点数xxx,现在需要求1x\frac{1}{\sqrt{x}}x​1​,这是一个非线性方程组的求解问题,可以采用不动点迭代法、牛顿迭代法之类的方法来解决。但是早在上个世纪,在游戏《Quake III》中,开发者就采用了一种非常快速求解这个问题的算法,这个算法非常有意思,而且现在也被一些GPU在硬件上实现,下面来看一下它的思路。首先,设xxx按照IEEE浮点数表示规则对应的无符号整数为I...

2019-01-01 22:09:27

非线性方程的数值解法

设有一个单变量的非线性方程f(x)=0f(x) = 0f(x)=0,往往这样的方程没有直接的求根公式,因此没有直接方法计算,只能使用迭代法来求数值解,二分法就是这样的一种方法,这里介绍一下其他的几种方法不动点迭代法我们可以将非线性方程f(x)=0f(x) = 0f(x)=0改写为x=ϕ(x)x = \phi(x)x=ϕ(x),满足这样式子的x称作ϕ(x)\phi(x)ϕ(x)的一个不动点,求f...

2018-12-30 20:48:48

快速傅里叶变换与快速数论变换

在拉格朗日插值法与牛顿插值多项式中有说明当给定n+1个点值序列(x0,y0),(x1,y1),⋅⋅⋅,(xn,yn)(x_0,y_0),(x_1,y_1),···,(x_n,y_n)(x0​,y0​),(x1​,y1​),⋅⋅⋅,(xn​,yn​),其中任意两个xxx都互不相同时,有且只有一个n次多项式函数包含这些点值,换句话说,一个n次多项式可以由n+1n+1n+1个点值来表示,如果我们需要获...

2018-12-28 22:26:08

拉格朗日插值法与牛顿插值多项式

多项式插值先有一个函数f(x)f(x)f(x),如果给定在区间[a,b][a,b][a,b]上的n+1n+1n+1个点a<=x0<x1<⋅⋅⋅<xn<=ba<=x_0<x_1<···<x_n<=ba<=x0​<x1​<⋅⋅⋅<xn​&

2018-12-28 18:57:37

TSP问题总结归纳

TSP问题即旅行商问题,经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的哈密尔顿回路。旅行商问题有很多种不同的问法,最近做了几个关于TSP的题,下面总结一下。由于大部分TSP问题都是NP-Hard的,因此很难得到什么高效...

2018-10-26 13:02:07

智能指针内容整理

智能指针这个东西想必学过C++的人都应该听说过或者使用过,但是应该有一些人和我一样对其只有一点浅显的认识,今天查了一些关于智能指针的资料,下面对其做一些整理:为什么要有智能指针在用C++动态内存分配的时候,使用new操作获取了一块内存,那么一定要在合适的地方将其delete掉,否则就会造成内存泄漏,这一点都明白,但是实际操作的时候总是会忘记这个delete操作,而智能指针就是为了避免这样一个问...

2018-10-03 17:32:58

求解最大流的四种算法介绍、利用最大流模型解题入门

上一篇中介绍了网络流的基础,最大流最小割定理的证明,下面来看如何求一个容量网络的最大流,这里介绍四种算法:EK算法、SAP算法、DINIC算法、HLPP算法。这四种算法中,前三种基于增广路,最后一种基于预流推进。基于增广路的算法Ford-Fulkerson算法先来简单提一下Ford-Fulkerson算法。在上一节中证明了,如果一个可行流中没有增广路,那么此时这个可行流的流量就是最大流,因...

2018-09-22 15:03:41

网络流基础、最大流最小割定理以及证明

网络流的基本概念网络流问题都是建立在类似上图的有向图之上,有向图的边的权值代表容量。其中A代表源点,C代表汇点,一般考察的问题情景就是从A中流出流量,经过这些有向边,最终汇集到C中。像这样的具有源点和汇点,并且每条边的权值均为正数的有向图就被称作是容量网络,图中的这些边被称作是弧,弧的权值被称作弧的容量,它代表着能够通过这条弧的最大流量。而经过弧上的实际流量被称作弧的流量,所有这些弧的...

2018-09-15 17:10:45

线性时间求解点集所有点最近邻的Felzenszwalb算法

最近在做字体渲染的相关内容,利用FreeType可以提取出ttf文件中具体某个字符的轮廓图,这个轮廓图是二值化的图像,后续的处理需要用到图像上的每个点到字体轮廓线的最近距离,即要求平面上的每个点与轮廓线的最近邻。可以考虑使用KD树,这里介绍一下Felzenszwalb算法,它可以在O(KN)的复杂度内完成所有点的最近邻求解,其中K是点集的维度,N是点的总个数。一维情形的求解首先介绍一维...

2018-09-10 22:43:50

带权并查集

带权并查集需要先理解一般的并查集,不明白的可自行先搜索有关内容一般的并查集主要记录节点之间的链接关系,而没有其他的具体的信息,仅仅代表某个节点与其父节点之间存在联系,它多用来判断图的连通性,如下图所示,这是一个并查集,其中箭头表示父子关系,可以看到这些边没有记录其他的任何信息。而有的时候在这些边中添加一些额外的信息可以更好的处理需要解决的问题,在每条边中记录额外的信息的并查集就是带权并...

2018-09-02 16:03:09

斯坦福大学公开课-傅里叶变换及其应用-学习记录6-离散傅里叶变换

本篇对应视频19-22节,讲义第六章离散傅里叶变换(DFT)的引入上一节提到了,一个信号不可能同时在时域和频域受限,而我们现实世界中的信号往往在时域和频域中都是有限的,因此这两者存在很大的冲突。在计算机中,也不能够处理连续的信号,只能将处理它的离散形式。也就是说我们的目标是: 1.将时间ttt限制在一定范围内:0<=t<=L0<=t<=L0sss限制在一定范围:0...

2018-08-22 23:49:43

斯坦福大学公开课-傅里叶变换及其应用-学习记录5-采样和插值

本片对应视频16-19节 讲义第五章Ш函数的引入 现在有一个函数如上图左所示,如果要把它周期延拓至无穷远如上右图,可以写出Pρ(x)Pρ(x)P_ρ(x)的表达式为:Pρ(x)=∑k=−∞∞P(x−kT)=∑k=−∞∞P(x)∗δ(x−kT)Pρ(x)=∑k=−∞∞P(x−kT)=∑k=−∞∞P(x)∗δ(x−kT)P_ρ(x) = \sum_{k=-\infty}^{\infty}...

2018-08-21 17:21:47

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。