<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.planetchili.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R+vdw</id>
		<title>Chilipedia - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.planetchili.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=R+vdw"/>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php/Special:Contributions/R_vdw"/>
		<updated>2026-06-09T05:29:58Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.3</generator>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3313</id>
		<title>Tools &amp; Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3313"/>
				<updated>2020-07-12T20:15:22Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* ChiliWisdom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful Tools &amp;amp; Resources (WORK IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
These are all links to external and publicly available sources, no guarantees / responsibility inferred.&lt;br /&gt;
If there are resources you like and would like to recommend, post them on the Discord and mention r_vdw.&lt;br /&gt;
&lt;br /&gt;
== Windows productivity apps ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|FrHed&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Versatile binary file / hex editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://sourceforge.net/projects/frhed/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|HxD&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good freeware hex and disk editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://mh-nexus.de/en/hxd/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Slidytip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ShareX&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Screen capture / file sharing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://getsharex.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Notepad++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor and Notepad replacement&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://notepad-plus-plus.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Codeshare&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Handy tool to share code snippets&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://codeshare.io/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Self destructs in 24 hrs&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Gimp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Cross-platform image editor (GNU/Linux,OS X,Windows,...&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gimp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|-&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Krita&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Open source painting program&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://krita.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pyxel Edit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pixel art editor (make tilesets, levels,animations) by Daniel Kvarfordt &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://pyxeledit.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vim&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor, the real shit &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.vim.org/download.php&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Will make you shit bricks real good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Sublimle Text&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Text editor for code, markup and prose&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sublimetext.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very versatile&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Audacity Audio&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Digital multi-track audio grabbing/recording/editing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.audacityteam.org&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Open source, dev in C/C++&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tiled&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Flexible tiled map editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.mapeditor.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Online compiling / testing / visualization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Godbolt's Compiler Explorer&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Matt Godbolt&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://godbolt.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Analyze and compare the way C++ code compiles across different compilers&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Ideone&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compiler and debugger (~60 languages)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.ideone.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Wandbox&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compilation service&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://wandbox.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|REPL it&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|In-browser IDE, 50+ languages&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.repl.it&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Data structure and algorithm visualization&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|USFCA / CS / David Galles&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|see it and you'll understand&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Active GitHub Forks&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|See who forked (&amp;amp;last committed) out of date GitHub libs/projects&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://techgaun.github.io/active-forks/index.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C++ Libraries ==&lt;br /&gt;
=== Library / package managers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|vcpkg&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|For Windows, Linux, MacOS. Once installed, provides easy include access to many libraries&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/microsoft/vcpkg&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing the installation for Visual Studio&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|NuGet&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|(NuGet Packet Manager is included with Visual Studio &amp;gt;= 2017)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://nuget.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing its use in Visual Studio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game tooling / engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|SFML&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Simple and Fast Multimedia Library&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sfml-dev.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Easy to use, good functionality. Chili grabs it in Intermediate 25 (I25)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Eigen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|C++ template library for linear algebra &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://eigen.tuxfamily.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|chilitip&lt;br /&gt;
|}&lt;br /&gt;
=== Productivity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|JSON for modern C++&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Look &amp;amp; feel of an STL container (single header file)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|pugixml&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Simple XML parser for C++ with XPath support&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://pugixml.org/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|fmtlib &lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Open-source formatting library&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://fmt.dev/latest/index.html&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|fast/easy, Slidytip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI/ML ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DLib&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|C++ toolkit containing machine learning algorithms&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://dlib.net/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Categorized / aggregation sites ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|cppreference libraries&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|As suggested by cppreference users&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com/w/cpp/links/libs&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost C++ libraries&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost your shit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.boost.org/doc/libs/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Lucid Index&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Searchable list of useful libraries (self hosted)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://lucidindex.com/cpp/browse&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reference sites ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Most comprehensve reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Hardccore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Softcore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Stack Overflow&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://stackexchange.com/sites#&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very active community&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ISOcpp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|The home of standard C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://isocpp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|For those purists&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Literature (books, blogs, papers, written shit)==&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#ddf;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Structure and Interpretation of Computer Programs&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Harold Abelson et al. (2nd ed. 1996), MIT Press&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://web.mit.edu/alexmv/6.037/sicp.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Just a classic&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Clean Code&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Robert C. Martin (14th ed. 2015), Prentice Hall&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/9780132350884.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Sample chapter, then just buy it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Primer, 5th Edition&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stanley B. Lippman et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.charleshouserjr.com/Cplus2.pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, rewritten for C++11. Approachable for beginners&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Learn C++&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Alex&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.learncpp.com/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Good solid intro, very well done &lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Core Guidelines&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Bjarne Stroustrup, Herb Sutter&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://isocpp.github.io/CppCoreGuidelines&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Pure discipline, by the masters themselves&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Weekly&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Jason Turner&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.youtube.com/user/lefticus1&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Hard core but very good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Templates: The Complete Guide (2nd Edition)&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by David Vandevoorde et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Cybotip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Programming Abstractions in C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric S. Roberts (2012), Stanford CS106B&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Solid and well thought through intro to C++. Excellent for understanding all fundamentals of data structures (incl. more advanced like graph, trees) and algorithms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Peculiarities ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Exploring std::string&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Nice blog that looks under the hood&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://shaharmike.com/cpp/std-string/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|a tip from Slidy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game programming ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Game Programming Patterns&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Robert Nystrom&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://gameprogrammingpatterns.com &lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Contains lots of different coding patterns and describes them in detail&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Game Engine Architecture&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Jason Gregory (3rd ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gameenginebook.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Talks about various components that make up a game engine and how they tie together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3D Computer Graphics ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|The Book of Shaders&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Patricio Gonzalez Vivo and Jen Lowe&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://thebookofshaders.com (pdf can be generated)&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tricks of the 3D Game Programming Gurus&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by André LaMothe, 2003&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|lagout&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Mathematics for 3D Game Programming and Computer Graphics&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric Lengyel (3rd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Need those math skills&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by James M. Van Verth, Lars M. Bishop (2nd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Math yo&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vector Math for 3D Computer Graphics Tutorial&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Bradley Kjell&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://chortle.ccsu.edu/vectorlessons/vectorindex.html &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Demon liked it&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Computing Euler angles from a rotation matrix&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Gregory G. Slabaugh&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.gregslabaugh.net/publications/euler.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Chilitip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Coordinate geometry in 3D space&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Nabla Ltd.&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.nabla.hr/CG-CoGeometryContA.htm&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|BhayanakMoth tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|D3D/OpenGL  tutorial: A trip through the Graphics Pipeline &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Fabian Giesen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Learn OpenGL&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Joey de Vries &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://learnopengl.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Specific to OpenGL but well written and presented (Slidy)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Real-time Rendering&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Tomas Akenine-Möller et al (4th ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.realtimerendering.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Good reference for learning about a wide variety of topics/techniques used in real-time rendering (Slidy)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DirectX ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DirectX Developer  Blog&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by msft&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://devblogs.microsoft.com/directx/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Operating systems ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Modern Operating Systems&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Andrew S. Tanenbaum &amp;amp; Herbert Bos (4th ed. 2015)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|}&lt;br /&gt;
=== AI / ML / DL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Paradigms of Artificial Intelligence Programming&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Peter Norvig&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/norvig/paip-lisp&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, gotta love common lisp!&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Artificial Intelligence: A Modern Approach&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stuart Russell &amp;amp; Peter Norvig (Pearson Edu Ltd 3rd edition)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://aima.cs.berkeley.edu/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Deep Learning&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Goodfellow, Bengio and Courville (MIT Press 2016)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.deeplearningbook.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Solid intro into machine learning / deep learning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other good shit ==&lt;br /&gt;
* Blender Guru [https://youtu.be/TPrnSACiTJ4 beginner series]&lt;br /&gt;
&lt;br /&gt;
== ChiliWisdom ==&lt;br /&gt;
* &amp;quot;If you're building with warnings, you gotta re-evaluate your life choices&amp;quot; (Int.11.hw)&lt;br /&gt;
* &amp;quot;Get your privates in order&amp;quot;&lt;br /&gt;
* &amp;quot;For those of you who live in weird places that don't have Orios, I feel sorry for you. They look like this, and they are fucking delicious with milk.&amp;quot; (Beg.10)&lt;br /&gt;
* &amp;quot;Everything on a computer is a motherfucking number&amp;quot; (Hugs.11)&lt;br /&gt;
* &amp;quot;Don't turn yourself into a pretzel trying to fit all the STL components together to do everything in a single statement&amp;quot; (Int.16.hw)&lt;br /&gt;
* &amp;quot;You can't touch your parents' privates. Don't do it, it's weird&amp;quot; (Int.17.1 on inheritance)&lt;br /&gt;
* “If you have someone’s address, you can fuck with them. Just ask any Twitch streamer” (Int.2 on pointers, tx DownUp)&lt;br /&gt;
* &amp;quot;What do you think you gotta use? Say it with me... std::move()&amp;quot;&lt;br /&gt;
* &amp;quot;With &amp;lt;code&amp;gt;noexcept&amp;lt;/code&amp;gt;, the STL will now use your move constructor for great justice&amp;quot; (Int.22 on exceptions)&lt;br /&gt;
* &amp;quot;At the end of this, I'm gonna have a vector of pointers to stationary poos and then over that range I can just randomly select an index and use that pointer to do something with that poo&amp;quot; (STD Gems [Copy/Filter] on std::copy_if)&lt;br /&gt;
* &amp;quot;Unordered map is the college girl of associative containers; I keep getting older and older, they just stay the same age&amp;quot; (Int.24.2 on constant time performance)&lt;br /&gt;
* &amp;quot;The other way to identify the mechanism of failure is the 'Bust Your Ass' method&amp;quot; (Advanced 3.2hw, talking about debugging strategies)&lt;br /&gt;
* &amp;quot;SFML is a tool for babies&amp;quot; [because it uses degrees] (Advanced 4.1, going on a rant against the sexagesimal number system)&lt;br /&gt;
* Chili's well researched but rejected proposal for an STL addition can be found [https://youtu.be/4EZVTNHmojc?t=223 here]&lt;br /&gt;
* &amp;quot;It is working very sexily, powered under the hood by the matrix representation of transformations&amp;quot; (Adv.5.2)&lt;br /&gt;
* &amp;quot;Today, we are going to confront the crazy self mumbler. We might get ourselves stabbed in the spleen. But a man's gotta do what a man's gotta do&amp;quot; (3D Fundamentals 10, on fixing texture wiggling)&lt;br /&gt;
* &amp;quot;Just ignore the children. That's how you solve most of life's problems as an adult&amp;quot;, talking about child contours while playing about with OpenCV (SlideFucker3000, patreon only content)&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3309</id>
		<title>Tools &amp; Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3309"/>
				<updated>2020-06-28T20:17:11Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Online compiling / testing / visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful Tools &amp;amp; Resources (WORK IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
These are all links to external and publicly available sources, no guarantees / responsibility inferred.&lt;br /&gt;
If there are resources you like and would like to recommend, post them on the Discord and mention r_vdw.&lt;br /&gt;
&lt;br /&gt;
== Windows productivity apps ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|FrHed&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Versatile binary file / hex editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://sourceforge.net/projects/frhed/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|HxD&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good freeware hex and disk editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://mh-nexus.de/en/hxd/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Slidytip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ShareX&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Screen capture / file sharing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://getsharex.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Notepad++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor and Notepad replacement&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://notepad-plus-plus.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Codeshare&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Handy tool to share code snippets&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://codeshare.io/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Self destructs in 24 hrs&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Gimp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Cross-platform image editor (GNU/Linux,OS X,Windows,...&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gimp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|-&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Krita&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Open source painting program&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://krita.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pyxel Edit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pixel art editor (make tilesets, levels,animations) by Daniel Kvarfordt &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://pyxeledit.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vim&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor, the real shit &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.vim.org/download.php&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Will make you shit bricks real good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Sublimle Text&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Text editor for code, markup and prose&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sublimetext.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very versatile&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Audacity Audio&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Digital multi-track audio grabbing/recording/editing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.audacityteam.org&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Open source, dev in C/C++&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tiled&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Flexible tiled map editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.mapeditor.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Online compiling / testing / visualization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Godbolt's Compiler Explorer&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Matt Godbolt&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://godbolt.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Analyze and compare the way C++ code compiles across different compilers&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Ideone&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compiler and debugger (~60 languages)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.ideone.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Wandbox&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compilation service&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://wandbox.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|REPL it&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|In-browser IDE, 50+ languages&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.repl.it&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Data structure and algorithm visualization&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|USFCA / CS / David Galles&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|see it and you'll understand&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Active GitHub Forks&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|See who forked (&amp;amp;last committed) out of date GitHub libs/projects&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://techgaun.github.io/active-forks/index.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C++ Libraries ==&lt;br /&gt;
=== Library / package managers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|vcpkg&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|For Windows, Linux, MacOS. Once installed, provides easy include access to many libraries&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/microsoft/vcpkg&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing the installation for Visual Studio&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|NuGet&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|(NuGet Packet Manager is included with Visual Studio &amp;gt;= 2017)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://nuget.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing its use in Visual Studio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game tooling / engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|SFML&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Simple and Fast Multimedia Library&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sfml-dev.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Easy to use, good functionality. Chili grabs it in Intermediate 25 (I25)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Eigen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|C++ template library for linear algebra &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://eigen.tuxfamily.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|chilitip&lt;br /&gt;
|}&lt;br /&gt;
=== Productivity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|JSON for modern C++&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Look &amp;amp; feel of an STL container (single header file)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|pugixml&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Simple XML parser for C++ with XPath support&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://pugixml.org/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|fmtlib &lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Open-source formatting library&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://fmt.dev/latest/index.html&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|fast/easy, Slidytip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI/ML ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DLib&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|C++ toolkit containing machine learning algorithms&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://dlib.net/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Categorized / aggregation sites ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|cppreference libraries&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|As suggested by cppreference users&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com/w/cpp/links/libs&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost C++ libraries&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost your shit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.boost.org/doc/libs/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Lucid Index&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Searchable list of useful libraries (self hosted)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://lucidindex.com/cpp/browse&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reference sites ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Most comprehensve reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Hardccore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Softcore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Stack Overflow&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://stackexchange.com/sites#&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very active community&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ISOcpp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|The home of standard C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://isocpp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|For those purists&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Literature (books, blogs, papers, written shit)==&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#ddf;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Structure and Interpretation of Computer Programs&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Harold Abelson et al. (2nd ed. 1996), MIT Press&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://web.mit.edu/alexmv/6.037/sicp.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Just a classic&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Clean Code&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Robert C. Martin (14th ed. 2015), Prentice Hall&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/9780132350884.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Sample chapter, then just buy it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Primer, 5th Edition&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stanley B. Lippman et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.charleshouserjr.com/Cplus2.pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, rewritten for C++11. Approachable for beginners&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Learn C++&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Alex&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.learncpp.com/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Good solid intro, very well done &lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Core Guidelines&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Bjarne Stroustrup, Herb Sutter&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://isocpp.github.io/CppCoreGuidelines&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Pure discipline, by the masters themselves&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Weekly&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Jason Turner&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.youtube.com/user/lefticus1&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Hard core but very good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Templates: The Complete Guide (2nd Edition)&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by David Vandevoorde et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Cybotip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Programming Abstractions in C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric S. Roberts (2012), Stanford CS106B&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Solid and well thought through intro to C++. Excellent for understanding all fundamentals of data structures (incl. more advanced like graph, trees) and algorithms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Peculiarities ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Exploring std::string&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Nice blog that looks under the hood&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://shaharmike.com/cpp/std-string/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|a tip from Slidy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game programming ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Game Programming Patterns&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Robert Nystrom&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://gameprogrammingpatterns.com &lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Contains lots of different coding patterns and describes them in detail&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Game Engine Architecture&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Jason Gregory (3rd ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gameenginebook.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Talks about various components that make up a game engine and how they tie together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3D Computer Graphics ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|The Book of Shaders&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Patricio Gonzalez Vivo and Jen Lowe&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://thebookofshaders.com (pdf can be generated)&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tricks of the 3D Game Programming Gurus&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by André LaMothe, 2003&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|lagout&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Mathematics for 3D Game Programming and Computer Graphics&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric Lengyel (3rd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Need those math skills&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by James M. Van Verth, Lars M. Bishop (2nd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Math yo&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vector Math for 3D Computer Graphics Tutorial&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Bradley Kjell&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://chortle.ccsu.edu/vectorlessons/vectorindex.html &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Demon liked it&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Computing Euler angles from a rotation matrix&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Gregory G. Slabaugh&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.gregslabaugh.net/publications/euler.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Chilitip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Coordinate geometry in 3D space&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Nabla Ltd.&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.nabla.hr/CG-CoGeometryContA.htm&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|BhayanakMoth tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|D3D/OpenGL  tutorial: A trip through the Graphics Pipeline &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Fabian Giesen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Learn OpenGL&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Joey de Vries &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://learnopengl.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Specific to OpenGL but well written and presented (Slidy)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Real-time Rendering&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Tomas Akenine-Möller et al (4th ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.realtimerendering.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Good reference for learning about a wide variety of topics/techniques used in real-time rendering (Slidy)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DirectX ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DirectX Developer  Blog&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by msft&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://devblogs.microsoft.com/directx/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Operating systems ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Modern Operating Systems&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Andrew S. Tanenbaum &amp;amp; Herbert Bos (4th ed. 2015)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|}&lt;br /&gt;
=== AI / ML / DL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Paradigms of Artificial Intelligence Programming&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Peter Norvig&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/norvig/paip-lisp&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, gotta love common lisp!&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Artificial Intelligence: A Modern Approach&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stuart Russell &amp;amp; Peter Norvig (Pearson Edu Ltd 3rd edition)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://aima.cs.berkeley.edu/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Deep Learning&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Goodfellow, Bengio and Courville (MIT Press 2016)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.deeplearningbook.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Solid intro into machine learning / deep learning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other good shit ==&lt;br /&gt;
* Blender Guru [https://youtu.be/TPrnSACiTJ4 beginner series]&lt;br /&gt;
&lt;br /&gt;
== ChiliWisdom ==&lt;br /&gt;
* &amp;quot;If you're building with warnings, you gotta re-evaluate your life choices&amp;quot; (Int.11.hw)&lt;br /&gt;
* &amp;quot;Get your privates in order&amp;quot;&lt;br /&gt;
* &amp;quot;For those of you who live in weird places that don't have Orios, I feel sorry for you. They look like this, and they are fucking delicious with milk.&amp;quot; (Beg.10)&lt;br /&gt;
* &amp;quot;Everything on a computer is a motherfucking number&amp;quot; (Hugs.11)&lt;br /&gt;
* &amp;quot;Don't turn yourself into a pretzel trying to fit all the STL components together to do everything in a single statement&amp;quot; (Int.16.hw)&lt;br /&gt;
* &amp;quot;You can't touch your parents' privates. Don't do it, it's weird&amp;quot; (Int.17.1 on inheritance)&lt;br /&gt;
* “If you have someone’s address, you can fuck with them. Just ask any Twitch streamer” (Int.2 on pointers, tx DownUp)&lt;br /&gt;
* &amp;quot;What do you think you gotta use? Say it with me... std::move()&amp;quot;&lt;br /&gt;
* &amp;quot;With &amp;lt;code&amp;gt;noexcept&amp;lt;/code&amp;gt;, the STL will now use your move constructor for great justice&amp;quot; (Int.22 on exceptions)&lt;br /&gt;
* &amp;quot;At the end of this, I'm gonna have a vector of pointers to stationary poos and then over that range I can just randomly select an index and use that pointer to do something with that poo&amp;quot; (STD Gems [Copy/Filter] on std::copy_if)&lt;br /&gt;
* &amp;quot;Unordered map is the college girl of associative containers; I keep getting older and older, they just stay the same age&amp;quot; (Int.24.2 on constant time performance)&lt;br /&gt;
* &amp;quot;The other way to identify the mechanism of failure is the 'Bust Your Ass' method&amp;quot; (Advanced 3.2hw, talking about debugging strategies)&lt;br /&gt;
* &amp;quot;SFML is a tool for babies&amp;quot; [because it uses degrees] (Advanced 4.1, going on a rant against the sexagesimal number system)&lt;br /&gt;
* Chili's well researched but rejected proposal for an STL addition can be found [https://youtu.be/4EZVTNHmojc?t=223 here]&lt;br /&gt;
* &amp;quot;It is working very sexily, powered under the hood by the matrix representation of transformations&amp;quot; (Adv.5.2)&lt;br /&gt;
* &amp;quot;Today, we are going to confront the crazy self mumbler. We might get ourselves stabbed in the spleen. But a man's gotta do what a man's gotta do&amp;quot; (3D Fundamentals 10, on fixing texture wiggling)&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3308</id>
		<title>Tools &amp; Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3308"/>
				<updated>2020-06-28T20:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Windows productivity apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful Tools &amp;amp; Resources (WORK IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
These are all links to external and publicly available sources, no guarantees / responsibility inferred.&lt;br /&gt;
If there are resources you like and would like to recommend, post them on the Discord and mention r_vdw.&lt;br /&gt;
&lt;br /&gt;
== Windows productivity apps ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|FrHed&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Versatile binary file / hex editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://sourceforge.net/projects/frhed/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|HxD&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good freeware hex and disk editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://mh-nexus.de/en/hxd/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Slidytip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ShareX&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Screen capture / file sharing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://getsharex.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Notepad++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor and Notepad replacement&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://notepad-plus-plus.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Codeshare&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Handy tool to share code snippets&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://codeshare.io/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Self destructs in 24 hrs&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Gimp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Cross-platform image editor (GNU/Linux,OS X,Windows,...&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gimp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|-&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Krita&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Open source painting program&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://krita.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pyxel Edit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pixel art editor (make tilesets, levels,animations) by Daniel Kvarfordt &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://pyxeledit.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vim&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor, the real shit &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.vim.org/download.php&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Will make you shit bricks real good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Sublimle Text&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Text editor for code, markup and prose&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sublimetext.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very versatile&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Audacity Audio&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Digital multi-track audio grabbing/recording/editing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.audacityteam.org&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Open source, dev in C/C++&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tiled&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Flexible tiled map editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.mapeditor.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Online compiling / testing / visualization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Godbolt's Compiler Explorer&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Matt Godbolt&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://godbolt.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Analyze and compare the way C++ code compiles across different compilers&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Ideone&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compiler and debugger (~60 languages)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.ideone.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Wandbox&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compilation service&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://wandbox.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Data structure and algorithm visualization&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|USFCA / CS / David Galles&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|see it and you'll understand&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Active GitHub Forks&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|See who forked (&amp;amp;last committed) out of date GitHub libs/projects&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://techgaun.github.io/active-forks/index.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C++ Libraries ==&lt;br /&gt;
=== Library / package managers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|vcpkg&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|For Windows, Linux, MacOS. Once installed, provides easy include access to many libraries&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/microsoft/vcpkg&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing the installation for Visual Studio&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|NuGet&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|(NuGet Packet Manager is included with Visual Studio &amp;gt;= 2017)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://nuget.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing its use in Visual Studio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game tooling / engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|SFML&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Simple and Fast Multimedia Library&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sfml-dev.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Easy to use, good functionality. Chili grabs it in Intermediate 25 (I25)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Eigen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|C++ template library for linear algebra &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://eigen.tuxfamily.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|chilitip&lt;br /&gt;
|}&lt;br /&gt;
=== Productivity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|JSON for modern C++&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Look &amp;amp; feel of an STL container (single header file)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|pugixml&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Simple XML parser for C++ with XPath support&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://pugixml.org/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|fmtlib &lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Open-source formatting library&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://fmt.dev/latest/index.html&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|fast/easy, Slidytip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI/ML ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DLib&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|C++ toolkit containing machine learning algorithms&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://dlib.net/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Categorized / aggregation sites ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|cppreference libraries&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|As suggested by cppreference users&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com/w/cpp/links/libs&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost C++ libraries&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost your shit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.boost.org/doc/libs/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Lucid Index&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Searchable list of useful libraries (self hosted)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://lucidindex.com/cpp/browse&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reference sites ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Most comprehensve reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Hardccore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Softcore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Stack Overflow&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://stackexchange.com/sites#&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very active community&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ISOcpp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|The home of standard C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://isocpp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|For those purists&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Literature (books, blogs, papers, written shit)==&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#ddf;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Structure and Interpretation of Computer Programs&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Harold Abelson et al. (2nd ed. 1996), MIT Press&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://web.mit.edu/alexmv/6.037/sicp.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Just a classic&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Clean Code&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Robert C. Martin (14th ed. 2015), Prentice Hall&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/9780132350884.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Sample chapter, then just buy it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Primer, 5th Edition&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stanley B. Lippman et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.charleshouserjr.com/Cplus2.pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, rewritten for C++11. Approachable for beginners&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Learn C++&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Alex&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.learncpp.com/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Good solid intro, very well done &lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Core Guidelines&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Bjarne Stroustrup, Herb Sutter&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://isocpp.github.io/CppCoreGuidelines&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Pure discipline, by the masters themselves&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Weekly&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Jason Turner&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.youtube.com/user/lefticus1&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Hard core but very good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Templates: The Complete Guide (2nd Edition)&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by David Vandevoorde et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Cybotip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Programming Abstractions in C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric S. Roberts (2012), Stanford CS106B&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Solid and well thought through intro to C++. Excellent for understanding all fundamentals of data structures (incl. more advanced like graph, trees) and algorithms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Peculiarities ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Exploring std::string&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Nice blog that looks under the hood&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://shaharmike.com/cpp/std-string/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|a tip from Slidy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game programming ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Game Programming Patterns&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Robert Nystrom&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://gameprogrammingpatterns.com &lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Contains lots of different coding patterns and describes them in detail&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Game Engine Architecture&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Jason Gregory (3rd ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gameenginebook.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Talks about various components that make up a game engine and how they tie together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3D Computer Graphics ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|The Book of Shaders&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Patricio Gonzalez Vivo and Jen Lowe&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://thebookofshaders.com (pdf can be generated)&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tricks of the 3D Game Programming Gurus&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by André LaMothe, 2003&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|lagout&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Mathematics for 3D Game Programming and Computer Graphics&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric Lengyel (3rd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Need those math skills&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by James M. Van Verth, Lars M. Bishop (2nd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Math yo&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vector Math for 3D Computer Graphics Tutorial&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Bradley Kjell&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://chortle.ccsu.edu/vectorlessons/vectorindex.html &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Demon liked it&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Computing Euler angles from a rotation matrix&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Gregory G. Slabaugh&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.gregslabaugh.net/publications/euler.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Chilitip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Coordinate geometry in 3D space&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Nabla Ltd.&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.nabla.hr/CG-CoGeometryContA.htm&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|BhayanakMoth tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|D3D/OpenGL  tutorial: A trip through the Graphics Pipeline &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Fabian Giesen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Learn OpenGL&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Joey de Vries &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://learnopengl.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Specific to OpenGL but well written and presented (Slidy)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Real-time Rendering&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Tomas Akenine-Möller et al (4th ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.realtimerendering.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Good reference for learning about a wide variety of topics/techniques used in real-time rendering (Slidy)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DirectX ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DirectX Developer  Blog&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by msft&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://devblogs.microsoft.com/directx/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Operating systems ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Modern Operating Systems&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Andrew S. Tanenbaum &amp;amp; Herbert Bos (4th ed. 2015)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|}&lt;br /&gt;
=== AI / ML / DL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Paradigms of Artificial Intelligence Programming&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Peter Norvig&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/norvig/paip-lisp&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, gotta love common lisp!&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Artificial Intelligence: A Modern Approach&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stuart Russell &amp;amp; Peter Norvig (Pearson Edu Ltd 3rd edition)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://aima.cs.berkeley.edu/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Deep Learning&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Goodfellow, Bengio and Courville (MIT Press 2016)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.deeplearningbook.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Solid intro into machine learning / deep learning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other good shit ==&lt;br /&gt;
* Blender Guru [https://youtu.be/TPrnSACiTJ4 beginner series]&lt;br /&gt;
&lt;br /&gt;
== ChiliWisdom ==&lt;br /&gt;
* &amp;quot;If you're building with warnings, you gotta re-evaluate your life choices&amp;quot; (Int.11.hw)&lt;br /&gt;
* &amp;quot;Get your privates in order&amp;quot;&lt;br /&gt;
* &amp;quot;For those of you who live in weird places that don't have Orios, I feel sorry for you. They look like this, and they are fucking delicious with milk.&amp;quot; (Beg.10)&lt;br /&gt;
* &amp;quot;Everything on a computer is a motherfucking number&amp;quot; (Hugs.11)&lt;br /&gt;
* &amp;quot;Don't turn yourself into a pretzel trying to fit all the STL components together to do everything in a single statement&amp;quot; (Int.16.hw)&lt;br /&gt;
* &amp;quot;You can't touch your parents' privates. Don't do it, it's weird&amp;quot; (Int.17.1 on inheritance)&lt;br /&gt;
* “If you have someone’s address, you can fuck with them. Just ask any Twitch streamer” (Int.2 on pointers, tx DownUp)&lt;br /&gt;
* &amp;quot;What do you think you gotta use? Say it with me... std::move()&amp;quot;&lt;br /&gt;
* &amp;quot;With &amp;lt;code&amp;gt;noexcept&amp;lt;/code&amp;gt;, the STL will now use your move constructor for great justice&amp;quot; (Int.22 on exceptions)&lt;br /&gt;
* &amp;quot;At the end of this, I'm gonna have a vector of pointers to stationary poos and then over that range I can just randomly select an index and use that pointer to do something with that poo&amp;quot; (STD Gems [Copy/Filter] on std::copy_if)&lt;br /&gt;
* &amp;quot;Unordered map is the college girl of associative containers; I keep getting older and older, they just stay the same age&amp;quot; (Int.24.2 on constant time performance)&lt;br /&gt;
* &amp;quot;The other way to identify the mechanism of failure is the 'Bust Your Ass' method&amp;quot; (Advanced 3.2hw, talking about debugging strategies)&lt;br /&gt;
* &amp;quot;SFML is a tool for babies&amp;quot; [because it uses degrees] (Advanced 4.1, going on a rant against the sexagesimal number system)&lt;br /&gt;
* Chili's well researched but rejected proposal for an STL addition can be found [https://youtu.be/4EZVTNHmojc?t=223 here]&lt;br /&gt;
* &amp;quot;It is working very sexily, powered under the hood by the matrix representation of transformations&amp;quot; (Adv.5.2)&lt;br /&gt;
* &amp;quot;Today, we are going to confront the crazy self mumbler. We might get ourselves stabbed in the spleen. But a man's gotta do what a man's gotta do&amp;quot; (3D Fundamentals 10, on fixing texture wiggling)&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3307</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3307"/>
				<updated>2020-06-28T12:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Note: this can be through a typedef or by implementing a new output type&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
* Demo: creating a wave effect [https://youtu.be/xcs2IEGVkCk?t=5m24s 5:24]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Plane.h&amp;lt;/code&amp;gt; defines Tessellation of a plane object [https://youtu.be/xcs2IEGVkCk?t=6m28s 6:28]&lt;br /&gt;
:* &amp;lt;code&amp;gt;WaveVertexTextureEffect.h&amp;lt;/code&amp;gt; implements the sinusoid wave effect [https://youtu.be/xcs2IEGVkCk?t=7m21s 7:21]&lt;br /&gt;
:* &amp;lt;code&amp;gt;VertexWaveScene.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=9m48s 9:48]&lt;br /&gt;
* Example where the vertex output type is different from the vertex input type [https://youtu.be/xcs2IEGVkCk?t=10m48s 10:48]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Example effect: the color of the vertex is determined by its position&lt;br /&gt;
:* The input vertex type only holds position as data member, we add color in the output data type &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;&lt;br /&gt;
:* You can procedurally add information to your vertices in the vs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3306</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3306"/>
				<updated>2020-06-28T12:08:22Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Note: this can be through a typedef or by implementing a new output type&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
* Demo: creating a wave effect [https://youtu.be/xcs2IEGVkCk?t=5m24s 5:24]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Plane.h&amp;lt;/code&amp;gt; defines Tessellation of a plane object [https://youtu.be/xcs2IEGVkCk?t=6m28s 6:28]&lt;br /&gt;
:* &amp;lt;code&amp;gt;WaveVertexTextureEffect.h&amp;lt;/code&amp;gt; implements the sinusoid wave effect [https://youtu.be/xcs2IEGVkCk?t=7m21s 7:21]&lt;br /&gt;
:* &amp;lt;code&amp;gt;VertexWaveScene.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=9m48s 9:48]&lt;br /&gt;
* Example where Vertex Output type is different from Vertex Input Type [https://youtu.be/xcs2IEGVkCk?t=10m48s 10:48]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Example effect: the color of the vertex is determined by its position&lt;br /&gt;
:* The input vertex type only holds position as data member, we add color in the output data type &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;&lt;br /&gt;
:* You can procedurally add information to your vertices in the vs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3305</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3305"/>
				<updated>2020-06-28T12:07:23Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Note: this can be through a typedef or by implementing a new output type&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
* Demo: creating a wave effect [https://youtu.be/xcs2IEGVkCk?t=5m24s 5:24]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Plane.h&amp;lt;/code&amp;gt; defines Tesselation of a plane object [https://youtu.be/xcs2IEGVkCk?t=6m28s 6:28]&lt;br /&gt;
:* &amp;lt;code&amp;gt;WaveVertexTextureEffect.h&amp;lt;/code&amp;gt; implements the sinusoid wave effect [https://youtu.be/xcs2IEGVkCk?t=7m21s 7:21]&lt;br /&gt;
:* &amp;lt;code&amp;gt;VertexWaveScene.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=9m48s 9:48]&lt;br /&gt;
* Example where Vertex Output type is different from Vertex Input Type [https://youtu.be/xcs2IEGVkCk?t=10m48s 10:48]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Example effect: the color of the vertex is determined by its position&lt;br /&gt;
:* The input vertex type only holds position as data member, we add color in the output data type &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;&lt;br /&gt;
:* You can procedurally add information to your vertices in the vs&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3304</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3304"/>
				<updated>2020-06-28T12:06:31Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Note: this can be through a typedef or by implementing a new output type&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
* Demo: creating a wave effect [https://youtu.be/xcs2IEGVkCk?t=5m24s 5:24]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Plane.h&amp;lt;/code&amp;gt; defines Tesselation of a plane object [https://youtu.be/xcs2IEGVkCk?t=6m28s 6:28]&lt;br /&gt;
:* &amp;lt;code&amp;gt;WaveVertexTextureEffect.h&amp;lt;/code&amp;gt; implements the sinusoid wave effect [https://youtu.be/xcs2IEGVkCk?t=7m21s 7:21]&lt;br /&gt;
:* &amp;lt;code&amp;gt;VertexWaveScene.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=9m48s 9:48]&lt;br /&gt;
* Example where Vertex Output type is different from Vertex Input Type [https://youtu.be/xcs2IEGVkCk?t=10m48s 10:48]&lt;br /&gt;
:* Example effect: the color of the vertex is determined by its position&lt;br /&gt;
:* The input vertex type only holds position as data member, we add color in the output data type &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;&lt;br /&gt;
:* You can procedurally add information to your vertices in the vs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3303</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3303"/>
				<updated>2020-06-28T11:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
* Demo: creating a wave effect [https://youtu.be/xcs2IEGVkCk?t=5m24s 5:24]&lt;br /&gt;
:* &amp;lt;code&amp;gt;Plane.h&amp;lt;/code&amp;gt; defines Tesselation of a plane object [https://youtu.be/xcs2IEGVkCk?t=6m28s 6:28]&lt;br /&gt;
:* &amp;lt;code&amp;gt;WaveVertexTextureEffect.h&amp;lt;/code&amp;gt; implements the sinusoid wave effect [https://youtu.be/xcs2IEGVkCk?t=7m21s 7:21]&lt;br /&gt;
:* &amp;lt;code&amp;gt;VertexWaveScene.h&amp;lt;/code&amp;gt; :* [https://youtu.be/xcs2IEGVkCk?t=9m48s 9:48]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3302</id>
		<title>3D Fundamentals Tutorial 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_12&amp;diff=3302"/>
				<updated>2020-06-28T11:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The vertex shader is the one of the two original shaders introduced in Direct3D 8, and it is the only shader besides the pixel shader that '''must''' be provided before triangles can be rendered. It's kind of a big deal.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/xcs2IEGVkCk here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is a Vertex Shader (vs) and its position in the pipeline [https://youtu.be/xcs2IEGVkCk?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* A vs takes in vertices of the geometries and applies transformations to them&lt;br /&gt;
:* Our current pipeline function &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; does this in the most basic form: it applies rotation and translation to move vertices of the mesh from object space to world space&lt;br /&gt;
:* In this video, we will be making the vs configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Code implementation walk-through [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=1m14s 1:14]&lt;br /&gt;
::- We apply a &amp;lt;code&amp;gt;std::transform()&amp;lt;/code&amp;gt; on the vertices vector&lt;br /&gt;
::- We create a new datatype &amp;lt;code&amp;gt;VSOut&amp;lt;/code&amp;gt;, giving the vs the power to change the datatype of the output vertices&lt;br /&gt;
::- Each vertex shader will define its output type&lt;br /&gt;
:* &amp;lt;code&amp;gt;Effect::VertexShader&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=3m33s 3:33]&lt;br /&gt;
:* &amp;lt;code&amp;gt;DefaultVertexShader.h&amp;lt;/code&amp;gt; [https://youtu.be/xcs2IEGVkCk?t=4m06s 4:06]&lt;br /&gt;
:* Scene definition [https://youtu.be/xcs2IEGVkCk?t=5m02s 5:02]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 13|Next in series (Tutorial 13)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3301</id>
		<title>Tools &amp; Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3301"/>
				<updated>2020-06-27T19:16:23Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* ChiliWisdom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful Tools &amp;amp; Resources (WORK IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
These are all links to external and publicly available sources, no guarantees / responsibility inferred.&lt;br /&gt;
If there are resources you like and would like to recommend, post them on the Discord and mention r_vdw.&lt;br /&gt;
&lt;br /&gt;
== Windows productivity apps ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|FrHed&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Versatile binary file / hex editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://sourceforge.net/projects/frhed/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|HxD&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good freeware hex and disk editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://mh-nexus.de/en/hxd/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Slidytip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ShareX&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Screen capture / file sharing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://getsharex.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Notepad++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor and Notepad replacement&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://notepad-plus-plus.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Codeshare&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Handy tool to share code snippets&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://codeshare.io/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Self destructs in 24 hrs&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Gimp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Cross-platform image editor (GNU/Linux,OS X,Windows,...&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gimp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|-&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Krita&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Open source painting program&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://krita.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pyxel Edit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pixel art editor (make tilesets, levels,animations) by Daniel Kvarfordt &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://pyxeledit.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vim&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor, Notepad++ alternative &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.vim.org/download.php&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Will make you shit bricks real good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Sublimle Text&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Text editor for code, markup and prose&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sublimetext.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very versatile&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Audacity Audio&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Digital multi-track audio grabbing/recording/editing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.audacityteam.org&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Open source, dev in C/C++&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tiled&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Flexible tiled map editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.mapeditor.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Online compiling / testing / visualization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Godbolt's Compiler Explorer&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Matt Godbolt&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://godbolt.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Analyze and compare the way C++ code compiles across different compilers&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Ideone&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compiler and debugger (~60 languages)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.ideone.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Wandbox&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compilation service&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://wandbox.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Data structure and algorithm visualization&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|USFCA / CS / David Galles&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|see it and you'll understand&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Active GitHub Forks&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|See who forked (&amp;amp;last committed) out of date GitHub libs/projects&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://techgaun.github.io/active-forks/index.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C++ Libraries ==&lt;br /&gt;
=== Library / package managers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|vcpkg&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|For Windows, Linux, MacOS. Once installed, provides easy include access to many libraries&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/microsoft/vcpkg&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing the installation for Visual Studio&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|NuGet&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|(NuGet Packet Manager is included with Visual Studio &amp;gt;= 2017)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://nuget.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing its use in Visual Studio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game tooling / engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|SFML&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Simple and Fast Multimedia Library&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sfml-dev.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Easy to use, good functionality. Chili grabs it in Intermediate 25 (I25)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Eigen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|C++ template library for linear algebra &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://eigen.tuxfamily.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|chilitip&lt;br /&gt;
|}&lt;br /&gt;
=== Productivity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|JSON for modern C++&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Look &amp;amp; feel of an STL container (single header file)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|pugixml&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Simple XML parser for C++ with XPath support&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://pugixml.org/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|fmtlib &lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Open-source formatting library&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://fmt.dev/latest/index.html&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|fast/easy, Slidytip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI/ML ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DLib&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|C++ toolkit containing machine learning algorithms&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://dlib.net/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Categorized / aggregation sites ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|cppreference libraries&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|As suggested by cppreference users&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com/w/cpp/links/libs&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost C++ libraries&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost your shit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.boost.org/doc/libs/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Lucid Index&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Searchable list of useful libraries (self hosted)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://lucidindex.com/cpp/browse&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reference sites ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Most comprehensve reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Hardccore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Softcore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Stack Overflow&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://stackexchange.com/sites#&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very active community&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ISOcpp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|The home of standard C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://isocpp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|For those purists&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Literature (books, blogs, papers, written shit)==&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#ddf;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Structure and Interpretation of Computer Programs&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Harold Abelson et al. (2nd ed. 1996), MIT Press&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://web.mit.edu/alexmv/6.037/sicp.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Just a classic&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Clean Code&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Robert C. Martin (14th ed. 2015), Prentice Hall&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/9780132350884.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Sample chapter, then just buy it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Primer, 5th Edition&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stanley B. Lippman et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.charleshouserjr.com/Cplus2.pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, rewritten for C++11. Approachable for beginners&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Learn C++&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Alex&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.learncpp.com/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Good solid intro, very well done &lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Core Guidelines&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Bjarne Stroustrup, Herb Sutter&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://isocpp.github.io/CppCoreGuidelines&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Pure discipline, by the masters themselves&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Weekly&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Jason Turner&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.youtube.com/user/lefticus1&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Hard core but very good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Templates: The Complete Guide (2nd Edition)&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by David Vandevoorde et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Cybotip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Programming Abstractions in C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric S. Roberts (2012), Stanford CS106B&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Solid and well thought through intro to C++. Excellent for understanding all fundamentals of data structures (incl. more advanced like graph, trees) and algorithms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Peculiarities ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Exploring std::string&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Nice blog that looks under the hood&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://shaharmike.com/cpp/std-string/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|a tip from Slidy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game programming ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Game Programming Patterns&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Robert Nystrom&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://gameprogrammingpatterns.com &lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Contains lots of different coding patterns and describes them in detail&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Game Engine Architecture&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Jason Gregory (3rd ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gameenginebook.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Talks about various components that make up a game engine and how they tie together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3D Computer Graphics ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|The Book of Shaders&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Patricio Gonzalez Vivo and Jen Lowe&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://thebookofshaders.com (pdf can be generated)&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tricks of the 3D Game Programming Gurus&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by André LaMothe, 2003&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|lagout&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Mathematics for 3D Game Programming and Computer Graphics&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric Lengyel (3rd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Need those math skills&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by James M. Van Verth, Lars M. Bishop (2nd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Math yo&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vector Math for 3D Computer Graphics Tutorial&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Bradley Kjell&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://chortle.ccsu.edu/vectorlessons/vectorindex.html &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Demon liked it&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Computing Euler angles from a rotation matrix&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Gregory G. Slabaugh&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.gregslabaugh.net/publications/euler.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Chilitip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Coordinate geometry in 3D space&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Nabla Ltd.&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.nabla.hr/CG-CoGeometryContA.htm&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|BhayanakMoth tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|D3D/OpenGL  tutorial: A trip through the Graphics Pipeline &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Fabian Giesen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Learn OpenGL&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Joey de Vries &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://learnopengl.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Specific to OpenGL but well written and presented (Slidy)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Real-time Rendering&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Tomas Akenine-Möller et al (4th ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.realtimerendering.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Good reference for learning about a wide variety of topics/techniques used in real-time rendering (Slidy)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DirectX ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DirectX Developer  Blog&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by msft&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://devblogs.microsoft.com/directx/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Operating systems ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Modern Operating Systems&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Andrew S. Tanenbaum &amp;amp; Herbert Bos (4th ed. 2015)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|}&lt;br /&gt;
=== AI / ML / DL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Paradigms of Artificial Intelligence Programming&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Peter Norvig&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/norvig/paip-lisp&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, gotta love common lisp!&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Artificial Intelligence: A Modern Approach&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stuart Russell &amp;amp; Peter Norvig (Pearson Edu Ltd 3rd edition)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://aima.cs.berkeley.edu/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Deep Learning&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Goodfellow, Bengio and Courville (MIT Press 2016)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.deeplearningbook.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Solid intro into machine learning / deep learning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other good shit ==&lt;br /&gt;
* Blender Guru [https://youtu.be/TPrnSACiTJ4 beginner series]&lt;br /&gt;
&lt;br /&gt;
== ChiliWisdom ==&lt;br /&gt;
* &amp;quot;If you're building with warnings, you gotta re-evaluate your life choices&amp;quot; (Int.11.hw)&lt;br /&gt;
* &amp;quot;Get your privates in order&amp;quot;&lt;br /&gt;
* &amp;quot;For those of you who live in weird places that don't have Orios, I feel sorry for you. They look like this, and they are fucking delicious with milk.&amp;quot; (Beg.10)&lt;br /&gt;
* &amp;quot;Everything on a computer is a motherfucking number&amp;quot; (Hugs.11)&lt;br /&gt;
* &amp;quot;Don't turn yourself into a pretzel trying to fit all the STL components together to do everything in a single statement&amp;quot; (Int.16.hw)&lt;br /&gt;
* &amp;quot;You can't touch your parents' privates. Don't do it, it's weird&amp;quot; (Int.17.1 on inheritance)&lt;br /&gt;
* “If you have someone’s address, you can fuck with them. Just ask any Twitch streamer” (Int.2 on pointers, tx DownUp)&lt;br /&gt;
* &amp;quot;What do you think you gotta use? Say it with me... std::move()&amp;quot;&lt;br /&gt;
* &amp;quot;With &amp;lt;code&amp;gt;noexcept&amp;lt;/code&amp;gt;, the STL will now use your move constructor for great justice&amp;quot; (Int.22 on exceptions)&lt;br /&gt;
* &amp;quot;At the end of this, I'm gonna have a vector of pointers to stationary poos and then over that range I can just randomly select an index and use that pointer to do something with that poo&amp;quot; (STD Gems [Copy/Filter] on std::copy_if)&lt;br /&gt;
* &amp;quot;Unordered map is the college girl of associative containers; I keep getting older and older, they just stay the same age&amp;quot; (Int.24.2 on constant time performance)&lt;br /&gt;
* &amp;quot;The other way to identify the mechanism of failure is the 'Bust Your Ass' method&amp;quot; (Advanced 3.2hw, talking about debugging strategies)&lt;br /&gt;
* &amp;quot;SFML is a tool for babies&amp;quot; [because it uses degrees] (Advanced 4.1, going on a rant against the sexagesimal number system)&lt;br /&gt;
* Chili's well researched but rejected proposal for an STL addition can be found [https://youtu.be/4EZVTNHmojc?t=223 here]&lt;br /&gt;
* &amp;quot;It is working very sexily, powered under the hood by the matrix representation of transformations&amp;quot; (Adv.5.2)&lt;br /&gt;
* &amp;quot;Today, we are going to confront the crazy self mumbler. We might get ourselves stabbed in the spleen. But a man's gotta do what a man's gotta do&amp;quot; (3D Fundamentals 10, on fixing texture wiggling)&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3300</id>
		<title>Tools &amp; Resources</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=Tools_%26_Resources&amp;diff=3300"/>
				<updated>2020-06-27T19:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* ChiliWisdom */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful Tools &amp;amp; Resources (WORK IN PROGRESS)&lt;br /&gt;
&lt;br /&gt;
== How to contribute ==&lt;br /&gt;
These are all links to external and publicly available sources, no guarantees / responsibility inferred.&lt;br /&gt;
If there are resources you like and would like to recommend, post them on the Discord and mention r_vdw.&lt;br /&gt;
&lt;br /&gt;
== Windows productivity apps ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|FrHed&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Versatile binary file / hex editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://sourceforge.net/projects/frhed/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|HxD&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good freeware hex and disk editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://mh-nexus.de/en/hxd/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Slidytip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ShareX&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Screen capture / file sharing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://getsharex.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Notepad++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor and Notepad replacement&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://notepad-plus-plus.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Codeshare&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Handy tool to share code snippets&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://codeshare.io/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Self destructs in 24 hrs&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Gimp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Cross-platform image editor (GNU/Linux,OS X,Windows,...&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gimp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|-&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Krita&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Open source painting program&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://krita.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pyxel Edit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Pixel art editor (make tilesets, levels,animations) by Daniel Kvarfordt &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://pyxeledit.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|AP tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vim&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Source code editor, Notepad++ alternative &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.vim.org/download.php&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Will make you shit bricks real good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Sublimle Text&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Text editor for code, markup and prose&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sublimetext.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very versatile&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Audacity Audio&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Digital multi-track audio grabbing/recording/editing&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.audacityteam.org&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Open source, dev in C/C++&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tiled&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Flexible tiled map editor&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.mapeditor.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Online compiling / testing / visualization ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Godbolt's Compiler Explorer&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Matt Godbolt&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://godbolt.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Analyze and compare the way C++ code compiles across different compilers&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Ideone&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compiler and debugger (~60 languages)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.ideone.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Wandbox&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Online compilation service&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://wandbox.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Data structure and algorithm visualization&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|USFCA / CS / David Galles&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|see it and you'll understand&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Active GitHub Forks&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|See who forked (&amp;amp;last committed) out of date GitHub libs/projects&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://techgaun.github.io/active-forks/index.html&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C++ Libraries ==&lt;br /&gt;
=== Library / package managers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|vcpkg&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|For Windows, Linux, MacOS. Once installed, provides easy include access to many libraries&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/microsoft/vcpkg&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing the installation for Visual Studio&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|NuGet&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|(NuGet Packet Manager is included with Visual Studio &amp;gt;= 2017)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://nuget.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Chili has a vid showing its use in Visual Studio&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game tooling / engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|SFML&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Simple and Fast Multimedia Library&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.sfml-dev.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Easy to use, good functionality. Chili grabs it in Intermediate 25 (I25)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Eigen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|C++ template library for linear algebra &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://eigen.tuxfamily.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|chilitip&lt;br /&gt;
|}&lt;br /&gt;
=== Productivity ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|JSON for modern C++&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/nlohmann/json&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Look &amp;amp; feel of an STL container (single header file)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|pugixml&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Simple XML parser for C++ with XPath support&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://pugixml.org/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|fmtlib &lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Open-source formatting library&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://fmt.dev/latest/index.html&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|fast/easy, Slidytip&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AI/ML ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DLib&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|C++ toolkit containing machine learning algorithms&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://dlib.net/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Categorized / aggregation sites ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|cppreference libraries&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|As suggested by cppreference users&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com/w/cpp/links/libs&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost C++ libraries&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|boost your shit&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.boost.org/doc/libs/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Lucid Index&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Searchable list of useful libraries (self hosted)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://lucidindex.com/cpp/browse&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reference sites ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Most comprehensve reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://en.cppreference.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Hardccore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.cplusplus.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Softcore&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Stack Overflow&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Good reference site&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://stackexchange.com/sites#&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Very active community&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|ISOcpp&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|The home of standard C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://isocpp.org/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|For those purists&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Literature (books, blogs, papers, written shit)==&lt;br /&gt;
=== Programming Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;&amp;quot;|Name&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;&amp;quot;|Description&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;&amp;quot;|Link&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|What's so great?&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#ddf;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Structure and Interpretation of Computer Programs&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Harold Abelson et al. (2nd ed. 1996), MIT Press&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://web.mit.edu/alexmv/6.037/sicp.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Just a classic&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Clean Code&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Robert C. Martin (14th ed. 2015), Prentice Hall&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://ptgmedia.pearsoncmg.com/images/9780132350884/samplepages/9780132350884.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Sample chapter, then just buy it&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Fundamentals ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Primer, 5th Edition&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stanley B. Lippman et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.charleshouserjr.com/Cplus2.pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, rewritten for C++11. Approachable for beginners&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Learn C++&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Alex&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.learncpp.com/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Good solid intro, very well done &lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Core Guidelines&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Bjarne Stroustrup, Herb Sutter&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://isocpp.github.io/CppCoreGuidelines&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Pure discipline, by the masters themselves&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Weekly&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Jason Turner&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://www.youtube.com/user/lefticus1&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Hard core but very good&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|C++ Templates: The Complete Guide (2nd Edition)&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by David Vandevoorde et al&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Cybotip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Programming Abstractions in C++&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric S. Roberts (2012), Stanford CS106B&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Solid and well thought through intro to C++. Excellent for understanding all fundamentals of data structures (incl. more advanced like graph, trees) and algorithms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== C++ Peculiarities ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Exploring std::string&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|Nice blog that looks under the hood&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://shaharmike.com/cpp/std-string/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|a tip from Slidy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game programming ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Game Programming Patterns&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Robert Nystrom&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://gameprogrammingpatterns.com &lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Contains lots of different coding patterns and describes them in detail&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Game Engine Architecture&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Jason Gregory (3rd ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://www.gameenginebook.com/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Talks about various components that make up a game engine and how they tie together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3D Computer Graphics ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|The Book of Shaders&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Patricio Gonzalez Vivo and Jen Lowe&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://thebookofshaders.com (pdf can be generated)&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Tricks of the 3D Game Programming Gurus&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by André LaMothe, 2003&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|lagout&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Mathematics for 3D Game Programming and Computer Graphics&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Eric Lengyel (3rd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Need those math skills&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Essential Mathematics for Games and Interactive Applications: A Programmer’s Guide&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by James M. Van Verth, Lars M. Bishop (2nd ed.)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Math yo&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Vector Math for 3D Computer Graphics Tutorial&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Bradley Kjell&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://chortle.ccsu.edu/vectorlessons/vectorindex.html &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Demon liked it&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Computing Euler angles from a rotation matrix&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Gregory G. Slabaugh&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.gregslabaugh.net/publications/euler.pdf&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Chilitip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Coordinate geometry in 3D space&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Nabla Ltd.&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.nabla.hr/CG-CoGeometryContA.htm&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|BhayanakMoth tip&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|D3D/OpenGL  tutorial: A trip through the Graphics Pipeline &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Fabian Giesen&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|https://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Learn OpenGL&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Joey de Vries &lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://learnopengl.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Specific to OpenGL but well written and presented (Slidy)&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|Real-time Rendering&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|by Tomas Akenine-Möller et al (4th ed. 2018)&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;text-align:left;&amp;quot;|http://www.realtimerendering.com&lt;br /&gt;
| style=&amp;quot;border:1px solid grey;&amp;quot;|Good reference for learning about a wide variety of topics/techniques used in real-time rendering (Slidy)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DirectX ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|DirectX Developer  Blog&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by msft&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://devblogs.microsoft.com/directx/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
=== Operating systems ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Modern Operating Systems&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Andrew S. Tanenbaum &amp;amp; Herbert Bos (4th ed. 2015)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|Google using filetype:pdf&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|}&lt;br /&gt;
=== AI / ML / DL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:1px solid grey;border-collapse:collapse;width:100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Paradigms of Artificial Intelligence Programming&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Peter Norvig&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|https://github.com/norvig/paip-lisp&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work, gotta love common lisp!&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Artificial Intelligence: A Modern Approach&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Stuart Russell &amp;amp; Peter Norvig (Pearson Edu Ltd 3rd edition)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://aima.cs.berkeley.edu/&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Standard work&lt;br /&gt;
|- style=&amp;quot;border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:35%;border:1px solid grey;text-align:left;&amp;quot;|Deep Learning&lt;br /&gt;
| style=&amp;quot;width:30%;border:1px solid grey;text-align:left;&amp;quot;|by Goodfellow, Bengio and Courville (MIT Press 2016)&lt;br /&gt;
| style=&amp;quot;width:20%;border:1px solid grey;text-align:left;&amp;quot;|http://www.deeplearningbook.org&lt;br /&gt;
| style=&amp;quot;width:15%;border:1px solid grey;&amp;quot;|Solid intro into machine learning / deep learning&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other good shit ==&lt;br /&gt;
* Blender Guru [https://youtu.be/TPrnSACiTJ4 beginner series]&lt;br /&gt;
&lt;br /&gt;
== ChiliWisdom ==&lt;br /&gt;
* &amp;quot;If you're building with warnings, you gotta re-evaluate your life choices&amp;quot; (Int.11.hw)&lt;br /&gt;
* &amp;quot;Get your privates in order&amp;quot;&lt;br /&gt;
* &amp;quot;For those of you who live in weird places that don't have Orios, I feel sorry for you. They look like this, and they are fucking delicious with milk.&amp;quot; (Beg.10)&lt;br /&gt;
* &amp;quot;Everything on a computer is a motherfucking number&amp;quot; (Hugs.11)&lt;br /&gt;
* &amp;quot;Don't turn yourself into a pretzel trying to fit all the STL components together to do everything in a single statement&amp;quot; (Int.16.hw)&lt;br /&gt;
* &amp;quot;You can't touch your parent's privates. Don't do it, it's weird&amp;quot; (Int.17.1 on inheritance)&lt;br /&gt;
* “If you have someone’s address, you can fuck with them. Just ask any Twitch streamer” (Int.2 on pointers, tx DownUp)&lt;br /&gt;
* &amp;quot;What do you think you gotta use? Say it with me... std::move()&amp;quot;&lt;br /&gt;
* &amp;quot;With &amp;lt;code&amp;gt;noexcept&amp;lt;/code&amp;gt;, the STL will now use your move constructor for great justice&amp;quot; (Int.22 on exceptions)&lt;br /&gt;
* &amp;quot;At the end of this, I'm gonna have a vector of pointers to stationary poos and then over that range I can just randomly select an index and use that pointer to do something with that poo&amp;quot; (STD Gems [Copy/Filter] on std::copy_if)&lt;br /&gt;
* &amp;quot;Unordered map is the college girl of associative containers; I keep getting older and older, they just stay the same age&amp;quot; (Int.24.2 on constant time performance)&lt;br /&gt;
* &amp;quot;The other way to identify the mechanism of failure is the 'Bust Your Ass' method&amp;quot; (Advanced 3.2hw, talking about debugging strategies)&lt;br /&gt;
* &amp;quot;SFML is a tool for babies&amp;quot; [because it uses degrees] (Advanced 4.1, going on a rant against the sexagesimal number system)&lt;br /&gt;
* Chili's well researched but rejected proposal for an STL addition can be found [https://youtu.be/4EZVTNHmojc?t=223 here]&lt;br /&gt;
* &amp;quot;It is working very sexily, powered under the hood by the matrix representation of transformations&amp;quot; (Adv.5.2)&lt;br /&gt;
* &amp;quot;Today, we are going to confront the crazy self mumbler. We might get ourselves stabbed in the spleen. But a man's gotta do what a man's gotta do&amp;quot; (3D Fundamentals 10, on fixing texture wiggling)&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3291</id>
		<title>3D Fundamentals Tutorial 11</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3291"/>
				<updated>2020-06-14T18:31:17Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Things that are behind get covered up by things that are in front.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/HyVc0X9JKpg here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* The need for occlusion in scenes with multiple objects [https://youtu.be/HyVc0X9JKpg?t=0m24s 0:24]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We used culling of triangles when drawing convex shapes&lt;br /&gt;
:* But this doen't solve our problem with occlusion (e.g. multiple meshes in the same scene)&lt;br /&gt;
:* One could considers the painter's algorithm, but that's inefficient and of limited use&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Solution: the z-buffer: simple, elegant &amp;amp; performant [https://youtu.be/HyVc0X9JKpg?t=2m27s 2:27]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Essentially sorts triangles based on their depth at the pixel level&lt;br /&gt;
:* Uses two 2D-arrays (for x,y coordinates): a back-buffer (of colors, in &amp;lt;code&amp;gt;gfx&amp;lt;/code&amp;gt; in our case) as a render target, and a z-buffer (of floats) to store depth&lt;br /&gt;
:* We initialize the z-buffer with infinity&lt;br /&gt;
:* Whenever we want to write to the back-buffer, we check to see if z-value of the pixel we are drawing is smaller (and set the z-buffer in that case)&lt;br /&gt;
:* This is a special sorting case [https://youtu.be/HyVc0X9JKpg?t=6m26s 6:26]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation in code [https://youtu.be/HyVc0X9JKpg?t=7m06s 7:06]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ZBuffer&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class, &amp;lt;code&amp;gt;if (zb.TestAndSet(x,y,z))&amp;lt;/code&amp;gt; before the &amp;lt;code&amp;gt;PutPixel&amp;lt;/code&amp;gt; call&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* If done well, Z-testing can reduce rendering time [https://youtu.be/HyVc0X9JKpg?t=9m54s 9:54]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Works best if geometries are sorted and drawn from front to back (more Z-test rejections)&lt;br /&gt;
:* This is contrary to intuition and old/other techniques (e.g. in 2D: drawing sprites and tilemaps)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Scene definitions and demo [https://youtu.be/HyVc0X9JKpg?t=10m58s 10:58]&lt;br /&gt;
* Differences with Hardware APIs [https://youtu.be/HyVc0X9JKpg?t=11m50s 11:50]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* These provide more options for configuring the z-buffer, such as depth comparison operators, choice of formats/types&lt;br /&gt;
:* These typically store 1/z in the buffer, requiring corrections for depth precision (high in the near plane, low in the far plane)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Dealing with translucent pixels and depth [https://youtu.be/HyVc0X9JKpg?t=13m58s 13:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* You will need to store the order of all the translucent pixels up until the first opaque one&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Stencil Buffers [https://youtu.be/HyVc0X9JKpg?t=14m28s 14:28]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Provide more flexibility to reject pixels &amp;amp; have more control (general purpose bufffers)&lt;br /&gt;
:* E.g. for UIs, HUDs, mirrors, shadow effects etc.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Next up: vertex shaders and working towards dynamic lighting effects [https://youtu.be/HyVc0X9JKpg?t=15m00s 15:00]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
Paper on [https://developer.nvidia.com/content/depth-precision-visualized depth precision]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 12|Next in series (Tutorial 12)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3290</id>
		<title>3D Fundamentals Tutorial 11</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3290"/>
				<updated>2020-06-14T18:27:14Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Things that are behind get covered up by things that are in front.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/HyVc0X9JKpg here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Occlusion for multiple objects [https://youtu.be/HyVc0X9JKpg?t=0m24s 0:24]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We used culling of triangles when drawing convex shapes&lt;br /&gt;
:* But this doen't solve our problem with occlusion (e.g. multiple meshes in the same scene)&lt;br /&gt;
:* One could considers the painter's algorithm, but that's inefficient and of limited use&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Solution: the z-buffer: simple, elegant &amp;amp; performant [https://youtu.be/HyVc0X9JKpg?t=2m27s 2:27]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Essentially sorts triangles based on their depth at the pixel level&lt;br /&gt;
:* Uses two 2D-arrays (for x,y coordinates): a back-buffer (of colors, in &amp;lt;code&amp;gt;gfx&amp;lt;/code&amp;gt; in our case) as a render target, and a z-buffer (of floats) to store depth&lt;br /&gt;
:* We initialize the z-buffer with infinity&lt;br /&gt;
:* Whenever we want to write to the back-buffer, we check to see if z-value of the pixel we are drawing is smaller (and set the z-buffer in that case)&lt;br /&gt;
:* This is a special sorting case [https://youtu.be/HyVc0X9JKpg?t=6m26s 6:26]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation in code [https://youtu.be/HyVc0X9JKpg?t=7m06s 7:06]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ZBuffer&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class, &amp;lt;code&amp;gt;if (zb.TestAndSet(x,y,z))&amp;lt;/code&amp;gt; before the &amp;lt;code&amp;gt;PutPixel&amp;lt;/code&amp;gt; call&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* If done well, Z-testing can reduce rendering time [https://youtu.be/HyVc0X9JKpg?t=9m54s 9:54]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Works best if geometries are sorted and drawn from front to back (more Z-test rejections)&lt;br /&gt;
:* This is contrary to intuition and old/other techniques (e.g. in 2D: drawing sprites and tilemaps)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Scene definitions and demo [https://youtu.be/HyVc0X9JKpg?t=10m58s 10:58]&lt;br /&gt;
* Differences with Hardware APIs [https://youtu.be/HyVc0X9JKpg?t=11m50s 11:50]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* These provide more options for configuring the z-buffer, such as depth comparison operators, choice of formats/types&lt;br /&gt;
:* These typically store 1/z in the buffer, requiring corrections for depth precision (high in the near plane, low in the far plane)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Dealing with translucent pixels and depth [https://youtu.be/HyVc0X9JKpg?t=13m58s 13:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* You will need to store the order of all the translucent pixels up until the first opaque one&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Stencil Buffers [https://youtu.be/HyVc0X9JKpg?t=14m28s 14:28]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Provide more flexibility to reject pixels &amp;amp; have more control (general purpose bufffers)&lt;br /&gt;
:* E.g. for UIs, HUDs, mirrors, shadow effects etc.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Next up: vertex shaders and working towards dynamic lighting effects [https://youtu.be/HyVc0X9JKpg?t=15m00s 15:00]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
Paper on [https://developer.nvidia.com/content/depth-precision-visualized depth precision]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 12|Next in series (Tutorial 12)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3289</id>
		<title>3D Fundamentals Tutorial 11</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_11&amp;diff=3289"/>
				<updated>2020-06-14T17:59:48Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Things that are behind get covered up by things that are in front.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/HyVc0X9JKpg here].&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
Paper on [https://developer.nvidia.com/content/depth-precision-visualized depth precision]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 12|Next in series (Tutorial 12)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_10&amp;diff=3288</id>
		<title>3D Fundamentals Tutorial 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_10&amp;diff=3288"/>
				<updated>2020-06-09T17:41:38Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we get the butt wiggling texture to respect our authoritae! In other words, we upgrade our affine texture mapping to perspective-correct texture mapping, putting the kibosh on the fucked-up texture distortion.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/1Dv2-cLAJXw here].&lt;br /&gt;
&lt;br /&gt;
You can see a video that really exaggerates what affine (warpy) textures look like [https://youtu.be/8IRT3SdRz8c?t=1260 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* The need for perspective correction: texture warping [https://youtu.be/1Dv2-cLAJXw?t=0m47s 0:47]&lt;br /&gt;
* Explanation &amp;amp; visualization of the problem [https://youtu.be/1Dv2-cLAJXw?t=1m57s 1:57]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Linear mapping of screen coordinates to texture coordinates is not correct&lt;br /&gt;
:* Reason: interpolation in screenspace is different from interpolation in object space (and all attributes of the object)&lt;br /&gt;
:* We need &amp;quot;foreshortening&amp;quot;: far things get compressed, close things get expanded&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The math: the z divide makes mapping nonlinear [https://youtu.be/1Dv2-cLAJXw?t=4m28s 4:28]&lt;br /&gt;
* Solution: interpolate between the z-divided texture coordinates [https://youtu.be/1Dv2-cLAJXw?t=5m00s 5:00]&lt;br /&gt;
* Implementing this into code [https://youtu.be/1Dv2-cLAJXw?t=8m40s 8:40]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* In &amp;lt;code&amp;gt;PubeScreenTransformer.h&amp;lt;/code&amp;gt; (where the projection / z-divide is applied)&lt;br /&gt;
:* In &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; (where the interpolation is done) [https://youtu.be/1Dv2-cLAJXw?t=10m57s 10:57]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Demo [https://youtu.be/1Dv2-cLAJXw?t=11m57s 11:57]&lt;br /&gt;
* How perspective correction was (not) handled in early 3d games [https://youtu.be/1Dv2-cLAJXw?t=12m16s 12:16]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* To fully correct, you need an expensive reciprocal operation 1/z for every pixel drawn&lt;br /&gt;
:* PS1 just didn't give a shit [https://youtu.be/1Dv2-cLAJXw?t=13m45s 13:45]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Solution used in hardware pipelines / GPUs [https://youtu.be/1Dv2-cLAJXw?t=14m11s 14:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Control how each vertex attribute is interpolated independently (interpolation modifiers)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* References to full math derivations [https://youtu.be/1Dv2-cLAJXw?t=14m50s 14:50]&lt;br /&gt;
* Side effect of our solution: we now have the correct z-values for each pixel [https://youtu.be/1Dv2-cLAJXw?t=16m20s 16:20]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== Mathematical Derivations ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/visibility-problem-depth-buffer-depth-interpolation Scratchapixel]&lt;br /&gt;
&lt;br /&gt;
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.3.211&amp;amp;rep=rep1&amp;amp;type=pdf Paper]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 11|Next in series (Tutorial 11)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_10&amp;diff=3287</id>
		<title>3D Fundamentals Tutorial 10</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_10&amp;diff=3287"/>
				<updated>2020-06-09T17:37:17Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we get the butt wiggling texture to respect our authoritae! In other words, we upgrade our affine texture mapping to perspective-correct texture mapping, putting the kibosh on the fucked-up texture distortion.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/1Dv2-cLAJXw here].&lt;br /&gt;
&lt;br /&gt;
You can see a video that really exaggerates what affine (warpy) textures look like [https://youtu.be/8IRT3SdRz8c?t=1260 here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* The need for perspective correction: texture warping [https://youtu.be/1Dv2-cLAJXw?t=0m47s 0:47]&lt;br /&gt;
* Explanation &amp;amp; visualization of the problem [https://youtu.be/1Dv2-cLAJXw?t=1m57s 1:57]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Linear mapping of screen coordinates to texture coordinates is not correct&lt;br /&gt;
:* Reason: interpolation in screenspace is different from interpolation in object space (and all attributes of the object)&lt;br /&gt;
:* We need &amp;quot;foreshortening&amp;quot;: far things get compressed, close things get expanded&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The math: the z divide makes mapping nonlinear [https://youtu.be/1Dv2-cLAJXw?t=4m28s 4:28]&lt;br /&gt;
* Solution: interpolate between the z-divided texture coordinates [https://youtu.be/1Dv2-cLAJXw?t=5m00s 5:00]&lt;br /&gt;
* Implementing this into code [https://youtu.be/1Dv2-cLAJXw?t=8m40s 8:40]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* In &amp;lt;code&amp;gt;PubeScreenTransformer.h&amp;lt;/code&amp;gt; (where the projection / z-divide is applied)&lt;br /&gt;
:* In &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; (where the interpolation is done) [https://youtu.be/1Dv2-cLAJXw?t=10m57s 10:57]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Demo [https://youtu.be/1Dv2-cLAJXw?t=11m57s 11:57]&lt;br /&gt;
* How perspective correction was (not) handled in early 3d games [https://youtu.be/1Dv2-cLAJXw?t=12m16s 12:16]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* To fully correct, you need an expensive reciprocal operation 1/z for every pixel drawn&lt;br /&gt;
:* Some awful examples of badly handled perspective drawing [https://youtu.be/1Dv2-cLAJXw?t=13m45s 13:45]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Solution used in hardware pipelines / GPUs [https://youtu.be/1Dv2-cLAJXw?t=14m11s 14:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Control how each vertex attribute is interpolated independently (interpolation modifiers)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* References to full math derivations [https://youtu.be/1Dv2-cLAJXw?t=14m50s 14:50]&lt;br /&gt;
* Side effect of our solution: we now have the correct z-values for each pixel [https://youtu.be/1Dv2-cLAJXw?t=16m20s 16:20]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== Mathematical Derivations ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation/visibility-problem-depth-buffer-depth-interpolation Scratchapixel]&lt;br /&gt;
&lt;br /&gt;
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.3.211&amp;amp;rep=rep1&amp;amp;type=pdf Paper]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 11|Next in series (Tutorial 11)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3281</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3281"/>
				<updated>2020-06-03T19:28:04Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable Pixel Shader in the rendering pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Reflections on our approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3280</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3280"/>
				<updated>2020-06-01T11:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable Pixel Shader in the rendering pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Reflections on our approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3279</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3279"/>
				<updated>2020-06-01T11:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable Pixel Shader in the rendering pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Reflections on this approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3278</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3278"/>
				<updated>2020-06-01T11:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable Pixel Shader in the rendering pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Reflections on this approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3277</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3277"/>
				<updated>2020-06-01T11:32:44Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable Pixel Shader in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Reflections on this approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3276</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3276"/>
				<updated>2020-06-01T11:31:33Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Reflections on this approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3275</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3275"/>
				<updated>2020-06-01T11:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
:* Demo [https://youtu.be/pef2405M-os?t=19m19s 19:19]&lt;br /&gt;
* Reflections on this approach to Pixel Shading [https://youtu.be/pef2405M-os?t=19m58s 19:58]&lt;br /&gt;
:* With our approach, the sky is the limit in terms of adding options/effects to the Pixel Shader&lt;br /&gt;
:* However, because the whole pipeline is templated, each effect requires a pipeline&lt;br /&gt;
::- Adantage of using templates: enables aggressive inlining / compiler optimization&lt;br /&gt;
::- Disadvantage: we can't switch effects easily at runtime&lt;br /&gt;
:* There are differences between this approach and how Hardware 3D APIs (like Direct3D and OpenGL) implement this flexibility&lt;br /&gt;
::- These let you switch components (e.g. by binding a different shader dynamically)&lt;br /&gt;
::- Another difference: use of texturing units seperate from the shader object [https://youtu.be/pef2405M-os?t=21m14s 21:14]&lt;br /&gt;
&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3274</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3274"/>
				<updated>2020-06-01T11:18:02Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
:* Need to address the issue: we can't store color data in the 8 unique cube vertices&lt;br /&gt;
:* Solution: make the faces of the cube independent (no shared vertices) [https://youtu.be/pef2405M-os?t=16m22s 16:22]&lt;br /&gt;
::- This requires 6 faces x 4 vertices per face = 24 vertices&lt;br /&gt;
:* Definition of &amp;lt;code&amp;gt;SolidEffect.h&amp;lt;/code&amp;gt; (without interpolation of colors)&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlainIndependentFaces()&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the 24 vertices [https://youtu.be/pef2405M-os?t=18m15s 18:15]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3273</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3273"/>
				<updated>2020-06-01T11:12:38Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;VertexColorEffect&amp;lt;/code&amp;gt; functor will not hold a texture and return interpolated texture coordinates&lt;br /&gt;
:* Instead, it interpolates colors operating on a &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; object that holds RGB values (we encode the Vertex colors as floats)&lt;br /&gt;
:* Cube definition now needs to hold color data of each Vertex [https://youtu.be/pef2405M-os?t=10m07s 10:07]&lt;br /&gt;
:* We need a conversion operator and a conversion constructor to translate between the &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Color&amp;lt;/code&amp;gt; representation of colors [https://youtu.be/pef2405M-os?t=11m12s 11:12]&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: generalizing Vertex transformations (independent of the pixel shader effect) [https://youtu.be/pef2405M-os?t=11m45s 11:45]&lt;br /&gt;
:* Adding a static function &amp;lt;code&amp;gt;GetPlain()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; to get the Vertex colors [https://youtu.be/pef2405M-os?t=13m39s 13:39]&lt;br /&gt;
::&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
template&amp;lt;class V&amp;gt;&lt;br /&gt;
static IndexedTriangleList&amp;lt;V&amp;gt; GetPlain(float size = 1.0f)&lt;br /&gt;
{...}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Coding the scene class &amp;lt;/code&amp;gt;CubeVertexColorScene.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=14m13s 14:13]&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3272</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3272"/>
				<updated>2020-06-01T11:01:36Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
::- The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
::- Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
:* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
::- The code now renders the same scene, but has become completely configurable&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3271</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3271"/>
				<updated>2020-06-01T11:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Changes to the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=5m37s 5:37]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; object now holds an &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; object (which holds all shader data and methods)&lt;br /&gt;
:* Coding the &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m03s 6:03]&lt;br /&gt;
:* Coding the &amp;lt;code&amp;gt;PixelShader&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=6m22s 6:22]&lt;br /&gt;
* Putting it all together in a new &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; class [https://youtu.be/pef2405M-os?t=7m26s 7:26]&lt;br /&gt;
:* The code now renders the same scene, but has become completely configurable&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Color Blending [https://youtu.be/pef2405M-os?t=8m31s 8:31]&lt;br /&gt;
&lt;br /&gt;
* Making a new &amp;lt;code&amp;gt;Effect&amp;lt;/code&amp;gt;: Solid Colors [https://youtu.be/pef2405M-os?t=14m47s 14:47]&lt;br /&gt;
&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3270</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3270"/>
				<updated>2020-06-01T10:52:23Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; to take a pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3269</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3269"/>
				<updated>2020-06-01T10:51:34Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust the PutPixel to take the pixel shader object, and call the function operator with the interpolated Vertex data:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; line&amp;gt;&lt;br /&gt;
gfx.PutPixel( x,y,effect.ps( iLine ) );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3268</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3268"/>
				<updated>2020-06-01T10:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
:* This is where we are ultimately determining the color of the pixel&lt;br /&gt;
:* Inside the PutPixel function, we want to call a shader object that defines the coloring behavior&lt;br /&gt;
* Implementation of the programmable pixel shader stage in the pipeline [https://youtu.be/pef2405M-os?t=3m11s 3:11]&lt;br /&gt;
:* We template the pipeline class on an &amp;lt;code&amp;gt;&amp;lt;class Effect&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:* We will adjust the definition of the &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; class depending on what effect we are using&lt;br /&gt;
:* We  adjust the PutPixel call as:&lt;br /&gt;
:: &lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3267</id>
		<title>3D Fundamentals Tutorial 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_9&amp;diff=3267"/>
				<updated>2020-06-01T10:38:10Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we incorporate our first shader stage into the 3D pipeline: the pixel shader stage. We also explore some basic example pixel shaders (more heavy-duty stuff to come later).&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/pef2405M-os here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What  is a Pixel Shader and why is it used? [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We want to make color mapping of the triangles in the rendering pipeline configurable&lt;br /&gt;
:* One way is to use templated function objects (functors) as &amp;quot;plug-in&amp;quot; code&lt;br /&gt;
:* These functors determine the color of the pixel based on their input&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Refactoring of the &amp;lt;code&amp;gt;gfx.PutPixel(...)&amp;lt;/code&amp;gt; function in &amp;lt;code&amp;gt;Pipeline.h&amp;lt;code&amp;gt; [https://youtu.be/pef2405M-os?t=2m04s 2:04]&lt;br /&gt;
&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
* ... [https://youtu.be/pef2405M-os?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 10|Next in series (Tutorial 10)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3266</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3266"/>
				<updated>2020-05-21T21:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementing a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; type used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;/code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;code&amp;gt;ChiliMath.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=13m36s 13:36]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=14m01s 14:01]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* All triangle draw functions removed (moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;) &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* New &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; setup [https://youtu.be/aeU8eVAExMQ?t=14m14s 14:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; is made into a wrapper around a static function that returns triangle vertices.&lt;br /&gt;
:* &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; Builds and binds translation and rotation transformations based on keyboard input. All other functions have been moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* We now have our new starting point from which we can build our 3-d engine with shaders [https://youtu.be/aeU8eVAExMQ?t=16m38s 16:38]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Up next: a pixel shader&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3265</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3265"/>
				<updated>2020-05-21T20:52:18Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; type used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;/code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;code&amp;gt;ChiliMath.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=13m36s 13:36]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=14m01s 14:01]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* All triangle draw functions removed (moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;) &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* New &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; setup [https://youtu.be/aeU8eVAExMQ?t=14m14s 14:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; is made into a wrapper around a static function that returns triangle vertices.&lt;br /&gt;
:* &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; Builds and binds translation and rotation transformations based on keyboard input. All other functions have been moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* We now have our new starting point from which we can build our 3-d engine with shaders [https://youtu.be/aeU8eVAExMQ?t=16m38s 16:38]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Up next: a pixel shader&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3264</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3264"/>
				<updated>2020-05-21T20:51:35Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;/code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;code&amp;gt;ChiliMath.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=13m36s 13:36]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=14m01s 14:01]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* All triangle draw functions removed (moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;) &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* New &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; setup [https://youtu.be/aeU8eVAExMQ?t=14m14s 14:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; is made into a wrapper around a static function that returns triangle vertices.&lt;br /&gt;
:* &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; Builds and binds translation and rotation transformations based on keyboard input. All other functions have been moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* We now have our new starting point from which we can build our 3-d engine with shaders [https://youtu.be/aeU8eVAExMQ?t=16m38s 16:38]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Up next: a pixel shader&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3263</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3263"/>
				<updated>2020-05-21T20:51:12Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;/code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;code&amp;gt;ChiliMath.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=13m36s 13:36]&lt;br /&gt;
* Adjustments to &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=14m01s 14:01]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* All triangle draw functions removed (moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;) &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* New &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; setup [https://youtu.be/aeU8eVAExMQ?t=14m14s 14:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt; is made into a wrapper around a static function that returns triangle vertices.&lt;br /&gt;
:* &amp;lt;code&amp;gt;CubeSkinScene.h&amp;lt;/code&amp;gt; Builds and binds translation and rotation transformations based on keyboard input. All other functions have been moved to &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* We now have our new starting point from which we can build our 3-d engine with shaders [https://youtu.be/aeU8eVAExMQ?t=16m38s 16:38]&lt;br /&gt;
:* Up next: a pixel shader&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3262</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3262"/>
				<updated>2020-05-21T20:39:58Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;/code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;code&amp;gt;ChiliMath.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3261</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3261"/>
				<updated>2020-05-21T20:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation commits: start of the walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
:* Major difference in interpolation approach in the inner rasterization loop. Extended from texture coordinate only to interpolation of the whole vertex. This will be useful later. [https://youtu.be/aeU8eVAExMQ?t=10m37s 10:37]&lt;br /&gt;
:* Data members of the &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class [https://youtu.be/aeU8eVAExMQ?t=11m37s 11:37]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Different Scene classes and &amp;lt;code&amp;gt;TexVertex.h&amp;lt;code&amp;gt; removed [https://youtu.be/aeU8eVAExMQ?t=12m41s 12:41]&lt;br /&gt;
* Templated interpolation implemented in &amp;lt;ChiliMath.h&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=12m54s 12:54]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3260</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3260"/>
				<updated>2020-05-21T20:29:02Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Major refactoring, implementinng a &amp;lt;code&amp;gt;Pipeline&amp;lt;/code&amp;gt; class: Why? [https://youtu.be/aeU8eVAExMQ?t=0m10s 0:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Get rid of a lot of redundancy in the code&lt;br /&gt;
:* Introduce a structure to develop specific parts of the D3D10 Graphics Pipeline&lt;br /&gt;
:* Effective way to deal with proliferation of effects and settings related to graphics&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The fixed function pipeline [https://youtu.be/aeU8eVAExMQ?t=3m00s 3:00]&lt;br /&gt;
* Code refactoring/implementation: walks-through [https://youtu.be/aeU8eVAExMQ?t=5m35s 5:35]&lt;br /&gt;
* Implementing &amp;lt;code&amp;gt;Pipeline.h&amp;lt;/code&amp;gt; [https://youtu.be/aeU8eVAExMQ?t=5m51s 5:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The pipeline works through a series of nested function calls (representing the stages of the pipeline)&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Draw()&amp;lt;/code&amp;gt; function [https://youtu.be/aeU8eVAExMQ?t=6m24s 6:24]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;Vertex&amp;lt;/code&amp;gt; used throughout the pipeline [https://youtu.be/aeU8eVAExMQ?t=6m32s 6:32]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessVertices()&amp;lt;/code&amp;gt; function. Applies rotatioin &amp;amp; translation transformations [https://youtu.be/aeU8eVAExMQ?t=7m25s 7:25]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;AssembleTriangles()&amp;lt;/code&amp;gt; function. Assembles vertex stream into triangles, culls and passes on triangle vertices (three at a time) [https://youtu.be/aeU8eVAExMQ?t=8m06s 8:06]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;ProcessTriangles&amp;lt;/code&amp;gt; function. Placeholder for the Geometry Shader (implemented later). Creates a &amp;lt;code&amp;gt;Triangle&amp;lt;/code&amp;gt; object and passes on [https://youtu.be/aeU8eVAExMQ?t=8m47s 8:47]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PostProcessTriangleVertices()&amp;lt;/code&amp;gt; function. Transforms into screen space and calls the draw function. [https://youtu.be/aeU8eVAExMQ?t=9m42s 9:42]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;DrawTriangle()&amp;lt;/code&amp;gt; function. Same basic triangle drawing function that splits into flat top and flat bottom triangles and call &amp;lt;code&amp;gt;DrawFlatTriangle&amp;lt;/code&amp;gt; with appropriate parameters [https://youtu.be/aeU8eVAExMQ?t=10m01s 10:01]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3259</id>
		<title>3D Fundamentals Tutorial 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_8&amp;diff=3259"/>
				<updated>2020-05-21T20:00:26Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we set up the pipeline that is going to form the scaffolding for our model of the 3D graphics processing. In the coming videos, we are going to be replacing units of fixed functionality in this pipeline one by one with programmable shader stages.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=aeU8eVAExMQ here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* ... [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== 3D Graphics History ==&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 9|Next in series (Tutorial 9)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3255</id>
		<title>3D Fundamentals Tutorial 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3255"/>
				<updated>2020-05-16T21:08:07Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Textures. Put purdy pictures onto your triangles. Lot of interpolation and stuff.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/UaOJxtWxICc here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is texture mapping and why do we want it? [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Mapping a picture onto a geometry (triangles)&lt;br /&gt;
:* Basically, to create real life imagery with high fidelity&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* How to approach texture mapping [https://youtu.be/UaOJxtWxICc?t=2m45s 2:45]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* How NOT to do it: sccaling and rotating points of a sprite&lt;br /&gt;
:* Right way: Generate a mapping of vertices of our geometry to points in our texture&lt;br /&gt;
:* This requires:&lt;br /&gt;
::- Transform the vertices to screen space&lt;br /&gt;
::- Rasterize (using scanlines)&lt;br /&gt;
::- Interpolate from the geometry's screen coordinates (x,y) to coordinates of the texture (u,v)&lt;br /&gt;
::- Use the texture's color at (u,v) to draw the pixel on the screen at (x,y)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Interpolating between three vertices [https://youtu.be/UaOJxtWxICc?t=5m33s 5:33] &lt;br /&gt;
* Pre-stepping [https://youtu.be/UaOJxtWxICc?t=7m20s 7:20] &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* This is done based on the positions of the center of the starting pixel &amp;amp; the scanline&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementing these concepts into code [https://youtu.be/UaOJxtWxICc?t=8m42s 8:42] &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Incorporating data &amp;amp; methods in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Implementing &amp;lt;code&amp;gt;DrawTriangleTex(...)&amp;lt;/code&amp;gt; triangle drawing with textures in &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Graphics.cpp&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=10m55s 10:55] &lt;br /&gt;
:* Texture mapping code [https://youtu.be/UaOJxtWxICc?t=13m50s 13:50] &lt;br /&gt;
:* Texture coordinates pre-stepping [https://youtu.be/UaOJxtWxICc?t=15m23s 15:23]&lt;br /&gt;
:* The scanline loop [https://youtu.be/UaOJxtWxICc?t=17m26s 17:26]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PutPixel&amp;lt;/code&amp;gt; call with &amp;lt;code&amp;gt;tex.GetPixel(...)&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=17m26s 17:26]&lt;br /&gt;
::- We define the texture in normalized space / normalized coordinates, this has clear advantages&lt;br /&gt;
::- We apply texture clamping to make the code robust&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Demonstration on screen [https://youtu.be/UaOJxtWxICc?t=23m00s 23:00]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We observe limitations. Main one: because we map base vertices, we cannot texturize all surfaces&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Improving the interpolation algorithm [https://youtu.be/UaOJxtWxICc?t=26m32s 26:32]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Smarter interpolation: no slope calculations, unifying screen &amp;amp; texture coordinate interpolation&lt;br /&gt;
:* Introduction of the &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Consolidating flat top &amp;amp; flat bottom triangle drawing routines [https://youtu.be/UaOJxtWxICc?t=31m15s 31:15]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Put common routingen in a single function, create wrappers for distinct parts for flat top/bottom&lt;br /&gt;
:* This ceates cleaner code (no duplication), important for maintainability&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Adding features: texture clamping and texture wrapping [https://youtu.be/UaOJxtWxICc?t=33m15s 33:15]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* For clamping, we use &amp;lt;code&amp;gt;std::max&amp;lt;/code&amp;gt;&lt;br /&gt;
:* For wrapping, we use &amp;lt;code&amp;gt;std::fmod&amp;lt;/code&amp;gt; (floating point modulus)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Fixing texture mapping of top &amp;amp; bottom: unfolding the geometry of the cube [https://youtu.be/UaOJxtWxICc?t=36m00s 36:00]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* We &amp;quot;break the weld&amp;quot; (/sharing) of vertices of the cube's different faces&lt;br /&gt;
:* The number of vertices required depends on the level of flexibility/independence: we can move from 8-&amp;gt;14-&amp;gt;24 vertices&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementing unfolding &amp;amp; full surface mapping in the code [https://youtu.be/UaOJxtWxICc?t=38m40s 38:40]&lt;br /&gt;
* Creating a skin for a cube [https://youtu.be/UaOJxtWxICc?t=39m56s 39:56]&lt;br /&gt;
* Advantages of using normalized texture coordinates [https://youtu.be/UaOJxtWxICc?t=41m30s 41:30]&lt;br /&gt;
* Improving texture image quality: bilinear filtering, (isotropic) mip mapping, normal mapping [https://youtu.be/UaOJxtWxICc?t=43m25s 43:25]&lt;br /&gt;
* Recap: you are now master of texture mapping, reverse lookup &amp;amp; interpolation [https://youtu.be/UaOJxtWxICc?t=45m30s 45:30]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 8|Next in series (Tutorial 8)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3254</id>
		<title>3D Fundamentals Tutorial 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3254"/>
				<updated>2020-05-16T21:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Textures. Put purdy pictures onto your triangles. Lot of interpolation and stuff.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/UaOJxtWxICc here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is texture mapping and why do we want it? [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Mapping a picture onto a geometry (triangles)&lt;br /&gt;
:* Basically, to create real life imagery with high fidelity&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* How to approach texture mapping [https://youtu.be/UaOJxtWxICc?t=2m45s 2:45]&lt;br /&gt;
:* How NOT to do it: sccaling and rotating points of a sprite&lt;br /&gt;
:* Right way: Generate a mapping of vertices of our geometry to points in our texture&lt;br /&gt;
:* This requires:&lt;br /&gt;
::- Transform the vertices to screen space&lt;br /&gt;
::- Rasterize (using scanlines)&lt;br /&gt;
::- Interpolate from the geometry's screen coordinates (x,y) to coordinates of the texture (u,v)&lt;br /&gt;
::- Use the texture's color at (u,v) to draw the pixel on the screen at (x,y)&lt;br /&gt;
* Interpolating between three vertices [https://youtu.be/UaOJxtWxICc?t=5m33s 5:33] &lt;br /&gt;
* Pre-stepping [https://youtu.be/UaOJxtWxICc?t=7m20s 7:20] &lt;br /&gt;
:* This is done based on the positions of the center of the starting pixel &amp;amp; the scanline&lt;br /&gt;
* Implementing these concepts into code [https://youtu.be/UaOJxtWxICc?t=8m42s 8:42] &lt;br /&gt;
:* The &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Incorporating data &amp;amp; methods in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Implementing &amp;lt;code&amp;gt;DrawTriangleTex(...)&amp;lt;/code&amp;gt; triangle drawing with textures in &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Graphics.cpp&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=10m55s 10:55] &lt;br /&gt;
:* Texture mapping code [https://youtu.be/UaOJxtWxICc?t=13m50s 13:50] &lt;br /&gt;
:* Texture coordinates pre-stepping [https://youtu.be/UaOJxtWxICc?t=15m23s 15:23]&lt;br /&gt;
:* The scanline loop [https://youtu.be/UaOJxtWxICc?t=17m26s 17:26]&lt;br /&gt;
:* The &amp;lt;code&amp;gt;PutPixel&amp;lt;/code&amp;gt; call with &amp;lt;code&amp;gt;tex.GetPixel(...)&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=17m26s 17:26]&lt;br /&gt;
::- We define the texture in normalized space / normalized coordinates, this has clear advantages&lt;br /&gt;
::- We apply texture clamping to make the code robust&lt;br /&gt;
* Demonstration on screen [https://youtu.be/UaOJxtWxICc?t=23m00s 23:00]&lt;br /&gt;
:* We observe limitations. Main one: because we map base vertices, we cannot texturize all surfaces&lt;br /&gt;
* Improving the interpolation algorithm [https://youtu.be/UaOJxtWxICc?t=26m32s 26:32]&lt;br /&gt;
:* Smarter interpolation: no slope calculations, unifying screen &amp;amp; texture coordinate interpolation&lt;br /&gt;
:* Introduction of the &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
* Consolidating flat top &amp;amp; flat bottom triangle drawing routines [https://youtu.be/UaOJxtWxICc?t=31m15s 31:15]&lt;br /&gt;
:* Put common routingen in a single function, create wrappers for distinct parts for flat top/bottom&lt;br /&gt;
:* This ceates cleaner code (no duplication), important for maintainability&lt;br /&gt;
* Adding features: texture clamping and texture wrapping [https://youtu.be/UaOJxtWxICc?t=33m15s 33:15]&lt;br /&gt;
:* For clamping, we use &amp;lt;code&amp;gt;std::max&amp;lt;/code&amp;gt;&lt;br /&gt;
:* For wrapping, we use &amp;lt;code&amp;gt;std::fmod&amp;lt;/code&amp;gt; (floating point modulus)&lt;br /&gt;
* Fixing texture mapping of top &amp;amp; bottom: unfolding the geometry of the cube [https://youtu.be/UaOJxtWxICc?t=36m00s 36:00]&lt;br /&gt;
:* We &amp;quot;break the weld&amp;quot; (/sharing) of vertices of the cube's different faces&lt;br /&gt;
:* The number of vertices required depends on the level of flexibility/independence: we can move from 8-&amp;gt;14-&amp;gt;24 vertices&lt;br /&gt;
* Implementing unfolding &amp;amp; full surface mapping in the code [https://youtu.be/UaOJxtWxICc?t=38m40s 38:40]&lt;br /&gt;
* Creating a skin for a cube [https://youtu.be/UaOJxtWxICc?t=39m56s 39:56]&lt;br /&gt;
* Advantages of using normalized texture coordinates [https://youtu.be/UaOJxtWxICc?t=41m30s 41:30]&lt;br /&gt;
* Improving texture image quality: bilinear filtering, (isotropic) mip mapping, normal mapping [https://youtu.be/UaOJxtWxICc?t=43m25s 43:25]&lt;br /&gt;
* Recap: you are now master of texture mapping, reverse lookup &amp;amp; interpolation [https://youtu.be/UaOJxtWxICc?t=45m30s 45:30]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 8|Next in series (Tutorial 8)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3253</id>
		<title>3D Fundamentals Tutorial 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3253"/>
				<updated>2020-05-16T20:42:17Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Textures. Put purdy pictures onto your triangles. Lot of interpolation and stuff.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/UaOJxtWxICc here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is texture mapping and why do we want it? [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Mapping a picture onto a geometry (triangles)&lt;br /&gt;
:* Basically, to create real life imagery with high fidelity&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* How to approach texture mapping [https://youtu.be/UaOJxtWxICc?t=2m45s 2:45]&lt;br /&gt;
:* How NOT to do it: sccaling and rotating points of a sprite&lt;br /&gt;
:* Right way: Generate a mapping of vertices of our geometry to points in our texture&lt;br /&gt;
:* This requires:&lt;br /&gt;
::- Transform the vertices to screen space&lt;br /&gt;
::- Rasterize (using scanlines)&lt;br /&gt;
::- Interpolate from the geometry's screen coordinates (x,y) to coordinates of the texture (u,v)&lt;br /&gt;
::- Use the texture's color at (u,v) to draw the pixel on the screen at (x,y)&lt;br /&gt;
* Interpolating between three vertices [https://youtu.be/UaOJxtWxICc?t=5m33s 5:33] &lt;br /&gt;
* Pre-stepping [https://youtu.be/UaOJxtWxICc?t=7m20s 7:20] &lt;br /&gt;
:* This is done based on the positions of the center of the starting pixel &amp;amp; the scanline&lt;br /&gt;
* Implementing these concepts into code [https://youtu.be/UaOJxtWxICc?t=8m42s 8:42] &lt;br /&gt;
:* The &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Incorporating data &amp;amp; methods in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Implementing &amp;lt;code&amp;gt;DrawTriangleTex(...)&amp;lt;/code&amp;gt; triangle drawing with textures in &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Graphics.cpp&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=10m55s 10:55] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 8|Next in series (Tutorial 8)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3252</id>
		<title>3D Fundamentals Tutorial 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3252"/>
				<updated>2020-05-16T20:41:49Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Textures. Put purdy pictures onto your triangles. Lot of interpolation and stuff.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/UaOJxtWxICc here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* What is texture mapping and why do we want it? [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Mapping a picture onto a geometry (triangles)&lt;br /&gt;
:* Basically, to create real life imagery with high fidelity&lt;br /&gt;
* How to approach texture mapping [https://youtu.be/UaOJxtWxICc?t=2m45s 2:45]&lt;br /&gt;
:* How NOT to do it: sccaling and rotating points of a sprite&lt;br /&gt;
:* Right way: Generate a mapping of vertices of our geometry to points in our texture&lt;br /&gt;
:* This requires:&lt;br /&gt;
::- Transform the vertices to screen space&lt;br /&gt;
::- Rasterize (using scanlines)&lt;br /&gt;
::- Interpolate from the geometry's screen coordinates (x,y) to coordinates of the texture (u,v)&lt;br /&gt;
::- Use the texture's color at (u,v) to draw the pixel on the screen at (x,y)&lt;br /&gt;
* Interpolating between three vertices [https://youtu.be/UaOJxtWxICc?t=5m33s 5:33] &lt;br /&gt;
* Pre-stepping [https://youtu.be/UaOJxtWxICc?t=7m20s 7:20] &lt;br /&gt;
:* This is done based on the positions of the center of the starting pixel &amp;amp; the scanline&lt;br /&gt;
* Implementing these concepts into code [https://youtu.be/UaOJxtWxICc?t=8m42s 8:42] &lt;br /&gt;
:* The &amp;lt;code&amp;gt;TexVertex&amp;lt;/code&amp;gt; class&lt;br /&gt;
:* Incorporating data &amp;amp; methods in &amp;lt;code&amp;gt;Cube.h&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Implementing &amp;lt;code&amp;gt;DrawTriangleTex(...)&amp;lt;/code&amp;gt; triangle drawing with textures in &amp;lt;code&amp;gt;Graphics.h&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Graphics.cpp&amp;lt;/code&amp;gt; [https://youtu.be/UaOJxtWxICc?t=10m55s 10:55] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
* [https://youtu.be/UaOJxtWxICc?t=0m1s 0:1]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 8|Next in series (Tutorial 8)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3251</id>
		<title>3D Fundamentals Tutorial 7</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_7&amp;diff=3251"/>
				<updated>2020-05-16T20:21:39Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Textures. Put purdy pictures onto your triangles. Lot of interpolation and stuff.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://youtu.be/UaOJxtWxICc here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Why do we want textures? [https://youtu.be/UaOJxtWxICc?t=0m14s 0:14]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* ...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 8|Next in series (Tutorial 8)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3250</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3250"/>
				<updated>2020-05-11T14:51:42Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
* Recap of our problem: triangles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
* Solution: Back face culling [https://youtu.be/h_Aqol0oTs4?t=2m02s 2:02]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Poor solution: painter's algoritm (sort the triangles back to front, draw front ones last)&lt;br /&gt;
:* Better solution: never draw back facing triangles. For convex single objects front facing triangles will never overlap&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Using a triangle's surface normal to determine its orientation [https://youtu.be/h_Aqol0oTs4?t=5m15s 5:15]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Just the z-component of the face normal is not good enough&lt;br /&gt;
:* Correct approach: take the viewing vector (v1) and the face normal direction (v2)&lt;br /&gt;
:* (viewing vector: vector from focal point to any point on the triangle in world space)&lt;br /&gt;
:* If their dot product is negative (opposide directions), the triangle's face is towards the focal point&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* How to find the face normal: the cross product [https://youtu.be/h_Aqol0oTs4?t=9m51s 9:51]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Comparison of concepts of dot product and cross product&lt;br /&gt;
:* v1 x v2 yields a perpendicular vector (following left hand rule in our system) with length l = area of the parallelogram spanned by v1 and v2&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* The math equation for the cross product [https://youtu.be/h_Aqol0oTs4?t=16m13s 16:13]&lt;br /&gt;
* Getting the face normal vector of our triangles [https://youtu.be/h_Aqol0oTs4?t=19m26s 19:26]&lt;br /&gt;
* Implementing these concepts in our code [https://youtu.be/h_Aqol0oTs4?t=21m04s 21:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* The cross product operator in &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Using cull flags for the triangles [https://youtu.be/h_Aqol0oTs4?t=22m32s 22:32]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Culling needs to be performed before the transformation to screen space [https://youtu.be/h_Aqol0oTs4?t=24m33s 24:33]&lt;br /&gt;
* The order of the vertices (i.e. the index lists for triangles) matters [https://youtu.be/h_Aqol0oTs4?t=26m04s 26:04]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* Use the left handed winding rule when constructing the triangle index list [https://youtu.be/h_Aqol0oTs4?t=27m08s 27:08]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Introduction of the base class &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; for scene definitions its derived classes [https://youtu.be/h_Aqol0oTs4?t=28m50s 28:50]&lt;br /&gt;
* Remaining issues: concave shapes, triangle intersections, occlusion [https://youtu.be/h_Aqol0oTs4?t=31m10s 31:10]&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
:* You can't easily sort this with sorting (although sorting has its place in 3d graphics)&lt;br /&gt;
:* We will come back to these issues later in the series&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3249</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3249"/>
				<updated>2020-05-11T14:46:54Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&lt;br /&gt;
* Recap of our problem: triangles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
* Solution: Back face culling [https://youtu.be/h_Aqol0oTs4?t=2m02s 2:02]&lt;br /&gt;
:* Poor solution: painter's algoritm (sort the triangles back to front, draw front ones last)&lt;br /&gt;
:* Better solution: never draw back facing triangles. For convex single objects front facing triangles will never overlap&lt;br /&gt;
* Using a triangle's surface normal to determine its orientation [https://youtu.be/h_Aqol0oTs4?t=5m15s 5:15]&lt;br /&gt;
:* Just the z-component of the face normal is not good enough&lt;br /&gt;
:* Correct approach: take the viewing vector (v1) and the face normal direction (v2)&lt;br /&gt;
:* (viewing vector: vector from focal point to any point on the triangle in world space)&lt;br /&gt;
:* If their dot product is negative (opposide directions), the triangle's face is towards the focal point&lt;br /&gt;
* How to find the face normal: the cross product [https://youtu.be/h_Aqol0oTs4?t=9m51s 9:51]&lt;br /&gt;
:* Comparison of concepts of dot product and cross product&lt;br /&gt;
:* v1 x v2 yields a perpendicular vector (following left hand rule in our system) with length l = area of the parallelogram spanned by v1 and v2&lt;br /&gt;
* The math equation for the cross product [https://youtu.be/h_Aqol0oTs4?t=16m13s 16:13]&lt;br /&gt;
* Getting the face normal vector of our triangles [https://youtu.be/h_Aqol0oTs4?t=19m26s 19:26]&lt;br /&gt;
* Implementing these concepts in our code [https://youtu.be/h_Aqol0oTs4?t=21m04s 21:04]&lt;br /&gt;
:* The cross product operator in &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Using cull flags for the triangles [https://youtu.be/h_Aqol0oTs4?t=22m32s 22:32]&lt;br /&gt;
* Culling needs to be performed before the transformation to screen space [https://youtu.be/h_Aqol0oTs4?t=24m33s 24:33]&lt;br /&gt;
* The order of the vertices (i.e. the index lists for triangles) matters [https://youtu.be/h_Aqol0oTs4?t=26m04s 26:04]&lt;br /&gt;
:* Use the left handed winding rule when constructing the triangle index list [https://youtu.be/h_Aqol0oTs4?t=27m08s 27:08]&lt;br /&gt;
* Introduction of the base class &amp;lt;code&amp;gt;Scene.h&amp;lt;/code&amp;gt; for scene definitions its derived classes [https://youtu.be/h_Aqol0oTs4?t=28m50s 28:50]&lt;br /&gt;
* Remaining issues: concave shapes, triangle intersections, occlusion [https://youtu.be/h_Aqol0oTs4?t=31m10s 31:10]&lt;br /&gt;
:* You can't easily sort this with sorting (although sorting has its place in 3d graphics)&lt;br /&gt;
:* We will come back to these issues later in the series&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3248</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3248"/>
				<updated>2020-05-11T14:43:06Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&lt;br /&gt;
* Recap of our problem: triangles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
* Solution: Back face culling [https://youtu.be/h_Aqol0oTs4?t=2m02s 2:02]&lt;br /&gt;
:* Poor solution: painter's algoritm (sort the triangles back to front, draw front ones last)&lt;br /&gt;
:* Better solution: never draw back facing triangles. For convex single objects front facing triangles will never overlap&lt;br /&gt;
* Using a triangle's surface normal to determine its orientation [https://youtu.be/h_Aqol0oTs4?t=5m15s 5:15]&lt;br /&gt;
:* Just the z-component of the face normal is not good enough&lt;br /&gt;
:* Correct approach: take the viewing vector (v1) and the face normal direction (v2)&lt;br /&gt;
:* (viewing vector: vector from focal point to any point on the triangle in world space)&lt;br /&gt;
:* If their dot product is negative (opposide directions), the triangle's face is towards the focal point&lt;br /&gt;
* How to find the face normal: the cross product [https://youtu.be/h_Aqol0oTs4?t=9m51s 9:51]&lt;br /&gt;
:* Comparison of concepts of dot product and cross product&lt;br /&gt;
:* v1 x v2 yields a perpendicular vector (following left hand rule in our system) with length l = area of the parallelogram spanned by v1 and v2&lt;br /&gt;
* The math equation for the cross product [https://youtu.be/h_Aqol0oTs4?t=16m13s 16:13]&lt;br /&gt;
* Getting the face normal vector of our triangles [https://youtu.be/h_Aqol0oTs4?t=19m26s 19:26]&lt;br /&gt;
* Implementing these concepts in our code [https://youtu.be/h_Aqol0oTs4?t=21m04s 21:04]&lt;br /&gt;
:* The cross product operator in &amp;lt;code&amp;gt;Vec3&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Using cull flags for the triangles [https://youtu.be/h_Aqol0oTs4?t=22m32s 22:32]&lt;br /&gt;
* Culling needs to be performed before the transformation to screen space [https://youtu.be/h_Aqol0oTs4?t=24m33s 24:33]&lt;br /&gt;
* The order of the vertices (i.e. the index lists for triangles) matters [https://youtu.be/h_Aqol0oTs4?t=26m04s 26:04]&lt;br /&gt;
:* Use the left handed winding rule when constructing the triangle index list [https://youtu.be/h_Aqol0oTs4?t=27m08s 27:08]&lt;br /&gt;
* Introduction of Scene definitions and the &amp;lt;code&amp;gt;SolidCubeClass&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3247</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3247"/>
				<updated>2020-05-11T14:36:50Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&lt;br /&gt;
* Recap of our problem: triangles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
* Solution: Back face culling [https://youtu.be/h_Aqol0oTs4?t=2m02s 2:02]&lt;br /&gt;
:* Poor solution: painter's algoritm (sort the triangles back to front, draw front ones last)&lt;br /&gt;
:* Better solution: never draw back facing triangles. For convex single objects front facing triangles will never overlap&lt;br /&gt;
* Using a triangle's surface normal to determine its orientation [https://youtu.be/h_Aqol0oTs4?t=5m15s 5:15]&lt;br /&gt;
:* Just the z-component of the face normal is not good enough&lt;br /&gt;
:* Correct approach: take the viewing vector (v1) and the face normal direction (v2)&lt;br /&gt;
:* (viewing vector: vector from focal point to any point on the triangle in world space)&lt;br /&gt;
:* If their dot product is negative (opposide directions), the triangle's face is towards the focal point&lt;br /&gt;
* How to find the face normal: the cross product [https://youtu.be/h_Aqol0oTs4?t=9m51s 9:51]&lt;br /&gt;
:* Comparison of concepts of dor product and cross product&lt;br /&gt;
:* v1 x v2 yields a perpendicular vector (following left hand rule in our system) with length l = area of the parallelogram spanned by v1 and v2&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3246</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3246"/>
				<updated>2020-05-11T14:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&lt;br /&gt;
* Recap of our problem: triangles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
* Solution: Back face culling [https://youtu.be/h_Aqol0oTs4?t=2m02s 2:02]&lt;br /&gt;
:* Poor solution: painter's algoritm (sort the triangles back to front, draw front ones last)&lt;br /&gt;
:* Better solution: never draw back facing triangles. For convex single objects front facing triangles will never overlap&lt;br /&gt;
* Using a triangle's surface normal to determine its orientation [https://youtu.be/h_Aqol0oTs4?t=5m15s 5:15]&lt;br /&gt;
:* Just the z-component of the face normal is not good enough&lt;br /&gt;
:* Correct approach: take the viewing vector (v1) and the face normal direction (v2)&lt;br /&gt;
:* (viewing vector: vector from focal point to any point on the triangle in world space)&lt;br /&gt;
:* If their dot product is negative (opposide directions), the triangle's face is towards the focal point&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	<entry>
		<id>https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3245</id>
		<title>3D Fundamentals Tutorial 6</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetchili.net/index.php?title=3D_Fundamentals_Tutorial_6&amp;diff=3245"/>
				<updated>2020-05-11T14:24:02Z</updated>
		
		<summary type="html">&lt;p&gt;R vdw: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Get rid of those dirty back-facers, we don't serve their kind here. Also, learn the new sex move that is taking New England by storm: the Bridgeport Shocker.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
The tutorial video is on YouTube [https://www.youtube.com/watch?v=h_Aqol0oTs4 here].&lt;br /&gt;
&lt;br /&gt;
* Recap of our problem: trianles are always drawn in the same order [https://youtu.be/h_Aqol0oTs4?t=0m20s 0:20]&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
The GitHub repository for the tutorial code is [https://github.com/planetchili/3D_Fundamentals here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://www.patreon.com/planetchili Planet Chili Patreon]&lt;br /&gt;
* [[3D Fundamentals Tutorial 7|Next in series (Tutorial 7)]]&lt;br /&gt;
* [[3D Fundamentals Series]]&lt;/div&gt;</summary>
		<author><name>R vdw</name></author>	</entry>

	</feed>