How to performantly display a hex/pent grid on a subdivided icosahedron?
I have a subdivided icosahedron planet used as the "board" for a strategy game. It usually has anywhere between a few thousand and a hundred thousand tiles depending on the size the user inputs to the map generator.
Basically, I cannot brute force this and do a simple bounds and depth check, because of the sheer numbers of tiles.
I am storing the grid in a 2D array for simplicity. I understand that, on a 2D map, you simply do something like the following to draw a hex map:
for(int x = cameraX; x < viewportWidth; x++) { for(int y = cameraY; y < viewportHeight; y++) { if(x % 2 == 0) //For the 2D array to work properly we have to offset every other row by +1 world coordinate (assuming each tile is 1*1 world coordinates) grid[x][y].render(x+tile_width, y); else grid[x][y].render(x, y); } } And that to draw a wrap-around world you would check the absolute distance from the camera's position.
Eg:
//This sets up the variable that tells the game what hex tiles to draw. if(camera.x - viewportWidth < 0) { camera_rX = camera.x - viewportWidth; cameraX = grid.length + camera_rX; //We will add this to the cameraX value because the result should be a negative value if the prerequisite if statement is met. The "cameraX" variable is used for viewing calculations, while the "camera.x" variable is used for camera positioning. Err... I think this makes sense. }