109 lines
7.7 KiB
HTML
109 lines
7.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>MiniRT Preview</title>
|
|
<link href="/css/style.css" rel="stylesheet">
|
|
<link href="/css/minirt.css" rel="stylesheet">
|
|
<link href="/css/tailwind.css" rel="stylesheet">
|
|
</head>
|
|
<body>
|
|
<div class="flex flex-col w-full">
|
|
<header class="flex flex-col h-48 w-screen text-[#FFF6DA]" style="background-color: rgb(169, 74, 74);">
|
|
<h1 class="p-8 grow place-content-center text-center text-5xl">My Personal Website</h1>
|
|
<div class="w-screen flex p-1 justify-center px-30 gap-4" style="background-color: #889E73">
|
|
<a class="p-4 hover:bg-[#aa9E73ff] rounded-md" href="/">Home</a>
|
|
<a class="p-4 hover:bg-[#aa9E73ff] rounded-md" href="/html/minishell.html">Minishell</a>
|
|
<a class="p-4 hover:bg-[#aa9E73ff] rounded-md" href="/html/minirt.html">MiniRT</a>
|
|
<a class="p-4 hover:bg-[#aa9E73ff] rounded-md" href="/html/emiku.html">emiku</a>
|
|
</div>
|
|
</header>
|
|
<div class="flex flex-col gap-y-6 bg-neutral-200/70 w-[60%] ml-[10%] mr-auto px-16 py-8">
|
|
<h2 class="text-4xl font-bold text-gray-800">The Raytracer</h2>
|
|
<div class="space-y-2">
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
The next project i want to showcase is the miniRT (mini-raytracer).<br/>
|
|
Like the shell, this was part of the 42 curriculum, and was achieved within the same rules and
|
|
constraints as the previous project.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
Again, the source code for this project is availiable <a class="underline text-blue-700 hover:text-blue-900" href="https://git.victorvobis.org/repo/miniRT.git">here</a>
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
This time, the assignment was to create a simple raytracer from scratch,
|
|
using a custom wrapper around the linux X11 API, for simple window creation and I/O.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
A raytracer is a program that uses a technique called
|
|
<a class="underline text-blue-700 hover:text-blue-900" href="https://en.wikipedia.org/wiki/Ray_tracing_(graphics)">"raytracing"</a>,
|
|
which is a technique used to create realistic images digitaly.
|
|
Raytracing essentially means that we simulate looking at a scene from our "eye-position", and use the computer screen like a window through which we
|
|
look at this scene.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
Now, we imagine shooting a perfectly straight "ray" from our "eye" through each pixel of the screen, and trace that ray's path to see if it will
|
|
intersect with an object. If yes, we know that this specific pixel should display the color of the object that it hit.
|
|
We repeat this process for each pixel. Using some math to check for lighting, shadows from other objects, distance and more,
|
|
we can determine a final color for each pixel, and with that create a remarkably realistic image from our scene.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
On top of the basic image generation, we added some extra feature that were not required by the subject, but seemed interesting enough to learn about
|
|
and implement on our own.<br/>
|
|
Some of the extra features are:
|
|
</p>
|
|
<ul class="list-disc list-inside space-y-2 text-gray-700 ml-4">
|
|
<li>Multithreaded</li>
|
|
<li>Textures and Bumpmaps</li>
|
|
<li>Dynamic Scene/Texture/Bumpmap loading</li>
|
|
<li>Menus with buttons and sliders</li>
|
|
<li>Simple File-Explorer to load resources at runtime</li>
|
|
<li>Diffrent Reflection Models</li>
|
|
<li>Objects as Perfect Mirrors</li>
|
|
<li>Skybox</li>
|
|
</ul>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
This project was again a team effort, and my teammate
|
|
<a class="underline text-blue-700 hover:text-blue-900" href="https://github.com/benszilas">Benjámin Szilas</a>
|
|
implemented a lot of functionality and features which where essential to the project.
|
|
He is responsible for a lot of the tracing functions, and implemented features like shadows, mirrors, phong-reflection, multiple lights, anti-aliasing and much more.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
I had a lot of fun with this project, and learned a lot about graphical programming, working as a team and (some) maths!
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
As a final note: since we finished the project, I was planning on showcasing it here, and so I have reimplemented the graphical part to use
|
|
<a class="underline text-blue-700 hover:text-blue-900" href="https://github.com/raysan5/raylib">Raylib</a>
|
|
since it seemed more appropriate to use.
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
Again, I have provided a live version below, feel free to play around in it!
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
Credits go to
|
|
<a class="underline text-blue-700 hover:text-blue-900" href="https://github.com/novnc/noVNC">noVNC</a>
|
|
for providing the web integration, their stuff is really great!
|
|
</p>
|
|
<p class="leading-relaxed text-gray-700 max-w-prose">
|
|
Before you start, you will need to request the password by clicking the button below.
|
|
</p>
|
|
<div class="flex gap-4">
|
|
<button id="minirt-password-btn" class="flex p-2 w-full bg-neutral-100/50 place-items-center justify-center rounded-md">
|
|
Get Password
|
|
</button>
|
|
<div id="minirt-password-display" class="flex w-full h-[5dvh] place-items-center justify-center"></div>
|
|
</div>
|
|
<div class="flex max-w-prose h-[20dvh] justify-center place-items-center">
|
|
<button id="minirt-start-button" class="flex p-4 bg-neutral-100/50 place-items-center rounded-md">
|
|
Start Raytracer
|
|
</button>
|
|
<div>
|
|
<div id="minirt-canvas-background" style="display: none" class="minirt-canvas-background">
|
|
<button id="canvas-close-btn" class="absolute top-[16px] right-[16px] text-white">Close</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script type="module" src="/js/minirt.js"></script>
|
|
</body>
|
|
</html>
|