I'm a third year cs student wanting to start my own (small) 3d game project. The trouble is I can't pick out what engine to choose. I skipped out on my graphics paper so I don't know much about 3d mathematics. I know how to program in C, JAVA, perl, python and (sigh) ActionScript. Don't know much about C++ but have written a few classes in it.
What 3D engine do you recommend?
I have tried some one the clunker ones, such as ORGE and Irrlicht(sp). I managed to write my own program in C that makes basic polygons, but looking at the math required to make it into a 3d model just confused me.
tl;tr
Name:
Anonymous2007-05-21 6:17 ID:DPHgJePC
lol
c# sucks
and you are an idiot
Name:
Anonymous2007-05-21 7:04 ID:9wW95p3a
Irrlicht.
There aren't many choices as far as BSD/zlib 3D engines go, and if you go with an LGPL engine you're forced to comply with the "new version" clause, which is pretty risky because 3D libraries are something that can easily break or at least be inconsistent across versions. The only other copycenter engine I know of is Lightfeather, and last time I used it it had essentially no media import path so it's a nightmare to get even basic animation into it.
Irrlicht is pretty limited and not very fast, but unless you're planning on rewriting Far Cry or something, it's certainly good enough for anything a group of CS students could write (no offense). It cross-platforms amazingly well; if you use GCC and MingW, there is literally not a single line of code needed for compatibility, not even an #ifdef. It's also fairly well documented, and there's a surprisingly large community for the rather disappointed number of projects that use it. Maybe I'm biased because I have a certain familiarity with it, but I quite like it (even though I've had to dive in and modify the engine on several occasions to make it do what I wanted).
The only other LGPL engine I can think of off the top of my head (besides OGRE) is Crystal Space. Never used it.
Say, what's this OpenGL thing I keep hearing about?
Name:
Anonymous2007-05-21 8:27 ID:hMF89Mth
>>2
C# huh? >>3
Thanks, will give Irrlicht another shot. (I had trouble getting it to bind to c++. Thinking about finding another compiler).
I had a look at crystal space, its done in mostly c++. so want to avoid :P
Name:
Anonymous2007-05-21 8:33 ID:9wW95p3a
>>5 I had trouble getting it to bind to c++
What? The engine is WRITTEN in C++.
Get Code::Blocks with MinGW and compile the examples, and go from there. Avoid Visual Studio as much as possible.
Name:
Anonymous2007-05-21 9:04 ID:5cUiF+c3
>>3
I don't think LGPL will be an issue, except if you're trying to be dishonest.
Name:
Anonymous2007-05-21 9:51 ID:9wW95p3a
>>7
I don't think you understand the requirements of the LGPL.
6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
* a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
* b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
* c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
* d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
* e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
This means a) users are legally entitled to modify the 3D library at any time to do whatever they want (make walls transparent in FPS games, etc); b) users are legally entitled to reverse engineer and modify your project, and you're legally required to treat them the same as "official" users (e.g. you're legally required to let them play on your servers with hacked clients); and c) if you plan to keep your project closed source, you are legally required to make it work correctly with every new version of the engine released.
For something like a desktop graphical toolkit, the LGPL is great; people can't cheat at desktop computing, and toolkits are not prone to breakage in version updates.
For a 3D engine, it's a disaster waiting to happen.
Name:
Anonymous2007-05-21 12:24 ID:5cUiF+c3
users are legally entitled to modify the 3D library at any time to do whatever they want (make walls transparent in FPS games, etc)
Because they'll totally not do it if it's distributed as binary, or if it's illegal to reverse-engineer and modify.
users are legally entitled to reverse engineer and modify your project, and you're legally required to treat them the same as "official" users (e.g. you're legally required to let them play on your servers with hacked clients)
Ok, this is one possible interpretation (I think there's room for argument but I won't argue anything to it) and it's indeed a problem, but it's not like people don't do it in other online services anyways. Just make the game properly, server-sided, indestructible. The user may look like he's Chuck Norris from his side but if he attacks the server says "NOW YOU DEAL 1 DMG OK" and subs 5 from the other fag. If the service is properly designed, it can't be cheated.
if you plan to keep your project closed source, you are legally required to make it work correctly with every new version of the engine released
I don't see how you are compelled to do this, but if you are, well, don't use open source for closed source! That's kinda bad. Keep it open source. Open source doesn't mean the server is free or it's going to be hacked (in fact, it means you'll be able to find and fix your exploits much sooner). Or at least use the work privately and you'll be fine; GNU licenses are about distribution, you're actually free to do anything with the software.
Name:
Anonymous2007-05-21 13:02 ID:DPHgJePC
>>5
I'm sorry, i thought "cs" in your post was c#.
Name:
Anonymous2007-05-21 13:13 ID:K6Cnb5ah
>>1
You may want to start off with something easier in the language you are most comfortable with, like Python with its graphics library. Make a really simple game to get a feel for what game engines require, then move on to more complex stuff in C++.
Name:
Anonymous2007-05-21 13:28 ID:h3YPm8ty
>>11 STFU NOOB! YOU HAVE NO CLUE WTF YOU ARE SAYING! DIE! SCUM!
Actually, rendering a 3d model made of polygons isn't that hard with OpenGL. If your game doesn't need to look too next-gen just render the whole shit by going through the model data, which can just be an array of vertices or something more complex, calling glVertex (and glTexCoord) for each vertex. Once you get that working you could actually make it fast by using vertex buffer objects or at least display lists.
If you can get the above to work all you need to do to draw them where you like is to set the matrices correctly, and if the 3d math confuses you there's utility functions to help you with that.
Writing or googling a good parser for a 3d model format might take some time. There's also the issue of creating a decent data structure for your game's state, though a strong background in computer science might help with that.
>>9 Because they'll totally not do it if it's distributed as binary, or if it's illegal to reverse-engineer and modify.
Sure they'll do it anyway, but with an LGPL engine you're not allowed to stop them; anti-cheating measures such as Warden or PunkBuster are illegal with an LGPL engine, and you risk getting sued by the EFF if you try to implement measures that disable clients who use modified libraries.
don't use open source for closed source! That's kinda bad. Keep it open source.
Great, so your solution is a total non-solution after all. Have fun stopping cheating and piracy with a GPL game; I'm sure your users will appreciate it.
The GPL is great for non-competitive games, but the majority of games being played worldwide are extremely competitive in nature (Starcraft, Counter-Strike, World of Warcraft, etc.) You can't create a fair and balanced play environment if you allow people to program shit like aimbots into their clients.
>>11
For crying out loud, he's a third year CS major. I think he's a little bit beyond graphical Hello World in Python.
If he's going to be writing a small game and then starting over, he may as well start in C++. There's only one way to get experience in a new programming language: fucking use it.
Name:
Anonymous2007-05-22 9:36 ID:3+l5v5rk
GAME ENGINE
do
system_input=get_system_input()
select case system_input
case pause:pause()
case quit:return 0
end select
for x=1 to number_of_players
input_from_player(x)=get_player_input(x)
next
for x=1 to object_max
if object_active(x) then object_handler(object(x))
next
for x=1 to number_of_players
if player_active(x) then player_handler(x)
next
new_frame()
draw_background()
for x=1 to number_of_players
if player_active(x) then draw_player(x)
next
for x=1 to number_of_active_objects
if object_active(x) then draw_object(x)
next
display_frame()
loop
DONE
>>16
Will you shut the fuck up? The OP is not going to create an extremely popular and competitive online game in his spare time, if he was he wouldn't be asking this on fucking 4chan.
Also, there is no reason you can't write 'real software' in Python.
Bringing /prog/ back to its people
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy