• Advertisement

Anyone here a self-taught graphics programmer?

Recommended Posts

Wow this is a cool topic!  I joined up just to post this.


I learned graphics programming when I was in 10th grade or so.  mostly because it seemed like everyone on IRC was programming games back then.  So I started off with some OpenGL tutorials.. which led me to look into the OpenGL redbook, Windows API, X11 Libraries, etc.  Sooner or later I was going through the Doom and Quake source code trying to understand everything line by line.  After enough of that, it just started to click, and I put together a homegrown physics engine, rendering engine, and some basic multiplayer code.  Resulted in some "tech demo"-like games back then.  When I hit college, I went a completely different (and non-technical) route, only doing non-game programming on weekends as a hobby.


Then after about a decade, I began picking it all back up again... but the landscape is completely different now from back then.  People are using C++ instead of C, forward rendering is out, immediate rendering is out, fixed function pipeline is out, so I had to relearn most of the stuff from scratch, again.  On top of that, there are new priorities now: multicore, async, mobile, crossplatform.  The only thing that has seemingly stayed the same for the most part was Win32 API (and even now, that seems like it's on its way out with Win9).


The beautiful thing about learning game programming these days is that resources are everywhere, from beginner to expert level, the modern internet has it all.


Now here's a bit of unconventional advice, but also the best advice I can give.  To get good at graphics programming quickly, really throw yourself into the deep end; and the deepest information comes from looking at high-quality (professional and production-level) source code.  So once you have your basic syntax principles down, just choose a good graphics library, choose an interesting section, and go through it line-by-line until you understand _everything_ about it.  Then repeat.  This approach is probably the most grueling, but it'll get you there the fastest.  If you can't do that, the second fastest way is literally reading and memorizing documentation.


Like I said, it's unconventional wisdom, but it has worked really well for me and for everyone I know who has tried it.  I only have a limited amount of time to work on this sort of thing, but I feel my grasp of these technologies is pretty deep.  If those approaches don't work for you, then you'll have to settle for the conventional approaches: trying to code a bunch of projects, and (the slowest) reading and learning from tutorials.  These last two approaches are probably the easiest to do as a beginner, but learning that way is generally really slow (there's a lot of boilerplate and overhead to learning those ways).


Oh and to answer your question: I do it (mostly) as a hobby.  I'm working on a game engine built from the ground up with high-level bindings for easy prototyping and high mod-ability.. and also I'm incorporating a bunch of neat "cutting edge" tech from articles and papers I found interesting.

Edited by Polarist

Share this post

Link to post
Share on other sites

although i have formal training (software engineering, OSU), almost everything i learned about game graphics i learned on my own. I stared a long time ago, 1988. no directx, no 3d vidcards. mode 13 was the hot ticket back then. it was all about party on the bitmap. everything home rolled. early skills invoved learing to blit, bressingham's line drawing algo, etc. skills were picked up online, usually from compuserv's gamedev forum. and from the bible: foley and van damm. if you got into 3d you became intimate with names like neumann, sproull, foley, van damm, and sutherland. Then came directx, 3d vidcards, and everybody and their brother thinking they know how to build games and writing a book on how to do it. the books are a good way to get up to speed quickly, but all it is someone explaining the poor docs to you.. and although the docs suck, there's no substitute for understanding directx, or open GL as the case may be. evrey time i restart my game company i always do the same 4 test programs: console app hello world, fullscreen d3d hello world, draw a triangle, and turn everything on (aniso, mips, lighting, etc). usually takes about a week or tow to get it working, depending on the available references on hand. the first time it took a month or two. nowadays, i use the directx docs, and online forums. I have over 50 gamedev books in my library but never use any of them. about the only books i wish i still had were my calculus book (for rotation about an axis formulas), and my physics book (for stuff like impulse and momentum formulas). and that info can also be found online.


yes i do this for a living. I'm probably the last of the lone wolf developers.


Norm Barrows

Rockland Software Productions - Building PC games since 1988

Share this post

Link to post
Share on other sites

