I was wondering what the best way to create a 3D game map would be...
At the moment, I plan to use an array of block objects which all must be checked when moving the player, with a hitTest function...
I am not sure if this is a very good solution because it would mean that the player object would have to check for collisions on the other side of the map almost constantly...
Your own techniques or various articles would be appreciated
Generally when testing hit detection in large worlds, the world will be subdivided into little squares, and the player will only be tested for hit detection in that square. As for creating a 3D game map, what do you mean? If you mean generating a world like is done in Minecraft, it is very complicated, involving a lot of complex algorithms. I'm pretty sure the game is open source so you can look through the code and check it out though :/
It's actually not terribly hard to create a 3D game map, however they are not truly made with squares(quads). Even if you have a function that "draws" quads they are always made with triangles. So it's important to remember that the data you are working
with is always triangles for 3D work. I use OpenGL and highly recommend it if you are considering 3D work, it's cross platform and that's getting to be pretty important these days. OpenGL used to have a function to draw quads but it was deprecated recently as it was ultimately unnecessary because it simply translated the quads into triangles, which is a bottleneck to have to do the calculations if you have many quads.
Collision detection requires some math to determine which triangle of a quad the player is in, it does this usually be using a ray intersection test emitted from the players position directly down and only testing the quad that you are currently over so you don't have to test everywhere. This can be made more complex be giving your player a radius instead of just a ray from the center position. As for objects not related to the map directly, a bounding object is used. If you are beyond the bounds of the bounding object then there is no need to test to collision. 3D vertex data is stored in a single array and often other data such as texture coordinates, normals, and colors(hue) are packed together into the same array on the graphics hardware. Storing data in a single array allows things such as indexed arrays which cuts vertex data in half. With the proper algorithm you can access the exact data you need for specific position very fast.
The mathematics used in 3D work is heavy on trigonometry, linear algebra, and even calculus for animation purposes.
There, thats my "more information than you probably needed" post. I don't know if this is exactly the kind of information you were looking for but I hope it helps at least give you some insight.
Ok thanks, I was planning to use either SFML+OpenGL or Irrlicht... what would you say is a better choice?
And about the collision.. are you saying to check collision with triangles instead of quads?
Collision detection requires some math to determine which triangle of a quad the player is in, it does this usually be using a ray intersection test emitted from the players position directly down and only testing the quad that you are currently over so you don't have to test everywhere. This can be made more complex be giving your player a radius instead of just a ray from the center position. As for objects not related to the map directly, a bounding object is used. If you are beyond the bounds of the bounding object then there is no need to test to collision.
SFML+OpenGL is a good way to go. SFML is basically a replacement for the older SDL which also still works rather well. The problem with using something like Irrlicht is that once you learn it you may find limitations to what you want to do even though initially you will likely be able to create very nice looking applications. But if you are primarily interested in just creating a game rather than the entire game engine then it's a good way to go because there is a lot to learn when it comes to designing a game engine. A good book on the subject is "Game Engine Architecture, by Jason Gregory". I recommend you check it out if you are considering making your own game from scratch, it will get you headed in the right direction. It's not a programming book though, it's more of a concepts type book.
Honestly I can't tell you exactly how to do collision because it depends on how you set things up. Minecraft has no need to test individual triangles because each quad is flat so that makes collision (or height mapping as I call it) much simpler. If you have variable terrain then you will likely have to do your tests on a per triangle basis. If you are going for the Minecraft approach then there are tests for quads you can do as well. The book "Real-Time collision Detection, by Christer Ericson" is the best material I know of on the subject. It requires knowledge of linear algebra though, primarily matrices and vectors, otherwise it won't make a lot of sense.