Anyone Wants to be involved in making a 3D Game Engine?
by Saurav Mohapatra · in Jobs · 02/23/2003 (6:39 pm) · 7 replies
This post is for anyone who would like to participate in the design and implementation of a C++ based 3D Game Engine using OpenGL. I have started this project at sourceforge to understand what it takes to write a 3D Engine...and imeplement some cool ideas I have (or die trying :P ). Basically it's intended to be a learning experience...
Project Details can be found at YAHGE project site on sourceforge.
BTW,
YAHGE = (Y)et (A)nother (H)omemade (G)ame (E)ngine
:P
Looking for people with experience with C/C++ programming (minimal exposure to 3D Graphix/OpenGL).
if you are interested contact me at mohaps@users.sf.net
NOTE: The WebSite is under construction and hence most links do not work.
Project Details can be found at YAHGE project site on sourceforge.
BTW,
YAHGE = (Y)et (A)nother (H)omemade (G)ame (E)ngine
:P
Looking for people with experience with C/C++ programming (minimal exposure to 3D Graphix/OpenGL).
if you are interested contact me at mohaps@users.sf.net
NOTE: The WebSite is under construction and hence most links do not work.
About the author
#2
Thanks for the pointer....btw...that is the very reason for the project....lol... to see if it is as hard/easy as they say...
seriously..i think that's true of any project.... and that is where good design comes in handy.... cntract by interface and modularity/inversion of control.... i have had some experience in professional..backend component developemnt using C/C++...so i believe i can design the stuff so that..if i feel i have to do XXXX differently..i just pop in a XXXXX.dll and rest of the stuff should run okay...
but then.... i do see pink elephants..once i am drunk... lol
02/23/2003 (8:00 pm)
hi Pat,Thanks for the pointer....btw...that is the very reason for the project....lol... to see if it is as hard/easy as they say...
seriously..i think that's true of any project.... and that is where good design comes in handy.... cntract by interface and modularity/inversion of control.... i have had some experience in professional..backend component developemnt using C/C++...so i believe i can design the stuff so that..if i feel i have to do XXXX differently..i just pop in a XXXXX.dll and rest of the stuff should run okay...
but then.... i do see pink elephants..once i am drunk... lol
#3
All in all, it is a fantastic learning tool, and I highly, highly encourage it, I will help if I can as will people much more skilled than I am who post here. If you are looking for references, check out 'Real Time Rendering' by Hanes and Molier (sp?) the second edition is out (grr) so make sure to get that if you pick it up. A lot of the "Build your own game using OpenGL and fingernail clippings" books are not...how shall I say, entirely useful. Here is the basic layout of a 3d graphics book:
* Vectors and a smattering of 3d mathmatics
* Matricies and Transformations (read this one many times, then keep it bookmarked)
* Projections
* Quaternions are so cool but nobody really knows why they work, here's how to use them.
* Lighting
* Texturing
There are some points I am going over, of course, but you get the idea. Transformations will give you headaches like you cannot believe. I think the best approach is to get stuff working as fast as possible, and don't be afraid to re-write huge chunks. (That's how I did it anyway, can't say it's the best way.) If you can do this stuff from the get-go, here are some things to keep in mind:
1. Use vertex buffers (Or pave the way to your own DOOOOOOOOOOOOOOM)
2. Use triangle strips, not lists, not fans, strips.
3. Never, never do something like '#define alloc TSShape::alloc', because you are too lazy to cut-and-paste those extra 9 characters.
4. Use namespaces (or perhaps I should say that you should be 'using namespaces;' haha ha ha...*cough* ok lame)
5. If you get frusturated, go Ice Skating. It's what I did. It worked well. I learned how to stop that year.
02/23/2003 (10:10 pm)
One thing you will find with OpenGL is that there are about 5 ways to do everything. Only one of those ways is actually any good at all. This is a very irritating element of GL. Immediate mode rendering...glBegin( GL_QUADS ); glVertex3f(...); glVertex3f(...); glVertex3f(...); glVertex3f(...); glEnd()...is really great because you can see stuff right away. The first 'engine' (oh man was it a piece of work...) I made was written in GL and for the first revision it used immediate mode for everything. It loaded in shapes from 3ds Max exported in a text file format of a vertex list. It was a performance hog, a memory-disaster but DAMN when I finally got lighting working, and textures working at 5am that one night...I really pissed my roommate off celibrating my victory.
All in all, it is a fantastic learning tool, and I highly, highly encourage it, I will help if I can as will people much more skilled than I am who post here. If you are looking for references, check out 'Real Time Rendering' by Hanes and Molier (sp?) the second edition is out (grr) so make sure to get that if you pick it up. A lot of the "Build your own game using OpenGL and fingernail clippings" books are not...how shall I say, entirely useful. Here is the basic layout of a 3d graphics book:
* Vectors and a smattering of 3d mathmatics
* Matricies and Transformations (read this one many times, then keep it bookmarked)
* Projections
* Quaternions are so cool but nobody really knows why they work, here's how to use them.
* Lighting
* Texturing
There are some points I am going over, of course, but you get the idea. Transformations will give you headaches like you cannot believe. I think the best approach is to get stuff working as fast as possible, and don't be afraid to re-write huge chunks. (That's how I did it anyway, can't say it's the best way.) If you can do this stuff from the get-go, here are some things to keep in mind:
1. Use vertex buffers (Or pave the way to your own DOOOOOOOOOOOOOOM)
2. Use triangle strips, not lists, not fans, strips.
3. Never, never do something like '#define alloc TSShape::alloc', because you are too lazy to cut-and-paste those extra 9 characters.
4. Use namespaces (or perhaps I should say that you should be 'using namespaces;' haha ha ha...*cough* ok lame)
5. If you get frusturated, go Ice Skating. It's what I did. It worked well. I learned how to stop that year.
#4
thanks for the pointers.... i can appreciate a lot of those points..because ..i implemented my first lameass engine...about a monthback..using opengl....(immediate mode rendering ..ahem)
about the vertex buffers....well i did write a quake 3 bsp viewer .... (hee hee now i know that quake coord system has z coord pointing straight up...lol) and a md2 viewer using my "engine" code.... but it turned out to be too ungainly...because of the following reasons...
a) teh code base was never designed for reusability...rather a ptachof code from here and there...
b) no consistent templates or patterns...basically from reading too many tutorials...lol
what I want to d with YAHGE is utlise a few DO's and DO NOT's lists made by a lot of people..liek you..who have implemented 3D Engines....to see if it is possible to write a good 3d FPS engine with network support...
keep the feedback coming...
thx
saurav
02/23/2003 (10:25 pm)
hi pat,thanks for the pointers.... i can appreciate a lot of those points..because ..i implemented my first lameass engine...about a monthback..using opengl....(immediate mode rendering ..ahem)
about the vertex buffers....well i did write a quake 3 bsp viewer .... (hee hee now i know that quake coord system has z coord pointing straight up...lol) and a md2 viewer using my "engine" code.... but it turned out to be too ungainly...because of the following reasons...
a) teh code base was never designed for reusability...rather a ptachof code from here and there...
b) no consistent templates or patterns...basically from reading too many tutorials...lol
what I want to d with YAHGE is utlise a few DO's and DO NOT's lists made by a lot of people..liek you..who have implemented 3D Engines....to see if it is possible to write a good 3d FPS engine with network support...
keep the feedback coming...
thx
saurav
#5
09/29/2003 (9:23 am)
But then again... Most of the coding in a 3D-engine is not rendering...
#6
An yeah, I agree with Erik, about most of the coding not being the rendering
09/29/2003 (1:25 pm)
For an even more valuable learning experience you might want to consider developing an engine that is not exclusively tied to a specific 3d API like DirectX or OpenGL, by writing an abstraction layer for the rendering functionality. It is more of a challenge, but also more fun... Also, I've found that it helps in creating the engine in a more modular way.An yeah, I agree with Erik, about most of the coding not being the rendering
#7
09/29/2003 (1:30 pm)
By the way... i stopped working on the YAHGE engine.... basically got as far as rendering a quake 3 map... and md3 models...did some initial AI work... i donated the code to the people who are continuing the project... and am now concentrating on my game...
Torque 3D Owner Pat Wilson