Hi,
Please don't take this as a must have set of skills to start coding an audio
game, and the below is only for a full binaural 3D audio engine with complex
A.I routines and gaming industry standard patterns for controlling the whole
system.
The list of things to have in tow is relatively large but in mathematics here
is what is regular occurence so far:
1-linear algebra: know your vectors, matrices and euler angles, trigonometry,
dot and cross products, and the transformations, rotations and scaling of all.
If you want to be more efficient, know the inverses of matrices, their eigan
values and vectors, co-variance matrices. These are all used for moving your
things around the world and A.I routines as well as encoding for networking.
2-boolean algebra: Beyond the single true false logic, know your discreet
propositional maths, rules and laws like deMorgan's, conjunctive and
disjunctive, commutative, associative etc. They are useful for structuring your
system properly to guarantee the outcome you are looking for no matter the
arbitrary value input into a simulation.
3-Modular arithmetic: these are useful tools for encoding your system logic
into nicely isolated sets for turn based logic. The rules that come with
modular arithmetic gives you better code than long lists of if else or switch
statements which a lot of coders unfortunately use.
4-Statistics: most stats based computations are used for A.I routines, when you
start using rule systems over larger sets of objects, such as divising a normal
distribution and using randomisers that fall within a standard deviation when
you apply these rules to a simulation.
5-Graph theory: especially in a 3D audio game, this is very recurrent, so
knowing the relations between graph types, vertices or nodes and edges and how
they all interract will be essential to quote visualise your system or world so
you won't get lost. The audio part will also heavily use graphs for connections
between input through nodes through filters and finally through the main output.
This is pretty much all you will encounter during the process of making a 3D
audio game. However, there are a few concepts as listed below that you will
need to know:
1-MVC pattern: Model View Controller pattern is very useful to mutually exclude
parts of your application, from the data you use and transform throughout the
game, to the way it interacts, finally going to the view or interface which the
user will interact with.
2-Entity Component System: This is the standard used by indie and large game
companies for their games. It allows an easy separation of large sets of models
without sub classing them and creating dependencies which will make your code
inefficient. This pattern uses components that can be readily attached and
detached from entities so that classes can be associated a combination of
features which are inherent to all entities or unique to itself in a dynamic
fashion. This system is not only limited to games, and it guarantees a set of
outcomes if you structure your system, allowing for efficient parallelism and
asynchronous computations as well as low cache misses. I especially recommend
the martin ECS which is the most optimised albeit most complex system to
implement.
3-Fly factory pattern: This design pattern allows you to be efficient with
caches, basically loading a set of assets once and assigning only references or
pointers to loaded data instead of loading multiple instances of an object. The
referencing requires more complexity in the code but the end result is having
much leaner memory allocation, allowing you to pack in way more objects in your
scenes without suffering lower framerates.
This is what I have encountered so far omitting details.
On 1/04/2016, at 2:28 AM, Sharon Hooley <shooley42@xxxxxxxxx> wrote:
Hi,
How much knowledge of mathematics would I need to become a programmer of
software that doesn't really use it beyond the basic four operations,
addition, subtraction, etc? For example, I'd like to be able to create
interactive communication software and/or audio games.
Thanks,
Sharon H.** To leave the list, click on the immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=unsubscribe]
** If this link doesn't work then send a message to:
** program-l-request@xxxxxxxxxxxxx
** and in the Subject line type
** unsubscribe
** For other list commands such as vacation mode, click on the
** immediately-following link:-
** [mailto:program-l-request@xxxxxxxxxxxxx?subject=faq]
** or send a message, to
** program-l-request@xxxxxxxxxxxxx with the Subject:- faq
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail