└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # 3D Graphics Programming and Game Development in F# 2 | 3 | Inspired by [Functional Programming In Games](https://github.com/Andrea/FunctionalProgrammingInGames) repository. 4 | 5 | This is a WIP document. 6 | 7 | Please suggest papers/articles/resources through Github **pull requests**. If you believe this list is missing something or has factually inaccurate info, you can also file an issue in the **issue tracker**. 8 | 9 | ## OSS Projects 10 | 1. [Aardvark Platform](https://github.com/aardvark-platform) - awesome libraries from math to interactive high-performance graphics applications. Specifically, check out [Aardvark rendering engine](https://github.com/aardvark-platform/aardvark.rendering) and [Aardvark media, Elm-style purely functional UI and 3D graphics](https://github.com/aardvark-platform/aardvark.media) 11 | 1. [F# Rendering Toolkit (Real-Time)](https://github.com/eloraiby/FsRTK/) - includes [Math3D](https://github.com/eloraiby/FsRTK/tree/master/FsRTK.Math3D) 12 | 2. [3D Math in F#](https://github.com/fsprojects/FsMath3D) 13 | 3. [F# GLFW 3.2.1 Binding](https://github.com/fsprojects/FsGlfw3) 14 | 4. [RayTracer F# Implementation](https://bitbucket.org/thedo666/raytracer/src/ad54e0b194b89547e7eeada119ac6a253b80a82b/RaytracerFSharp/?at=default) 15 | 5. [F# Ray Caster Implementation](https://github.com/ChrisPritchard/tiny-ray-caster) 16 | 6. [Shader translation from F# to HLSL](https://github.com/rookboom/SharpShaders) 17 | 7. [Duality Scripting](https://github.com/BraveSirAndrew/DualityScripting) - write F# on the Duality Game Engine. This plugin supports C# too. 18 | 8. [Nu Game Engine](https://github.com/bryanedds/FPWorks) cross-platform F# 2D game engine. It encourages to use a variation of FRP called Iterative Functional Reactive Programming as architectural style. 19 | 9. [FShade](https://github.com/krauthaufen/FShade) - a Library allowing users to write Shaders in F# using code-quotations. 20 | 10. [F# Doom](https://github.com/TIHan/NewFoom) 21 | 11. [F# Quake 3](https://github.com/TIHan/FQuake3) 22 | 12. [A collection of heightmap generators, along with some bmp/ppm image format savers](https://github.com/ChrisPritchard/Heightmaps) 23 | 13. [Fun 3D: Composing 3D objects with F# ](https://github.com/tpetricek/Fun3D) - beginner-friendly environment for composing 3D objects in functional way. 24 | 25 | 26 | ## OSS Samples 27 | 1. [Vulkan in F# samples](https://github.com/realvictorprm/FSharpVulkanSamples) 28 | 2. [F# gamedev samples and slides](https://archive.codeplex.com/?p=fsharpgamedev) 29 | 3. [WebGL F# Fable bindings and example with WebGL](https://github.com/davidtme/Fable-WebGL/blob/master/GameWorldRenderer.fs) 30 | 4. [FSSceneKit City - creating a randomly generated city using the SceneKit API (Xamarin) and F#.](https://developer.xamarin.com/samples/monotouch/ios8/FSSceneKit/) 31 | 5. [ARKit in F#, with realistically proportioned Solar System Objects](https://github.com/lobrien/Orrery) 32 | 6. [WIP: App with facts on the planets in the Solar System. Uses Urho3D and Fabulous (F#)](https://github.com/TimLariviere/ElmishPlanets) 33 | 7. [Three.js, WebGL and F# - a 3D Terrain sample](https://github.com/fable-compiler/samples-browser/blob/master/src/webgl-terrain/App.fs). Live version [here](https://fable.io/samples-browser/webgl-terrain/) 34 | 35 | ## Tutorials 36 | 1. [LearnOpenGL.FSharp. Exercises based on https://learnopengl.com/ tutorials, using F# and Silk.NET as the OpenGL wrapper](https://github.com/Agnael/LearnOpenGL.FSharp) 37 | 2. [F# game tutorial series with Monogame](http://bruinbrown.wordpress.com/f-game-tutorial-series/) 38 | 3. [Unity3D game engine tutorial in F# - an easy way to get started](https://github.com/Thorium/Roll-a-ball-FSharp) 39 | 4. [Tutorial: Using F# with Unity3D 2018.3](https://jacksondunstan.com/articles/5058) 40 | 5. [Programming UrhoSharp with F#](https://docs.microsoft.com/en-us/xamarin/graphics-games/urhosharp/fsharp) 41 | 42 | ## Videos 43 | 1. [Will Smith - Porting Quake III to F#: A Journey to Functional Programming](https://vimeo.com/97530815) 44 | 2. [The 3D Geometry of Louvre Abu Dhabi in F#](https://channel9.msdn.com/Events/FSharp-Events/fsharpConf-2016/The-3D-Geometry-of-Louvre-Abu-Dhabi). [Alternative link](https://vimeo.com/291056935) 45 | 3. [F# in Social Gaming](https://www.youtube.com/watch?v=ZMfqNfAGZHg) 46 | 4. [F# Exchange 2018 - 3D Model Manipulation with F#](https://skillsmatter.com/skillscasts/11603-3d-model-manipulation-with-f-sharp) - need to log in to watch. 47 | 5. [Functional Game Logic With State Pipelines](https://www.youtube.com/watch?v=PFWYwr7Hhhg) 48 | 6. [Teaching F# - from Numerical Expressions to 3D Graphics](http://fpish.net/course/32) 49 | 7. [Using a "tweaked" version of Fable to run FShade in the browser and generate shaders in runtime from F# code, by Georg Haaser](https://www.youtube.com/watch?v=s5rO0RUXXmo) 50 | 8. [F# and MonoGame - Part 1 of Video Series by Dave Thomas](https://www.youtube.com/watch?v=5m28WwJN91U) 51 | 52 | ## Articles 53 | [Star Wars Intro in AutoCAD in F# - part 1 out of 4, others linked in part 1](https://through-the-interface.typepad.com/through_the_interface/2015/01/recreating-the-star-wars-opening-crawl-in-autocad-using-f-part-1.html) 54 | 55 | ### 3D Graphics Programming 56 | 1. [Why Write Shaders in F#?](https://github.com/rookboom/SharpShaders/wiki/Why-write-shaders-in-FSharp%3F) 57 | 2. [Composing Chrismas with F#](http://tomasp.net/blog/2014/composing-christmas/) - example of 3D graphics in F# using an OpenGL-based graphic library written in F#. More with this library: [Tomas Petricek - Domain Specific Languages, the functional way](https://vimeo.com/97315970), [Solving fun puzzles with F#](http://tomasp.net/blog/2014/puzzling-fsharp/index.html) 58 | 59 | ### Game Development 60 | 61 | ### VR / AR / MR 62 | 1. [Face-based Augmented Reality with F# and the iPhone X](http://www.knowing.net/index.php/2017/12/28/fun-ny-faces-face-based-augmented-reality-with-f-and-the-iphone-x/) 63 | 2. [The Solar System with ARKit and F#](https://devblogs.microsoft.com/xamarin/the-solar-system-with-arkit-and-f/) 64 | 65 | 66 | ### On Interop 67 | 1. [Accessing Linux C libraries with F# and .Net Core](http://hamstr.net/f%23/2016/12/16/Accessing-Linux-C-libraries-with-F-and-.Net-Core/) 68 | 69 | ### Graphics / Gamedev on the Web (Powered by Fable) 70 | 1. [Creating Visual Planetary Systems using Fable and F#](https://medium.com/@mukund.sharma92/creating-visual-planetary-systems-using-fable-and-f-de23415ca6f7) 71 | 2. [Three.js + F# + Fable = ❤](https://medium.com/@volhasamusik/three-js-f-fable-3a177085f34f) 72 | 3. [F#, Fable & ThreeJs: Hello Cube](http://www.progletariat.com/blog/2017/06-22-fable-threejs-hello/index.html) 73 | 74 | 75 | ## Presentations 76 | 1. [Solving 3D Problems With F#](https://docs.google.com/presentation/d/1gdxAvNUbKHEyQDLfhL4eu5eKyEBUynR0jkRlqWn3wHw/edit?usp=sharing) 77 | 78 | ## Books 79 | 1. [Friendly F#](http://www.amazon.com/Friendly-Fun-game-programming-Book-ebook/dp/B005HHYIWC) - Not totally about games but all examples are game-related. 80 | 2. [Beginning F# by Robert Pickering](https://www.amazon.com/Beginning-F-Experts-Voice-NET/dp/1430223898) - Examples in Chapter 12 are relevant to (3D) Graphics Programming. 81 | 82 | ## Papers 83 | 1. [Monadic Scripting in F# for Computer Games](http://www.dsi.unive.it/~orsini/documenti/MonadicScripting2.pdf) 84 | 85 | ## Commercial Games Made with F# 86 | 1. [Onikira: Demon Killer](http://www.digitalfurnacegames.com/) is a 2D side scrolling beat ‘em up set in a fantasy feudal Japan. It's on Steam Early Access, written in F#. 87 | 2. [Asteroid Sharpshooter](http://marketplace.xbox.com/en-US/Product/Asteroid-Sharpshooter/66acd000-77fe-1000-9115-d80258550797) published on Xbox Live Indie Games, written in F#. [Slides on the development process](https://docs.google.com/presentation/d/1teGhBf-m7qRkMzsbCKvRcIEo-QLwdK9w8VOEWqu1qWQ/edit#slide=id.p). His [blog](http://sharp-gamedev.blogspot.co.uk/2011/03/asteroid-sharpshooter-post-mortem.html) has more information on how he made [F# work with XNA on Xbox 360](http://sharp-gamedev.blogspot.co.uk/search/label/xna). 88 | 89 | 90 | Consider eventually consolidating with [Guide - Mobile App and Game Programming with F#](https://fsharp.org/guides/apps-and-games/) 91 | --------------------------------------------------------------------------------