What is this sorcery?
A collection of DirectX 12 C# samples from Frank D. Luna's book Introduction to 3D Game Programming with Direct3D 12.0. All the samples have been ported to .NET using SharpDX.
Building
The samples will compile with Visual Studio 2015+ and run on Windows 10 with DirectX 12 capable graphics hardware.
Samples
The number prefix for sample name indicates its corresponding chapter from the book.
Note that there might be issues: some which are inherited from the original C++ samples and some which have been introduced during the porting process. All known issues are listed in the issues section.
04-InitDirect3D
Sets up a window using WinForms. Initializes Direct3D 12 and builds a base app with game loop upon which next samples are built.
06-Box
Manually defines vertices to render a colored box. Scene can be rotated and zoomed using mouse buttons.
07-Shapes
Generates geometric primitives. Renders multiple objects using a single vertex and index buffer.
07-LandAndWaves
Constructs a heightmap based terrain and water geometry using a dynamic vertex buffer.
08-LitWaves
Adds ambient, diffuse and specular lighting to the land and waves scene.
08-LitColumns
Introduces parsing and loading a skull mesh from a custom model format. Applies lighting to the shapes scene.
09-Crate
Textures a box with uv-coordinates added to its vertices.
09-TexWaves
Animates a water texture in the land and waves scene.
09-TexColumns
Textures objects in the shapes scene.
10-Blend
Renders the land and waves scene with transparent water and a wire fence textures. Introduces the blending formula and creates a fog effect.
11-Stencil
Constructs a mirror using the stencil buffer and projects a shadow for the skull mesh.
12-TreeBillboards
Renders trees as billboards. Introduces texture arrays and alpha to coverage in relation to MSAA.
13-VecAdd
Sums a bunch of vectors on GPU instead of CPU for high parallelism using a compute shader. Outputs a results.txt file instead of rendering to screen.
13-WavesCS
Uses a compute shader to update the land and waves scene waves simulation on GPU instead of CPU.
13-Blur
Applies a Gaussian blur post-processing effect using a compute shader to the land and waves scene.
13-SobelFilter
Applies a Sobel filter post-processing effect using a compute shader to the land and waves scene to render outlines for geometry.
14-BasicTessellation
Tessellates a quad using 4 control points.
14-BezierPatch
Tessellates a quad using 16 control points cubic Bรฉzier surface.
15-CameraAndDynamicIndexing
Creates a controllable first person camera. Introduces dynamic indexing of texture arrays. Camera is moved using WASD keys and rotated using a mouse.
16-InstancingAndCulling
Renders multiple copies of the skull mesh using a hardware instanced draw call. Culls skulls outside of camera frustum.
17-Picking
Enables picking individual triangles of a car mesh. Right mouse button picks a triangle which is highlighted using a yellow color.
18-CubeMap
Renders a sky texture cube. Uses the cube to render reflections on scene objects.
18-DynamicCube
Renders scene objects into a texture cube every frame. Uses the rendered cube for reflections.
19-NormalMap
Makes use of normal maps in addition to diffuse maps to generate more realistic lighting of surfaces.
20-Shadows
Projects shadows into a shadow map which is blended with the diffuse target.
21-Ssao
Computes real-time screen space ambient occlusion and applies it as a post-processing effect.
22-Quaternions
Animates skull rotation using quaternions.
23-SkinnedMesh
Plays a walking animation for an animated skinned soldier mesh loaded from .m3d format.