KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am working on a personal learning project to make a Minecraft clone. It is working very well aside from one thing. Similar to Minecraft, my terrain has lots of cubes stacked on the Y so you can dig down. Although I do frustum culling, this still means that I uselessly draw all the layers of cubes below me. The cubes are X, Y and Z ordered (although only in 1 direction, so its not technically Z ordered to the camera). I basically from the player's position only add pointers to cubes around the player. I then do frustum culling against these. I do not do oct tree subdivision. I thought of simply not rendering the layers below the player, except this does not work if the player looks down into a hole. Given this, how could I avoid rendering cubes below me that I cannot see, or also cubes that are hidden by other cubes. Thanks void CCubeGame::SetPlayerPosition() { PlayerPosition.x = Camera.x / 3; PlayerPosition.y = ((Camera.y - 2.9) / 3) - 1; PlayerPosition.z = Camera.z / 3; } void CCubeGame::SetCollids() { SetPlayerPosition(); int xamount = 70; int zamount = 70; int yamount = 17; int xamountd = xamount * 2; int zamountd = zamount * 2; int yamountd = yamount * 2; PlayerPosition.x -= xamount; PlayerPosition.y -= yamount; PlayerPosition.z -= zamount; collids.clear(); CBox* tmp; for(int i = 0; i < xamountd; ++i) { for(int j = yamountd; j > 0; --j) { for(int k = zamountd; k > 0; --k) { tmp = GetCube(PlayerPosition.x + i, PlayerPosition.y + j, PlayerPosition.z + k); if(tmp != 0) { if(frustum.sphereInFrustum(tmp->center,25) != NULL) { collids.push_back(tmp); } } } } }
Tags (comma-separated)
Save Edits
Cancel