• Stars
    star
    639
  • Rank 70,141 (Top 2 %)
  • Language
    C++
  • License
    Other
  • Created over 11 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Sample code for my YouTube series.

Math for Game Developers Sample Code

This is the source code for the sample code that I use in my Math for Game Developers YouTube series. If you want to follow along with the videos, you can download by clicking the 'ZIP' button in the header near the top of this page.

Overview

You'll find these directories:

game - This is where the main.cpp is, which is the primary bit of code that we'll be modifying.

math - This is where all of the math stuff that we'll be implementing lives.

content - When the game is run, it's run in this directory, even though there's no .exe in here. That means it looks for its textures, models, shaders, etc files here.

renderer - Shaders and rendering are carried out here. All OpenGL code is contained in these files. To render something, first create a rendering context:

CRenderingContext c(Application()->GetRenderer(), true):

If there's already a rendering context open then use that one, don't create two contexts in the same method.

Shaders are loaded from text files in the shaders directory in the SMAK distribution. The shader library will read every .txt file in this directory and compile it as a new shader. The .txt file specifies which file should be used as the vertex and fragment shaders, so files can be reused between shaders. It also specifies parameters which can be specified in the material .mat files. The files header.si and functions.si are imported for you at the beginning of every shader. Some attributes and uniforms are hard-coded. For vertex shaders:

  • uniform mat4x4 mProjection
  • uniform mat4x4 mView
  • uniform mat4x4 mGlobal

And for fragment shaders:

  • out vec4 vecOutputColor

vecOutputColor is the value to which the output value for a fragment shader should be assigned. The rest are up to you.

datamanager - Sometimes data needs to be serialized to and from the hard drive. data.h contains a CData class that is a generic data container, and dataserializer.h can serialize any CData to and from a stream. Data is stored in a simple format that looks like this:

key: value
{
	// Sub-datas
	key: value
	key2: value

	// Values are optional
	key3
	{
		subdata
	}
}

This format is used for things like shader .txt files.

include and lib - This code depends on some third party libraries, and they can be found here.

Compiling

This project has no dependencies and should compile out-of-the-box. If something doesn't work for you please let me know.

  1. Download and install Visual Studio 2010 Express.
  2. Download the MFGD project files and unpack them somewhere to your hard drive.
  3. Double click the MFGD.sln file. Visual Studio should appear.
  4. Press F7 to compile the game.
  5. Press F5 to run the game.

Want to send your game to a sexy friend? You'll need to do some extra steps.

  1. Go to the dropdown in Visual Studio that says "Debug" and set it to "Release" instead. It should be near the top of the screen.
  2. Press F7 to compile the game in "Release" mode.
  3. Find the file MFGD.exe (it's an "Application" file type) and copy it over to the "content" folder.
  4. Send this content folder to your sexy friend.

(The steps are the same for non-sexy friends.)

For Linux the steps are:

  1. Make sure you have GCC installed for your system.
  2. Download the MFGD project files and unpack them somewhere on your hard drive.
  3. Open a terminal and navigate to this directory, eg "cd ~/mfgd"
  4. Type "make"
  5. Type "./run_mfgd"

Tinker

This code is built on top of Tinker, Lunar Workshop's internal game engine. I ripped out a bunch of stuff so that it's much simpler. As MFGD progresses and new things are learned, I'll add those things back into the engine.

If you want the actual thing you can find it in the SMAK source code, it's much more fully featured. It has materials and a console and a GUI and lots of other neat stuff.

Licenses

Tinker is licensed under a permissive MIT-style license, meaning you may use it to build your own projects with no requirement to distribute the source code, but you must give credit to the original author somewhere in your program, like on the "About" or "Credits" page.

The full text of the license is included in the file LICENSE.Tinker and at the top of every source code file to which it applies.

More Repositories

1

JaiPrimer

A description of Jonathan Blow's programming language, Jai
1,801
star
2

docs.gl

OpenGL Reference Documentation
HTML
578
star
3

DoubleAction

A first-person multiplayer action game
C++
165
star
4

Viewback

A tool for remotely monitoring video game playtests.
C
50
star
5

SMAK

The Super Model Army Knife - 3D art tool - http://getsmak.net/
C++
27
star
6

Blender

Blender is a free open source 3D content creation suite.
C
21
star
7

vtb

Vino's Tool Box
C++
16
star
8

Digitanks

Lunar Workshop
C++
12
star
9

ftgl-gl3

A port of FTGL to OpenGL 3.0
C++
10
star
10

BlueOcean

Underwater physics, fluid simulation and caustics demonstration
C
8
star
11

CodenameInfinite

C++
8
star
12

OpenGL-3-4-Samples

Sample code for the OpenGL 3.0+ core profiles.
C
7
star
13

GamblersDice

A dice roller that respects the Gambler's Fallacy.
JavaScript
5
star
14

stb_image-and-stb_image_write

stb_image and stb_image_write
C++
4
star
15

Strunkifier

A web utility for finding commonly misused words in the English language.
PHP
4
star
16

LunarWorkshop

Lunar Workshop
C++
4
star
17

Scalar

Interactive mathematics education website
JavaScript
3
star
18

ViewbackMonitor

The monitor for Viewback.
C++
3
star
19

V

Partially implemented compiler and VM for a toy language that nobody should use.
C++
3
star
20

sRGB-Int

sRGB <-> Linear for floating point and integer types
C++
2
star
21

DAWebsite

Double Action: Website
PHP
1
star
22

SMAK-Website

The website for SMAK
PHP
1
star
23

dominoes

Proof that dominoes is an entirely stochastic game and all of the strategies that my Cuban family members swear on are losing strategies.
Python
1
star
24

sudoku-generator

Sudoku puzzle generator
Python
1
star
25

blog

I have a blog.
Python
1
star
26

tspp

TS Plus Plus, a metamod plugin for TS
C++
1
star