I started graphics dev towards the end of 1983.  My Acorn Electron tapes had all stretched out from overuse, so all my games were broken.  This encouraged me to read the basic and system programming manuals (at that age, I didn't really comprehend that writing software was different to playing a game -- I thought that everything done on a PC was a game :-) ).   I wrote a few half baked games (the first one was a lunar lander type - partly pulled out of code samples written for the BBC Micro), and then a few ground up little games.


I got my first x86 PC in 1986 (4.77mhz FTW and a Hercules card, no HDD), and started with GW Basic, and then later on Pascal, C and Assembler.  At some point in the late 80's to early 90's, I had an epiphany:  I don't really like making games at all, I just like to play them -- what I really enjoyed was making cool graphics via code (for games or otherwise).  Through a bunch of BBS's and friend's sharing coding "secrets", I got involved in the Demo Scene in the early 90's, which fitted my interests perfectly.  I wrote some software 3D renderers (386 DX no-FPU era), a bunch of old Mode X type special effects, etc.  I remember those days fondly: every year from 1986-2000, I would see a new effect, or feature that I had never seen before, or even imagined possible (my imagination was possibly, a bit limited :-) ).


Then I did a degree in Math and CS, which was pretty cool, because it helped a lot of the math I was doing fall into place.  Then I did a PhD in CS (graphics/computational geometry), and worked in visualization and VR for a few years, and then I spent the better part of a decade at NVIDA.


Now I work for a hedge fund.  Go figure. :-)

Share this post

Link to post
Share on other sites

i truly started graphics programming at 15 or 16, when i was doing homebrew for the psp, and learned the gu, thus began my journey on learning how to program a graphical game(although it was still pretty heavy fixed pipeline, so i knew nothing of shaders).  than i used xna with the 360 for a bit, learned a bit about shaders, but it didn't click for awhile on what i was truly doing.  then i decided to work with openGL and learned shaders far more in-depth.  i don't feel anywhere near finished, i've seen tons of people producing far better than I.  but i have learned plenty enough that i can get something up and running in openGL fairly quickly.

hah, thats hilarious, I started my programming journey on the psp as well, though at first i didnt use the modified gl library up front, instead using wrapper libs like OSLib to make small games, But then i moved to the pc and started making more complex games, eventually learning shaders and picking up linear algebra when I could

Share this post

Link to post
Share on other sites

yep totally self taught, i got bullied in highschool - never got the prerequisites for college so i was just stuck on my own, im pretty far now :) you might know me from devmaster, im one of the locals over there.

Share this post

Link to post
Share on other sites

I'm kindof a combination of both.  I did a bunch of 2D stuff with OpenGL when I first started, just drawing fancy 2D graphics with hardware acceleration.


Then I took graphics class at my college and was no longer afraid of 3D.  A lot of what I know is a combination of being self taught and learned in school, but mostly self taught. I'd read tutorials all the time, ask Questions here, and use Google a LOT.


I also look at designs of other engines like Ogre3D, Quake 3, Doom 3, Unreal for ideas and how artists usually do things.

Share this post

Link to post
Share on other sites

I started with Python when I was 7 years old, with some general effect writing for blender game engine. I never really took it seriously until I was about 12, and wrote my first game. It was a small marble game, that I recently ported over to Windows phone (Did the port about 3 years ago)


Currently, I don't program as much as I used to, as my time is consumed by writing science papers on the methods I develop. I do miss writing engines though.


I still have the website up for my old engine (The project is long dead)


Share this post

Link to post
Share on other sites

I'm a kinda.

I went to Full Sail University not knowing *anything* about programming. They taught me the fundamentals of programming, but it wasn't a very deep education. (Full Sail teaches a subject a month, ie: I have one month's training in linear algebra, one month's training in calculus, etc).

After I graduated, I found nothing for eight months, and I had to start working at a local pizza restaurant. It was then that I started learning graphics programming as a specialization. I found an online tutorial for deferred rendering, and just ran with it. I eventually got an XNA app running with a full deferred pipeline, post-processing, and shadows.

I spent the better part of a year on this website trying to get help to get things working and how to work out the minutia, (big thanks to L. Spiro, MJP, and Hodgman), and now I've written graphics code on Wii, PS3, Xbox 360, Wii-U, Windows 8, Windows Phone, you name it.  I will have had a job in the industry for two years in March :)

Share this post

Link to post
Share on other sites

