mirror of
https://github.com/ssloy/tinyraytracer.git
synced 2025-01-29 03:47:36 +01:00
Updated Home (markdown)
parent
74d5f9bf8c
commit
35e3789f9e
14
Home.md
14
Home.md
@ -202,20 +202,20 @@ It's incredible, but to add reflections to our render, we just need to add three
|
||||
<a href="https://github.com/ssloy/tinyraytracer/commit/c80479d1d22fe98f41b584972affeb43422a23a6">See it for yourself:</a> when intersecting the sphere, we just compute the reflected ray (with the aid of the same function we used for specular highlights!) and recursively call the cast_ray function in the direction of the reflected ray. Be sure to play with <a href="https://github.com/ssloy/tinyraytracer/blob/c80479d1d22fe98f41b584972affeb43422a23a6/tinyraytracer.cpp#L65">the recursion depth</a>, I set it to 4, try different values starging from 0, what will change in the picture? Here is my result with reflections and a recursion depth of 4:
|
||||
<img src="https://raw.githubusercontent.com/ssloy/tinyraytracer/c80479d1d22fe98f41b584972affeb43422a23a6/out.jpg"/>
|
||||
|
||||
<h1>Этап восьмой: преломление</h1>
|
||||
Научившись считать отражения, <a href="https://github.com/ssloy/tinyraytracer/commit/b69793bf6e8be54973cad1b18185a67dbf11bad1">преломления считаются ровно так же</a>. Одна функция позволяющая посчитать направление преломившегося луча (<a href="https://en.wikipedia.org/wiki/Snell%27s_law">по закону Снеллиуса</a>), и три строчки кода в нашей рекурсивной функции cast_ray. Вот результат, в котором ближайший шарик стал "стеклянным", он и преломляет, и немного отражает:
|
||||
<h1>Step 8: refractions</h1>
|
||||
If we know to do reflections, <a href="https://github.com/ssloy/tinyraytracer/commit/b69793bf6e8be54973cad1b18185a67dbf11bad1">refractions are easy</a>. We need to add one function to compute the refracted ray (<a href="https://en.wikipedia.org/wiki/Snell%27s_law">using Snell's law</a>), and three more lines of code in our recursive function cast_ray. Here is the result where the closest ball is "made of glass", it reflects and refracts the light at the same time:
|
||||
|
||||
<img src="https://raw.githubusercontent.com/ssloy/tinyraytracer/b69793bf6e8be54973cad1b18185a67dbf11bad1/out.jpg"/>
|
||||
|
||||
<h1>Этап девятый: добавляем ещё объекты</h1>
|
||||
А чего это мы всё без молока, да без молока. До этого момента мы рендерили только сферы, поскольку это один из простейших нетривиальных математических объектов. А давайте добавим кусок плоскости. Классикой жанра является шахматная доска. Для этого нам вполне достаточно <a href="https://github.com/ssloy/tinyraytracer/commit/5e0da1f09fdbc585caa16df4c7b2f527d61536ef">десятка строчек</a> в функции, которая считает пересечение луча со сценой.
|
||||
<h1>Steo 9: beyond the spheres</h1>
|
||||
Till this moment we rendered only spheres because it is one of the simplest nontrivial mathematical objects. Let us add a plane. The chessboard is a classic choice. For this purpose, it is quite enough to add <a href="https://github.com/ssloy/tinyraytracer/commit/5e0da1f09fdbc585caa16df4c7b2f527d61536ef">a dozen lines</a>.
|
||||
|
||||
Ну и вот результат:
|
||||
And here is the result:
|
||||
<img src="https://raw.githubusercontent.com/ssloy/tinyraytracer/5e0da1f09fdbc585caa16df4c7b2f527d61536ef/out.jpg"/>
|
||||
|
||||
Как я и обещал, ровно 256 строчек кода, <a href="https://github.com/ssloy/tinyraytracer">посчитайте сами</a>!
|
||||
As promised, the code has 256 lines of code, <a href="https://github.com/ssloy/tinyraytracer">check it for yourself</a>!
|
||||
|
||||
<h1>Этап десятый: домашнее задание</h1>
|
||||
<h1>Step 10: home assignment</h1>
|
||||
Мы прошли довольно долгий путь: научились добавлять объекты в сцену, считать довольно сложное освещение. Давайте я оставлю два задания в качестве домашки. Абсолютно вся подготовительная работа уже сделана в ветке <a href="https://github.com/ssloy/tinyraytracer/tree/homework_assignment">homework_assignment</a>. Каждое задание потребует максимум десять строчек кода.
|
||||
|
||||
<h3>Задание первое: Environment map</h3>
|
||||
|
Loading…
x
Reference in New Issue
Block a user