ray tracing in one weekend 中文翻译

写在前头:

2020年3月23日, 本书的全新版本上线啦, 当时笔者正好翻译完第二本书, 提issue的时候得知这个消息, 顿时心态崩了。浏览了一下develop分支下的新版本, 和旧版差异还不少。没办法, 返工吧。

本文翻译自新版本v3.0.1, 相较之前的版本, 新版本改进了许多细节, 修复了一些bug, 并对原来一些比较模糊的地方加以详细的阐释, 并使用了智能指针等c++特性。

译者水平有限, 有些地方读起来难免会感到怪怪的, 还请各位见谅。如果您遇到什么看不懂的地方或者乱七八糟的句子, 那么您很可能是辣鸡翻译的受害者, 这时候请不要犹豫, 直接去阅读原文自救。如果您愿意帮助我改进这个翻译, 请直接在页面底部留言发送邮件zgxmy@126.com, 万分感激!!!

1. Overview 概述
2. Output a Image 输出你的图像
3. The vec3 Class vec3向量类
4. Rays, a Simple Camera, and Background 光线, 简单摄像机, 以及背景
5. Adding a Sphere 加入球体
6. Suface Normals and Multiple Objects 面法相与多个物体
7. Antialiasing 反走样
8. Diffuse Material 漫反射材质
9. Metal 金属材质
10. Dielectric 绝缘体材质
11. Positionable Camera 可自定义位置的摄像机
12. Defocus Blur 对焦模糊
13. Where Next? 接下来学什么?

Read more

Ray tracing in one weekend 疑难点解析与拓展

Ray tracing in one weekend》(一周末搞定光线追踪), 由Peter Shirley所编写的的软渲光追三部曲第一本, 是一本非常好的入门级书籍, 篇幅不多, 一共只有54页, 适合新手学习。

剩下的两本为:
Ray tracing: The next week(光线追踪: 下一周)
Ray tracing: The rest of your life(光线追踪: 余生)

作者已将本书免费发布到公共领域(cc0协议), 点击这里在线阅读本书

本文将解析书中的一些疑难点, 并对原有的程序稍作修改

有时间的话, 可能会考虑来做个全书翻译翻完啦

Read more

修改html代码块中的tab宽度

在写blog中发现的问题, 我的代码块tab默认的宽度是8个空格, 看起来很不舒服, 并且由于缩进太占空间导致显示不全, 遂改之

方法一 将制表符替换为空格

这是一个比较暴力的方法 直接把制表符替换为你需要的指定数目的空格

我这里是用的highlight.js来进行代码块的高亮, 在引用该js文件后直接调用其API, 插入下述代码块

1
2
3
4
5
6
<script>
hljs.configure({
tabReplace: ' ', // 4 spaces
})
hljs.initHighlighting();
</script>
Read more

开启git对文件名的大小写敏感

git默认是不不开始文件名的大小写敏感的, 当你在上传文件时, 如果你修改了文件名的大小写, git会认为你并没有进行修改

我是在做github pages时修改文件名大小写,发现url无法定位到文件导致404时发现git的这个默认设置的

解决方法如下

打开你的git bash, cd到目标git仓库后, 键入以下指令来开启git对该仓库下文件名的大小写敏感

1
$ git config core.ignorecase false
Read more

hexo 自定义 front matter, 并通过其控制评论与分享功能的开关

[随着hexo5.0.0 以及icarus4.0的发布,该页面已失效,现在用户可以直接通过以下方法控制]

1
2
share: true     //是否打开文章分享? 不填写或删除此行默认打开
comments: true //是否打开文章评论? 不填写或删除此行默认打开

在写文章的时候, 有时候希望关闭一些文章的评论和分享功能。那么如何自定义文章评论与分享功能的开启与否呢?

我们需要对主题稍作修改, 我的主题是icarus, 得益于作者优秀的编码习惯, 修改起来十分的方便

注: 不同主题修改的方式不同, 如next主题下, front matter的自定义配置文件在next\scripts\filters\front-matter.js, 整个修改过程也是大相径庭, 基本上所有主题已经完成了一些自定义的front—mattter变量, 我们需要做的就Ctrl+F找到该变量, 然后依样画葫芦

修改

打开主题下icarus\includes\specs\article.spec.js, 添加变量

article.spec.js
1
2
3
4
5
6
7
8
9
10
share: {
[type]: 'boolean',
[doc]: 'share or not',
[defaultValue]: true
},// don't forget the comma
comment: {
[type]: 'boolean',
[doc]: 'comment or not',
[defaultValue]: true
}
Read more

判断射线与是否球体相交, 并计算交点位置

在Ray-tracing中, 计算并判断射线与球体是否相交是不可少的
那么如何来判断一条已知的射线是否交于给定的球体呢?
要计算球体射线交点,我们首先要先给出球与直线的方程

首先是球面方程

$$|x-c|^2=r^2$$

  • x为球面上的点
  • c为球心
  • r为球的半径
Read more