3D Game Programming in C++, Part 3: Variables

this tutorial is under construction and intended for proofreaders only for now. The previous tutorial introduced you to the template. You can now draw some lines and print some text in all kinds of colors, but that’s clearly far from the goal of making actual games, where bullets wizz past…

3D Game Programming in C++, Part 2: The Template

this tutorial is under construction and intended for proofreaders only for now. As you noticed in the first article, setting up a project in Visual Studio can be quite a task. And we didn’t (nearly) touch all the settings that you can adjust for a project either. To make your life…

3D Game Programming in C++,Part 1: Getting Started

this tutorial is under construction and intended for proofreaders only for now. Welcome to the first article in the 3D Game Programming in C++ tutorial series! These tutorials are designed to take you from zero to a decent entry level in a somewhat smooth fashion. We start at the absolute…

A Voxel Renderer for Learning C/C++

This article describes the construction and optimization of a voxel map renderer. The renderer is designed to run on the GPU, while the CPU is used to update the map for the next frame. It turns out that such a renderer can reach up to 1 billion rays per second…

OPT#4:SIMD (part 2 of 2)

In the previous post I introduced the concept of single instruction, multiple data using 4 bytes in a 32-bit unsigned integer, and using Intel’s SSE instructions. Using SSE instructions, a sequence of so-called vector instructions operates on four instances of a single scalar flow. Take the following simple example: [crayon-61a9e5781210c332600686/]…

OPT#3:SIMD (part 1 of 2)

This is the third article in the series of posts on Optimization, which accompany online lectures for the IGAD program of the Breda University of Applied Sciences. You can find the first post (on profiling) here. The second post, on low level optimization, introduced the Rules of Engagement, which can…

Optimizing Trilinear Interpolation

This is going to be a short post. It is about a function that is heavily used in the Lighthouse 2 renderer: FetchTexelTrilinear, which can be found in sampling_shared.h. It roughly looks like this: [crayon-61a9e57812d4d475802159/] For context, a bit of sampling theory: When using textures in a renderer we may…

Speeding Up Lighthouse 2

Last week an updated version of the Lighthouse 2 benchmark was released. This version is about 15% faster, and produces images with less noise. In fact, rendering 10 paths per pixels (samples per pixel, or spp) takes as long as it took the February 27 version of the benchmark to…