自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Ray Tracing The Next Week》阅读笔记 - 1、综述 & 2、运动模糊

1、综述 在《Ray Tracing in one weekend》中,我们制作了一个简单的暴力路径追踪器。在这个教程中,我们将增加纹理、体积(比如雾),矩形,实例、灯光,以及对物体使用BVH,我们将得到一个“正真的”光线追踪器。 在光线追踪器中的一个启示就是:许多优化虽然使代码变得复杂,但是没有对程序加速太多。作者强烈建议不要过早地优化代码,如果它在执行时间配置文件中没有那么明显,那么等到所有特性都被支持的时候才进行优化。可以在https://in1weekend.blogspot.c...

2020-06-13 01:05:54 644

原创 《Ray Tracing in One Weekend》阅读笔记 - 12、下一步

12.1最后渲染 渲染出封面——许多随机的球体:// 网页上的代码 [main.cc] Final scenehittable_list random_scene() { hittable_list world; auto ground_material = make_shared<lambertian>(color(0.5, 0.5, 0.5)); world.add(make_shared<sphere>(point3(0,-1000,...

2020-06-04 18:19:40 283

原创 《Ray Tracing in One Weekend》阅读笔记 - 11、散焦模糊

现在到了我们的最后一个特性:散焦模糊(所有摄影师都称之为“景深”)。 我们在真正的相机中进行散焦模糊的原因是因为它们需要一个大的孔(而不仅仅是一个针孔)来收集光线。这将使所有的东西都散焦,但是如果我们把一个透镜插入孔中,所有的东西都会在一定的距离上聚焦。你可以这样想象一个镜头:所有来自焦点距离上的特定点的光线——击中镜头的光线——将被弯曲回图像传感器上的一个单点。 投影点到完美聚焦的平面之间的距离称为焦点距离(focus distance)。注意焦点距离(focus distan...

2020-06-04 18:08:04 666

原创 《Ray Tracing in One Weekend》阅读笔记 - 10、可移动的相机

和电解质一样,相机也是一个debug的痛点。首先,我们说明一个可调节的视场(fov),这是你从入口看到的角度。由于我们的图像不是正方形,fov在水平方向和垂直方向上是不同的。作者总是用垂直fov,并且在构造函数中指定它的度数并将其转化为弧度——a matter of personal taste。10.1 相机观察几何体 一开始我们让射线从原点发出并朝向z = -1平面。我们可以让他是 z = -2平面,或者别的什么,只要能使得h于该距离成比例。这是我们的设置: ...

2020-06-04 18:02:45 174

原创 《Ray Tracing in One Weekend》阅读笔记 - 9、电介质

像水、玻璃和钻石这样的透明材料是电介质,当光击中他们时,光线会分成反射光线和折射(透射)光线。我们将随机选择当前光线是反射还是折射,并且每次交互只产生一个散射光线。9.1 折射 最难debug的部分是折射光线。作者先让所有的光线都变成折射光线,在这个项目中,作者尝试将两个玻璃球放在场景中(左边两个): 这个看上很明显不符合现实,现实中透过球体我们应该看到上下颠倒的影像,并且没有奇怪的黑边。 I just printed out the ray straight th...

2020-06-03 22:33:43 284

原创 《Ray Tracing in One Weekend》阅读笔记 - 8、金属

8.1 材料的抽象类 如果我们想要不同的物体有不同的材料,那么有两种做法,一种是硬编码,在通用材质函数中设置很多个参数,要呈现一种材质只需要将其他一些参数置零,或者将材料抽象成一个类。将材料抽象成一个material类会更加优雅。在这个项目中,材质需要做以下两件事:生成散射光线(或者说吸收入射光线) 如果散射,说明射线应该衰减多少我们的抽象类如下:// 网页代码 material.h#ifndef MATERIAL_H#define MATERIAL_Hclass mater...

2020-06-03 13:20:04 249

原创 《Ray Tracing in One Weekend》阅读笔记 - 7、漫射材质

写在开头:这一章介绍了三种不同的生成漫射材质的方法,分别如下面三个图所示:还提到了gamma矫正。(这篇我现在没有太多的见解,基本是直译,斜体部分就是直译部分)(直译)现在我们拥有了物体和每个像素中通过的多条射线,已经可以创作出一些看上去逼真的材质。我们将从漫射材料开始。一个问题是我们是否混合和匹配几何和材质(这样我们可以将一个材质分配给多个球体,反之亦然),或者几何和材质是否紧密结合(这对于几何和材质连接的过程对象可能是有用的)。我们将使用单独的-这是通常在大多数渲染器-但要知..

2020-06-02 15:44:20 444

原创 《Ray Tracing in One Weekend》阅读笔记 - 6、抗锯齿

相机拍摄的物体的边缘一般没有锯齿,因为这些边缘是一些前景和背景的混合。通过对每个像素内的样本进行平均,我们也可以达到同样的效果。虽然对于分层存在争议,但是这里我们不关心这个,因为我们编写的通用ray teacer不能从中获得太多的好处,还会使我们的代码更丑陋。 我们对相机进行了抽象,以便我们接下来制作更酷的相机。6.1 一些随机数函数 我们需要一个随机数生成器,返回范围为[0, 1)的随机实数。“小于1”很重要,因为有时候我们会利用它。 一个简单的实现方法就是...

2020-06-01 15:01:41 212

原创 《Ray Tracing in One Weekend》阅读笔记 - 5、表面法线和多个物体

对于表面法向量的设计决策,有两个要考虑的问题:1、是否要用单位长度“首先是这些法线是否为单位长度。这对于阴影很方便,所以我会说yes,但我不会在代码中执行它。这可能会出现一些细微的bug,所以要注意这是个人偏好,就像大多数类似的设计决策一样。”2、是法向量是否要指向球外。“目前,找到的法线总是在中心向交点的方向(法线指向外)。如果射线从外部与球面相交,法线与射线相交(the normal points against the ray)。如果射线从内部与球面相交,法线(法线总是指向外的)与射线

2020-06-01 03:03:58 444 2

原创 《Ray Tracing in One Weekend》阅读笔记 - 4、在场景中添加球体

4、在场景中添加球体(选择球体是因为比较好计算射线与球体是否相交)(1)射线与球求交在三维空间中,圆心在坐标中心且半径为R的球的方程式为:对于点(x, y, z),如果它在球上,则有:如果它在球内,则有:如果它在球外,则有:如果圆心不在原点,而在点(Cx, Cy, Cz),则球的方程将变成:为了能用vec3类表示这个方程,我们引入向量P= ( x, y, z) 和C = (Cx, Cy, Cz),则上面的方程可以表示为以下的向量形式:我们可以理解为“任何满足上面这个式子的点P都在该

2020-05-28 22:18:42 234

原创 《Ray Tracing in One Weekend》阅读笔记 - 3、ray类

定义三维空间中的射线方程:P(t)=A+tb,这里的A表示射线的原点,b表示射线的方向,P表示这条射线所在的直线上的位置。t是一个实数(在代码中是double),加上不同的t的值,可以表示直线上的不同位置的点。(下面是书上的图片)(1)类中用orig表示原点A,dir表示方向b,类中拥有的方法是:初始化函数获得A,b获得某一t对应的坐标(2)射线与场景求交计算从眼睛到像素的射线找出相交的物体计算射线与物体交点处的颜色作者说,当第一次开发的时候,他总是做一个简单的摄像头来启动和运行

2020-05-28 22:04:44 312

原创 《Ray Tracing in One Weekend》阅读笔记 - 2、vec3类

2、vec3类(1)用class vec3表示:颜色(RGB,没有透明度)、三维空间中的坐标(不含齐次坐标)和方向。这里为了简单,vec3是三维向量类,拥有的函数是:· 获取x,y,z;· 下标[]运算(用于读取vec3)、引用下标运算(用于修改vec3);· 向量长度运算、向量长度平方运算、单位向量运算。· 向量取反、加/减法、数乘/除、点乘、叉乘、位置上的乘法(返回vec3);注意这里用了inline修饰了定义在类外的函数。头文件是定义在其内:#ifndef VEC3_H#define

2020-05-28 21:49:47 744

原创 《Ray Tracing in One Weekend》阅读笔记 - 1、图片格式与输出

1、这里使用的图片格式是.PPM格式,Wikipedia上的解释是:跟着书上的示例程序,在vs上完成编码后运行,在文件所在的Debug目录下有生成的xxxxx.exe文件,在控制台进入.exe文件所在目录,键入“ xxxxx.exe > image.ppm”,就可以将图片保存在image.ppm中。(PS: 官网上的代码有一个小小的问题,就是将j的值一开始设置为 image_height,在计算第一行的像素的时候,g的值在转化为int型时就变成0,输出的图片最上面一行就是只有红色的纯度变化了。

2020-05-28 21:45:24 390

原创 线性时间字符串匹配算法 - KMP

先引出KMP的概念,以下引用自wikipedia:在计算机科学中,Knuth-Morris-Pratt字符串搜索算法(或KMP算法)通过采用以下观察方法来搜索W主“文本字符串”中“单词”的S出现:出现不匹配时,单词本身就包含了足够的信息。确定下一个匹配项从何处开始,从而绕过对先前匹配的字符的重新检查。…这是第一个用于字符串匹配的线性时间算法。场景:找出字符串s1中,字符串s2的出现位置。例题:28. Implement strStr()Implement strStr().Return

2020-05-21 17:47:57 322

原创 leetcode-Permutation in String

Given two stringss1ands2, write a function to return true ifs2contains the permutation ofs1. In other words, one of the first string's permutations is thesubstringof the second string.Example 1:Input: s1 = "ab" s2 = "eidbaooo"Output: True...

2020-05-19 16:03:19 101

原创 leetcode-array-Diagonal Traverse

做题回顾:https://leetcode.com/explore/learn/card/array-and-string/202/introduction-to-2d-array/1167/一道看似复杂的数组Z型遍历问题

2020-03-16 00:38:37 132

原创 leetcode-array-Find Pivot Index

做题回顾https://leetcode.com/explore/learn/card/array-and-string/201/introduction-to-array/1144/其实这道题不难,直接按他提示来就好。就是遍历一遍数组求出数组的SUM,然后再遍历一遍数组,找到第一个(i左边数组的SUM)=SUM-(i左边数组的SUM),返回这个i;找不到就返回-1.这里SUM不会溢出。...

2020-03-15 02:33:58 126

空空如也

空空如也

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

TA关注的人

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