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.
}