L Spiro's got my same timeline: started when I was 14 back in high school, and learned C++ and then jumped into DirectX within a few months without a firm understanding of pointers. I started with Ivor Horton's C++ book, Programming Role Playing Games with DirectX by Jim Adams (he lives in Vegas, where I'm from), and C++ for Dummies. That year, my 9th grade final project in HTML1 was a small town "MMO" lol... Two people connected into the same world on our classroom's network, and we were able to walk around and attack each other.


10th Grade - I started to get into PSP hacking a little more and wrote some code, but didn't get too far into it. I was still working with DirectX and just starting to get exposed with Linux. I played Final Fantasy VII for the first time, and rebuilt a 3D battle engine based off of it as my HTML Web Design 2 class' final project in DirectX. My teacher was cool like that haha. I also had a really basic StarFox-like tech demo that was really basic.


11th Grade - I got into PSP homebrew programming, and became a forums junkie at psp-programming.com. THIS is where I learned most of the details on how the code works with the hardware. I learned that the GU (similar to OpenGL, but it's the PSP's graphics library) actually works on the GPU. I built an X-file model loader and released it, and became the top poster for a bit on those forums by asking questions lol. There were some robotics engineers and computer science majors going to school in Europe who were really helpful, and I actually saw Slicer4Ever from above post sometimes on there and QJ. I met a lot of people through from psp-programming, and even made friends in real-life with a few when they came out to visit some clubs in Vegas.


When I got out of high school, I released my first game: an iOS App on the iTunes App Store. Since then, I've been researching engine development, and my OpenGL skills are really coming along! I've switched over to desktop OpenGL recently, but I try to make my code compatible with iOS, Linux, Mac, and Windows.


I've read books, but mainly articles and forums online is where I get my info. Finding whitepapers, checking out math websites like wolfram, whenever I'm stuck understanding higher-level math notations have really helped. Gamasutra and GameDev.Net have some really awesome articles, tutorials, and forums that answer questions. saving us all one more question from me.


I'd like to give back by releasing code, writing some articles, and posting video tutorials on YouTube eventually, and writing articles on my website, but I'm not sure if I'll be teaching people how to do things "the right way". To be honest, I don't think there's a wrong way to do something if it works --only better ways that offer more flexibility, functionality, and efficiency.

Share this post

Link to post
Share on other sites



I'm pooh I toppest 3D engine programer world ( I think there is about 50-100 people is toppest - I'm one of them)



I start graphics programming when I was 12. I start with bulshit turtle graphics. I really hate the arthur. and keep going on.


at 1996 there is no education about 3D graphics in here .


I research all about siggraph  and graphics paper. It's so suck I'm Korean and My major was philosphy so I serious trouble reading engineering paper. ( I mean my earlier times - not now. I just more care about new hardware trand or visual art - technical stuff is nothing serious to me)


but I'm the first generation and there was no one know about 3D stuff well . I can keep join toppest group in Korea and still now on.


In Korea until now there is no good computer graphic school. I work for 16 years for this area., and I think US and other place will be same. I doubt there is high and very detail education about 3D theory and hardware education.


So cheer up if you are not teached well. don afraid of it.


Technic come from experience and by hand like old stuff - like smith.


I don't read about this thread and I don't care about "why are you the toppest kind of question - I just know by my experience-" so If you have any question or something send me a message and plz send me constructive one only.


I will be honest and truefully help you.

Edited by GeniusPooh

Share this post

Link to post
Share on other sites


I have not studied computer or graphics ACADEMICALLY .

I have studied Physics !!!

Now I work as a C++ programmer .

I love DirectX and C++ .

No one can take what you love from you.

If you love something , just dive in it.


Ask God whatever you want and just try !!!

Share this post

Link to post
Share on other sites

Hey there are some really captivating stories there.

richardjdare : yours was kind of sad :'(

Schrompf : yours was a bit bitter

and the best hacker medal : DracoLacertae


My turn then, I'm self taught at first then Academy taught. And both worlds completed each other very good.

At around 13 I started with QBasic but it took me 1 year to be good enough at imperative algorithmic to start to make a game, a copy of mario basically:


I had a mentor at the time, same age, but like two years ahead in terms of comprehension and he had a knack to really read books which I hadn't.

Then I went to Visual Basic 6, following the tracks of my mentor.

