I've been learning a little of C++ and Java but my main field of interest is gaming and i would like to write code for making my own 3D Games to complement my artistic expertise
I think the C++ is a classical game programming language. Most of the PC games are being written in C++. So I would continue to learn C++ and a 3D graphics library - OpenGL, DirectX or something else.
Try the free Visual C#.NET Express Edition and check out this page on Game Dev from Microsoft here. Its quite easy using Managed DirectX.
Plenty of engines should be available for C++. My personal favorite game programming environment, however, is Python with Pyglet. That should give you fine and convenient control of windows and monitors, OpenGL contexts, batches of indexed vertex arrays, image loading for textures, OpenAL audio, and of course keyboard and mouse events.
I think even C++ can be a little heavy; learn C. Learn it WELL. Optimization of things like game engines is really best done in C, and NOT C++; while I like C++ for high-level things and design and stuff like that, game engines are usually written in optimized C. Learn it, and learn it well. And then, when you think you've learned it well, learn it better. There's a lot of depth available in extremely well optimized C; and you're going to need all that optimization.
To get quick results up on screen, and focus on the fun/art side rather than get entrenched in API details, you could try something like DarkBasic or Blitz3D.
These are simple to use languages that are geared towards 3D games.
I'd recommend that you start with C++ and one of the 3D graphics libraries, since it is probably what you will be using if you get a job in the field. May as well get a head start now. Alternatively you could give XNA a try, I heard it's pretty good as well.
Depends on your ultimate platform preference, I think.
C# is very nice now. Combined with the Microsoft XNA platform you can produce some really great games with limited experience. Also, the community is really shaping up nicely so you'd have tons of resources to draw upon.
Here are a couple of good resources:
Since it is to complement artistic experience, I would highly recommend C# and XNA. C and C++ can be a nightmare because of the pointer syntax when you start.
C# does all this for you.
Using XNA, you can develop games for XBox 360, Zune and PC. This gives you a few interesting targets to deploy your games.
Using C++ (as an hobyist), you probably only develop easily for pc.
(I am assuming the poster does not have much programming experience)
For thoses who said to go C because of performance, I think this would be premature optimization, and the poster is learning, so he should not bother with optimizing, until he gets the concepts right.
I'd like to echo the suggestions for Python, especially for someone who hasn't done masses of programming before. Learning it is very easy. Getting something up and running takes a very small amount of code. Programs will pretty much 'just work' seamlessly across Windows, Linux and Macs. Bindings to OpenGL are available.
Since the grunt work is being done by the GPU, Python being a slow language isn't much of an issue - I whipped up a demo of 80,000 vertices at 60fps over this weekend, on modest hardware (2005 end-of-line ThinkPad T60, an ATI Radion X1400.) I know that isn't going to break any records, but on the other hand, it's plenty for a beginner to get started with.
I would recommend XNA 3.0 C# libraries. You can build very powerful games for PC / XBox / Zune and the learning curve is very low if you have any C# or Java programming experience.
Speaking for my current studio, we use:
- primarily C++, with some C++0x and boost features for the engine
- lua for scripting
- occasionally C for lower-level libraries the engine uses (e.g. sound)
- a bit of ARM, PPC, or x86 assembly here and there for really core engine routines (instrumented profilers, image processing, matrix manipulation, DMA engine control) -- almost always backed up by an equivalent C implementation, for porting
- C# artist- and designer-facing tools (mostly producing intermediate data formats)
- C++, C#, or Perl for data pipeline (intermediate to final) and coder-facing tools; some bits of python here and there too
- make and jam for source and data building respectively, although we're moving toward all-jam
We occasionally do fun little experiments like rolling tinyscheme into our engines, to see how that works... But by in large, the above is a mostly-exhaustive list.