Java 3D game programming - java

Hi! For the last 3 months I managed to get a grasp of JSE (I have never done programming before, I only have a background of HTML/CSS and some jQuery but very little).
For my final exam this year I am going to have to create a project and I've decided on a strategy game. My professor recommended me to make it 3D on the OpenGL platform (the game is going to be based on RISK - most of you may have heard of this type of game as it used to be very popular). I have no idea where to start or what resources should I read not even for an 2D game not to mention a 3D one.
Can you guys post some resources with what steps I should I follow for creating a game in Java, books or any other advice that could help? Thank you.

The main OpenGL library for Java is:
JOGL
If you go in at the OpenGL level, as suggested by others, you will have to learn a lot about low level 3D concepts. Whilst this may not be a bad thing (a deep understanding of a topic is always beneficial) it may hinder progress and you have limited time.
The one advantage to OpenGL is that there is a lot more general information, especially tutorials (Google It!), available online.
For general OpenGL tutorials, the Nehe tutorials are a classic resource and contain source code in Java as well as a plethora of other languages.
Tutorials 1-5
Nehe tutorials index (linked on the right)
Alternatives to JOGL
I would recommend using one of the more prominent Java 3D engines that do a lot of the graphical leg work for you and will allow you to focus more on the game construction and less on overcoming basic obstacles like loading model formats, writing your own scene management code etc.
These are the good 3D engines that I know of:
LWJGL - Lightweight Java Game Library (documentation)
JMonkeyEngine (documentation, tutorials for beginners)
Ardor3D (documentation)
The documentation for JMonkeyEngine is much more suitable and contains many more tutorials, so I would start there. LWJGL is similarly well documented, but is also fairly low level and, in this way, similar to JOGL. Ardor3D could be a better alternative for those more comfortable with 3D programming in general.
Java Game Development Community
Whichever technology you chose, I suggest getting involved with the Java game development community as there's lots of example projects and people experienced with programming 3D games. The best place I know of is:
Java-Gaming.org

Related

How to use LibGDX?

I am just getting started with coding and app development using LibGDX and i´ve got some general and some more specific questions about it.
Before I start: I know that some of my questions might have already been asked somewhere on the internet but I found it really hard to get a straight answer to them.
So, the most basic question first:
Is it possible to create an average application (like angry birds or doodle jump) in LibGDX in a reasonable amount of time?
Browsing the internet I came across many people stating that engines like Unity are "just so much easier to use" and that you can create a game in a fraction of the time it would take you to code a game in LibGDX.
Is that really the case?
My second question connects to the first:
Is LibGDX really worth the time? Picking up any engine or Framework seems like a lot of work, so I wondered if LibGDX is a growing platform worth learning or just an irrelevant framework of many.
The third question is a bit more specific (and the most important one for me):
How can I make LibGDX game pretty?
I know, that sounds weird at first but looking at hundreds of apps in all kind of appstores I´ve noticed that most unity apps look really neat whereas most apps found in the Badlogic gallery look just awful to be honest.
So I wondered is there a simple way to add animations, particle effects, shadows, etc. to a LibGDX application. If I was coding a 2048 clone (just as an example) how can I make my tiles slide together and blend nicely?
Creating good looking animations is something I struggle with the most...
(If you want you can have a look at what I created)
I would really appreciate any answer to any of my questions!
Thank you for making it through this huge post.
MrMorph
Question 1:
If you're good at LibGDX and know quite a bit about the API, it would be easy to make a game like Angry Birds or Doodle Jump. Unity is easier to use, because GDX doesn't have a GUI editor - meaning you have to position things using coordinates.
Question 2:
I think LibGDX is worth doing. It's free and royalty-free, which is good unlike Unity, and it's on Java so it's relatively fast.
Question 3:
To make particles, there's a 2D and 3D particle editor which you can download of the LibGDX website or run from your IDE if you import the 'tools' module. For animations, you can make sprite-sheet animations easily with the Animation class and you can move things around smoothly (for your 2048 clone) using functions like MathUtils.lerp() to smoothly interpolate a value to another, over time, slowing down as it gets nearer.
A late answer, but hopefully someone will find this useful.
Checkout my answer to a similar question here: What I need to get android game with graphics like this?
I've used both libgdx and Unity and talk about my experience in the answer. At this point I'm in favor for Unity for most small/medium sized games. The editor really does make development much easier (especially for a one-man team). Libgdx + Overlap2D + Ashley (entity component system) is basically a very light-weight version of unity imo. Going the open-source route, you will definitely learn more since you'll be more involved in gluing these tools/concepts together. To answer your individual questions directly:
Question 1:
There are many good games made with libgdx. The reason you see a lot of crappy looking games in Gallery is because the submissions are sorted by time. The gallery does not prioritize good games to be shown first, this was a community decision a while back. Engines like Unity of course show off the best games first. To see some good looking libgdx games, checkout games by Robotality. Also, take a look at the "Showcase" section of libgdx forums; sorting by reply count will show some interesting games made in past few years.
As for the the claims that Unity is easier to use, I agree. I've made the switch myself just because how easy it is to come back to a project after months, and just starting playing around with it. Not as easy when your game is mostly code.
Question 2:
Libgdx is the better way to go if you want to learn. Because it's a framework, you'll be dealing more closely with the components that make up a game engine. You'll be putting your own game engine together with the APIs provided. Unlike Unity, you'll have to choose whether you want to use an Entity Component System like Ashly. You'll decide when physics engines get updated, when you render, how you load and manage assets, etc. Once again, unlike Unity, there is no enforced structure in place.
You'll be spending time reading libgdx's very well written source code as well as the excellent technical github documentation. I'd say the overall effort to make a game is greater when using libgdx, because of the learning. It's great if you have the time, but can be frustrating if you're developing only once in a while as a hobby.
Question 3:
The question is a little unclear. As I've stated above, there are plenty of crappy looking games made with unity, they just don't show them on their gallery/showcase game. Plenty of games with bad art are made with all popular game engines.
Libgdx has the things you want: checkout Interpolation functions for smoothly controlling object movements, particle editor to create & load particles, not sure about shadows (for 3D?).
Hope this will help someone decide what tool to use.
Yes it is very possible to create a simple game in libgdx. I used to use this framework all the time. If you are semi new to it YouTube has some awesome tutorials.
Now I use unity primarily, and here is why:
It is easier from a productivity standpoint yes.
Libgdx can be a lot of work when trying to work with graphics.
Plus it was an easy transition from Java to c#.
And yes in most cases unity can move a bit faster, again from a productivity standpoint, in libgdx there is more of a process to setting up graphics and viewports and etc.
libgdx is 100% worth it. A big part of what libgdx helped me with was grasping how the backed of these applications work. This has helped me a great deal in debugging problems in unity and just advancing my knowledge overall.
If you have good graphics and understanding of the framework then you can make a libgdx game that does look beautiful. The difference is that unity simplifies the process for you. And all the demos you see are from a huge pool of projects. With libgdx being such a good start to game development, there are going to be plenty of projects, with no proof of how much work and or time was put in.

Game development: "Play Now" via website vs. download & install

I've spent some time looking over the various threads here on stackoverflow and while I saw a lot of posts and threads regarding various engines that could be used in game development, I haven't seen very much discussion regarding the various platforms that they can be used on.
In particular, I'm talking about browser games vs. desktop games.
I want to develop a simple 3D networked multiplayer game - roughly on the graphics level of Paper Mario and gameplay with roughly the same level of interaction as a hack & slash action/adventure game - and I'm having a hard time deciding what platform I want to target with it. I have some experience with using C++/Ogre3D and Python/Panda3D, but I'm wondering if it's worth it to spend the extra time to learn another language and another engine/toolkit just so that the game can be played in a browser window (I'm looking at jMonkeyEngine right now).
For simple & short games the newgrounds approach (go to the site, click "play now", instant gratification) seems to work well. What about for more complex games? Is there a point where the complexity of a game is enough for people to say "ok, I'm going to download and play that"? Is it worth it to go with engines that are less-mature, have less documentation, have fewer features, and smaller communities* just so that a (possibly?) larger audience can be reached? Does anyone have any experiences with decisions like this?
Thanks!
(* With the exception of flash-based engines it seems like most of the other approaches have these downsides when compared to what is available for desktop-based environments. I'd go with flash, but I'm worried that flash's 3D capabilities aren't mature enough right now to do what I want easily).
Download and install is a harder sell. People are more reluctant to do it, and once they have done it, you own the problem of platform compatibility, and you have installed code to update or avoid as your game evolves.
Java applets eliminate all that mess. Presumably also flash or html5.

LWJGL advanced lighting systems

Are there any tutorials or articles on how an efficient lighting system can be done in Java, using LWJGL?
As far as I know, LWJGL supports 8 or 11 lights (I can't remember without looking into the code) and I am interested in how this can be used to actually make a proper use of them, to easily distribute them in the world and manage the lights. Maybe there is a library for this?
I am also interested in any techniques to do shadows using LWJGL.
LWJGL essentially gives you a java binding for OpenGL. And the number of light sources supported varies between hardware. To find out, your program needs to get GL_MAX_LIGHTS:
int lights = GL11.glGetInteger(GL1.GL_MAX_LIGHTS);
If you want to look up articles on lighting in LWJGL, just look up articles that cover the same topic using OpenGL.
Remember you can use the OpenGL site to get better explanations of all of the various functions. Just ignore the C-specific parts.
Lighning and the amoung mapping technologies (normal mapping, shadow mapping) are one of the most complex graphic topics in terms of calculation, ...
There are several tutorials online.
One good tutorial is for example:
http://learnopengl.com/#!Advanced-Lighting/Advanced-Lighting
It is not LWJGL but this is also not important as you mostly use the Vertex, Fragment and Geometry shader for the rendering and I've you go through all of the tutorials you will get a very good overview of quit advanced graphic topics. Most of the C code can be shipped easily to LWJGL.
I don't recommend you the various youtube channels (thebennybox, thinmatrix) for learning opengl (lwjgl) as you will just type everything down line for line by their tutorials. Of course you will get from them a good overview how certain things are working but don't code your game based on the tutorials.
Some other sources:
Very intense lighning tutorial: http://www.falloutsoftware.com/tutorials/gl/gl8.htm

Best Java 'framework' for LOW-END 3D Graphics?

I've made my share of 2D games on various platforms but I have never developed a 3D game.
I want to make a small "mmorpg". I already made my server in python and it works just fine with my flash 2D game but I decided I want to step it up and try out 3D. I want to make a 3D game for the web browser and I think Java might be a good choice for this.
So basically I'm just looking for a straight forward and well documents 'framework' to make LOW-END 3D games. Keep in mind that I will be targeting peoples with very low-end PC's (plus my 3d modeling skills aren't great so I wouldn't mind hiding it somewhat, haha)
If you care to develop your own software 3D engine, which is pretty cool, Developing Games in Java is a complete walkthrough, step-by-step, of developing a 3D engine in pure Java, capable of rendering textured and lit polygons. You learn a lot about the math involved and you realize that it's really not a terribly hard thing to do; in addition, the engine is all yours, so you know it inside and out and you don't have to learn an API. On the flipside, it might be outdated. It's been sitting on my shelf for a number of years now, but it is made with Java 1.4 so it's not all too old.
Otherwise, I would definitely recommend JOGL or its competitor LWJGL; however, both require OpenGL knowledge, so if you want to just deal with loading 3D models and moving them around, jMonkeyEngine could be a better option for you. There is also the lesser-known Xith3D engine, somewhat a competitor to jME, though it hasn't been updated in over a year.
P.S. Ever seen RuneScape? It used JOGL, though now I think they switched to their own port of only the OpenGL functions that their code uses, kind of like a stripped-down version of JOGL.
JOGL would be a good possibility. You could look at the older "Java3D" framework as well.
You might want to check out the jMonkeyEngine.
I would advise against Java3D. We're using it for a project and frequently run into gotchas. If we had the resources, I'd migrate to something else in a second.

How to learn game development? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I've been a web programmer for a while and I can also program in Java. I have an idea for a small, multiplayer RPG game that I want to work on. It will be played through a java applet in the user's web browser.
I have written the design document and specifications of the gameplay. What I'd like to know now is how I can develop the game? I've worked only with windows-like business apps in the past, with built-in widgets for textboxes, dropdowns, etc. With game programming it seems that I would have to build my own widget/controls for the UI of the game.
These are the specific questions I have in mind:
1) How to display a 'loading...' message with a progress bar while the game's images, sound, etc are being downloaded. (Using the java applet)
2) How to create the UI of the game with its own menu, controls, etc. Such as by clicking the map icon it would show up a map to them. Clicking the friends icon would let them chat to their friends, etc.
3) And other, general game development issues that i should know about, like whether I should use 2D or 3D graphics, physics in games, etc.
If there's a good recommendation for a book that will help me, do share.
If this is your first game, a multiplayer project might be too ambitious.
Loading screens are not terribly hard - I implement them by counting up how many files I have to 'load' and then advancing the progress bar (and doing a screen refresh) every time another file has been loaded successfully. You can do this with as much granularity as you please - it might complicate your loading code to add the UI component. I wouldn't worry about it for now; maybe just throw up a basic "Loading..." frame and then implement a full progress bar later when the game is more solid. I've also seen some good implementations with multithreading.
The other two will come with experience; I think what you need more of is a general tutorial for game development than the specific answers. You should definitely start smaller. Once you understand the structure and problems of a smaller game, it will be easier to apply those to larger games.
Most reasonable game programming books will go over basic game structure; I like Game Coding Complete but it's quite complicated for a beginner (it covers more complex ways to approach large projects). Game Architecture and Design is similar, but might be better suited to what you're looking for since it also covers some minor project management "best practices."
There's a lot of different ways to do UI, from using the Java primitive UI types (depending on what other libraries you're using) to self-writing your own "HUD" implementation with just what you need.
One thing that is probably worth being familiar with is multi-threading. For example, with the "load screen", you might have one thread displaying the progress bar, while other threads simultaneously load data.
Similarly, much of the interactivity will happen by dispatching multiple threads to do many things at the same time (move different characters on the screen) or to handle interrupts by user input.
I would look at O'Reilly Books
Killer Game Programming in Java
Coding For Fun
The easiest route is to package everything in a Jar file. The default screen does show a progress bar with some small ability to customise. You can write custom code to keep track, manage and download files but I would personally advise against this route. If you search for applet loaders you will find more information.
I'm not 100% sure what you mean, but you can use Swing components in the same way you can use them in applications. Use a JButton with an image is quite trivial, then hook the event code in the actionPerformed method.
The biggest problem you will probably come across is animation and the EDT. I asked about this earlier.
This page has a whole bunch of useful links for game development. Pulp core is an open source framework worth checking out - even if you don't use the framework you can investigate the code.
Whether you should use Java applets or not seems out of scope of this question, but a lot of the above answers give objective (or no reasons at all) about whether to use Java applets. If it's a game for a personal exercise to learn Java then it's a great approach. If you wish to make it public you need to consider whether the current adoption levels are high enough for your needs.
Things have changed in the applet world recently. Since 1.6 update 10 it is much more competitive with Flash - the download size is smaller (at typically under 4Mb), the startup time is reduced and a new scaling look and feel was introduced.
http://nehe.gamedev.net/
Has tons of tutorials from basic to advanced using OpenGL from various languages and systems, from C to C# and Python to Java.
I found this very very useful and is a great resource to bookmark.
It should get you started with the basics of game/3D programming on your platform/language of choice.
good luck!
As others have said a java applet is probably not the medium in which you want to present your game. The second most people see an applet start to load they run in fear.
If you have no game design experience at all, you are setting the bar very high with a multiplayer RPG. You may want to start with a simpler project such as recreating something like tetris, pacman, or even pong so you can get an idea of all that goes into creating a game.
Flash is great if you are set on doing an online game, Java plus the Jogl open-gl wrappers are also a great option.
Personally I would suggest using Microsoft Xna. C# is similar enough to Java that you should be able to pick it up fairly quickly and Xna does a good job of abstracting away some of the lower level details involved in graphics programming. The community is also very active and helpful.
Don't go the java applet route.
If you want to make a quick casual game, make it Flash; else, develop a full-blown java app and run it via java web start.
Try Tower to see how far you can go using java as a platform, and also how Java Web Start works.
As for progress-bar thing, I recommend you to implement those files' loading and actually use them before you go for progress-bar eye-candy :)
Responding to question 3. If you are really keen to start developing games, I recommend you read this short article by Jeff Howland.
Q1 = 1% of your time.
Q2 = 40% of your time.
Q3 = 59% of your time.
You might as well be asking how could I write Halo3 for a web browser.
Aim a little lower to start with....
opencourseware class on game theory and design. It also comes with a reading list.
Since I can't add a comment, I'll add an answer. I'd recommend NOT using threads for moving characters, etc. For file loading, playing sounds, and even server side networking it works well but any sort of AI/Graphics, it tends to cause endless headaches.
Also, as other people have mentioned, Java may not be the best choice. The simple reason that people say this is that it's difficult. The amount of support/tutorials for Java game development is rather lacking when compared to C++ (GameDev.net is great resource, but it's moved its focus more towards professional development over time), Flash (decent tutorial on Kongregate as well as being a spot that could host the game for you), or even C# (using XNA). Java game development has improved over the years and you can do some amazing things with it, but it may end up being more difficult going that route. No matter which language you choose, definitely look into using a graphics/game engine as it will cut down on the amount of work on your end and allow you to hopefully create a better game.
If you're looking for a gentle entry path to game development and don't mind learning C#, XNA has an entire community built around learning how to write games. It has samples of all sorts of things -- the Game State Management sample shows a good way to implement screen transitions and loading, and there's a similar Network Game State Management sample for networking stuff. They also have entire games available as source code to download.
Whether or not your long-term goals are to make a Java applet, Flash game, or you want to work in C/C++ with OpenGL, XNA is a great way to ignore all the hairy implementation details of rendering/sound/etc. That's very very helpful when you're just trying to make your first game, believe me.
Don't go with the java applet approach; applets are generally annoying, and slow.
If you really want it to be playable from the browser, consider Flash (actionscript), or maybe silverlight (I don't know much about games in silverlight).
Gamedev is a great resource for general game programming stuff
And ...
I'll shamelessly steal the link from yx's answer:
MIT Open Course Ware: Game Theory and Mechanism Design

Categories