(by the way, who is this man : http://www.irisa.fr/alf/index.php?option=com_content&view=article&id=94&Itemid=15)

I made several little games, like a worms game and a live-chat html formatting for messages in AOL chatrooms.

I also did a serious worm game on Ti-89 calculator but the basic integrated language was too slow. Also I had to print the whole code out because the screen was too small and my code was all in a huge functions with lots of goto.

So I went over to C to harvest performance on that machine, gcc is my first C teacher, I did another horribly coded game but perfectly functional called "envahisseurs de l'espace" (space invaders).

Directly after that, I moved on back to PC and with an illegal copy of Visual Studio 6 I started my biggest indie project until now : Projet SERHuM. I planned on taking 5 years, but 5 years later I was only at like 10% of the whole dev so I gave up.

In the meantime I had joined the "classe préparatoire" which is a special elitist course to prepare for french engineering shcools.

So basically, I ended up with the 40 heads of classes of the town's high schools, doing math (12hrs/week courses), physics (11h/w), electronic (5h) and mechanic (5h) + 4hrs of severely graded weekly tests, during two years. And I don't mention the almost equivalent time that you are expected to work at home.

During this perdiod, the teachers shout at us, tell us that we are so hopeless, and yet in the same time can't stop to brag about that course path being the golden one, and that all the most important person of the country took it. (which is 70% true)

Then I passed the exams for the two majors lists of "Grandes Ecoles" (engineering schools) of the country, and some other private ones. I got accepted to the private stuff but the quality of the teaching was not as good as my first public school choice, the ENSEIRB. So I went there for 3 years and could never have been happier. We were taught true computer science from the Unix perspective all along. The school was associated with the Bordeaux 1 University laboratory (the Labri) which is the place where Shlick published his PhD. (for the one who has already seen his name doing fresnel reflections in shaders for example.)

Parallel to the engineering school I took some supplementary lessons from the University to complete a Master degree (which is looked down by engineers generally because the engineer diploma is superior).

This allowed me to study multimedia from the academic point of view, so I learned the canonical way, colors spaces, from fourier and laplace transforms to C.e.l.p. coders, by image treatment operators, as well as classic literature of image rendering theory : the rendering equation and stuff.

I also had to review Antoine Bouthors papers about cloud rendering http://www-evasion.imag.fr/Membres/Antoine.Bouthors/ during my master, in the meantime as doing some other school projects like a compiler with flex and yacc, or distributed compilation system to learn networks, or doing proper third normal form databases, or assistant researcher-related-work to make graphics visualizers for a task scheduling set of libraries/algorithms that the Labri is working on. (http://runtime.bordeaux.inria.fr/Runtime/)


After that I went to Japan to do some research on Supercomputers, then back to France I worked 4 years at e-on software, which is my greatest skill leap after my internship at Etranges Libellules. E-on software has many people graduated from the best schools of the country : Centrale and Polytechnique, and even if I had some practical C++ tricks to teach, I had many work practice to learn and stuff about 3D rendering. This gave me the chance to attend the siggraph with a full conference pass and exibitor as well since we are showing Vue and LumenRT at our booth.

I could implement crazy stuff while there like message based OpenGL engine, water rendering, caustics, tree rendering, clouds rendering and even real time indirect lighting...


But I decided it was the time to go back to Japan and now, believe it or not, I work at the desk just beside L.Spiro at tri-Ace, and I do tooling for artists and designers.


As an indie, I presented on gamedev my 2D car game before : http://www.gamedev.net/topic/564828-extreme-carnage---shoot-cars-buy-weapons-plant-defense-turrets/

I also did nuclear age on the same engine : http://forum.games-creators.org/showthread.php?t=7837

and extracted the engine into : http://sourceforge.net/projects/carnage-engine/


and many other little stuffs.


What I learned about self teaching, is that there is a severe limit. Isolation and self learning can get you somewhere, but when you are surrounded by super amazingly intelligent people then suddenly you realize that there is a "next level" and you thrive to go play in that same playground. Basically, you're pulled forward by the "masters" of the field. Then it becomes all so thrilling. You understand more and more with the years of experience, the research papers read, re-read, re-re-read...

You realize that the world is very small, and you are generally not one person away from knowing e.g. the CEO of nVidia, Carmack, Torvalds, the demo groups like Farbraush or in my case the guys of narbacular drops (portal, portal 2..), Cyril Crassin or Eric Bruneton. Yeah even you jcabeleira, we know each other through one person who is one of my colleagues right now.


To all the community, I say : you all rocks, let us all make great games !

Share this post

Link to post
Share on other sites

Self taught grahpics programmer here.  I learn mostly from books, whitepapers, and additional help from internet forums  (such as this website, and StackOverflow's gamedev section) when I have trouble finding the answers on my own.  There is more than enough material out there to learn.  I find the best way for me to learn is to pick small projects and try to accomplish them, then work your way up to bigger projects.  A good exercise to get started is to create a mini graphics engine (just the very basics, simple abstraction of shader programs, vertex buffers, textures, and the graphics context).  Then you can use this engine to power your testing and development.


Best of luck.

Edited by metsfan

Share this post

Link to post
Share on other sites

I'm self taught, but I'm not much of a graphics programmer, though I'd like to be, graphics programming since I first delved into writing my first Deferred renderer I've been fascinated with, to me graphics programming the space where imagination and logic can make magic happen.
I picked up graphics programming when I wanted to understand how the drawing worked in XNA, I had an obsession at the time to not use anything I could not understand, in terms of material I literally jumped into google "XNA drawing 3D models" which eventually turned into "3D lighting techniques" into "deferred renderer" so on and so forth, each search threw me a bone to the next and before I knew it days had passed where I'd done nothing but research.
I've faces a bunch of problems but every single one of them has been a case of me either being lazy or fudging a value or syntax up, as wonderful as graphics programming is it can be a pain to debug, especially when the problem is 1 little variable.

all of this and I'm still not all that good, I understand a bunch of concepts and I can make my way around a bunch of problems given a basic concept. But I'm not good enough to consider myself a graphics programmer just yet, theres always more stuff to learn and until I'm contributing to what there is to learn I'll just consider myself a curious person.

Share this post

Link to post
Share on other sites

When I as 13 I enjoyed BBC Basic and 6502 Assembly

By 16 I lost interest in video games

I had short Wipeout phase and a Doom phase


When I was 35 I discovered GTA San Andreas

I was between jobs / countries so I played this game in my friend's flat for 8 hours a day

when my friend came back from work we went out on the town

good times


That got me interested in 3D for the first time


I ended up in a small village in the UK with nothing but an old laptop

And after writing Space Invaders, Pac Man, Asteroids etc. I figured out on a piece of paper

how perspective works and wrote my first 3D "engine" in VB6 that could render lines with perspective


Later I discovered opengl.dll and my first fixed function triangle appeared on screen


I realised there was something "wrong" with Matrix math related to rotations, but with no

real maths education I didn't know how to express it ... all the oranges in the house ended up

with arrows scrawled in black marker ... it was 3 years until I discovered Quaternions, how I love them!


I learnt DirectX properly by creating an industrial application using CSharp + Managed DirectX running on Windows Embedded

it was a mission critical 247 application ... so I had no choice but to get it right ...

That has run on PCs without a reboot now for 4 years ... must have the memory leaks under control.


When XNA came out I got heavily into 3D and entered a game into Dream Build Play

but I fell in love with HLSL and Graphics programming and I have filled up my brain up reading everything I can.


What I love the most is thinking in 3D and trying to find solutions to hard but interesting problems without researching

and then comparing my "invention" to what everyone else is doing ...


Make a living in industrial software and working on a game which I will self-publish and promote

Share this post

Link to post
Share on other sites

The feeling when confusion turns to clarity is addictive

Crafting a complex "machine" that works

to me it feels like I am building a locomotive - so many wheels and levers and cogs turning at high speed

And the rush when you overcome the multiple layers of bugs and bugs in debuggers and design flaws and flawed documentation and get it to work anyway

Software development feels like xmas morning every day


Couldn't express more precise. Thank you =)

Share this post

Link to post
Share on other sites

I have to say that former education in my case played very little.

I am regularly ( sp ?? ) ignored by companies even if i have a degree in engeneering electrhonics and have been coding program for 20+ years.

The shift in the industry is totally Unity driven, i'd say that someone with a fair amount of Unity and c# experience might get a better job than someone with a degree , i regreted wasting time and money on my education, sad but true.

*End of the rant*

My story began with c64 , assembler and basic , then pascal , c/c++ , java , c#, i started coding software renderes at around 20 , and i got my first textured polygon few months after i started seriously into 3d math and algorithm, i switched a lot of computers , from c64 , amiga , 486 , pentium(s). Then i stalled with the 3d boards for a while, after a couple of years ai bought a new pc with an nvidia and started coding with opengl, basically until now, i have written various engines in this timeframe.

My opinion on this topic is that university education is that it was usefull for understanding math and physics , but for coding , the most important thing is to write software , no way , formal education can give help in case of data structure, but you can learn a lot from books around the internet ase well.


In the future , formal education will be less and less important to accomplish the job, take into consideration that for a Unity developer advanced math or physics are nto required, and the industry is rapidly adopting this engine as a standard.

Edited by TheItalianJob71

Share this post

Link to post
Share on other sites

I started off with self-teaching, but it's a very limited environment and relies heavily on putting trust in other people whose credibility is up for debate.  Books, talks, lectures, and interviews from reputed professionals (Google Talks, Bjarne Stroustrup, Herb Sutter, etc.) were the most helpful.  Online tutorials and developer blogs were often sketchy, taught deprecated or outright incorrect material, and left out important details.  Self-teaching also makes it harder to gain team experience or learn to debug someone else's code or figure out what's actually done in the industry.  Eventually I went to university for game development, and it taught me me far more than I could have picked up on my own, and corrected the flaws in half of what I had learned.  Also, I wanted to do graphics programming for a living and couldn't find an employer who didn't throw out resumes that lacked a proper education, so there's that.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement