这是我的问题。我正在渲染轴大小相同的多维数据集。我创建了一个围绕玩家呈现的算法:
******
******
***p**
******
******
虽然这确实有效,但玩家看不到整个半径。 我知道玩家在Y上的旋转角度,所以我希望能够在此基础上修改我的算法,这样它只会渲染,玩家可以看到更多或更少。
SetPlayerPosition();
float yrotrad;
yrotrad = (Camera.roty / 180 * 3.141592654f);
PlayerPosition.x += 70 * float(sin(yrotrad));
PlayerPosition.y -= 20;
PlayerPosition.z += 70 * -(float(cos(yrotrad)));
collids.clear();
for(int i = 0; i < 135; ++i)
{
for(int j = 0; j < 50; ++j)
{
for(int k = 0; k < 135; ++k)
{
if(!CubeIsEmpty(PlayerPosition.x + i, PlayerPosition.y + j, PlayerPosition.z + k))
{
collids.push_back(GetCube(PlayerPosition.x + i, PlayerPosition.y + j, PlayerPosition.z + k));
}
}
}
}
基本上,我的原始算法只会从玩家位置减去70,并渲染大小为70的正方形。所以我试图将这些乘以sin和cos在Y旋转,但它不起作用。我确信这是可能的,我只是觉得我错过了什么。我怎样才能实现仅渲染〜玩家看到的目标。
由于
就像一张纸条一样,我尝试了截头剔除,而且速度太慢了,无论我有多少立方体,我都宁愿这样做
而不是像上面那样只渲染上面的id,如果玩家正面对 - >&gt;
...... ****
...... ****
......P****
...... ****
答案 0 :(得分:0)
再次查看您的代码后,这可能是您的问题:
PlayerPosition.x += 70.0f * float(sin(yrotrad));
PlayerPosition.y -= 20;
PlayerPosition.z += 70.0f * -(float(cos(yrotrad)));
坐标是什么类型的?
答案 1 :(得分:0)
我不太了解你的代码(70?CubeIsEmpty?)但如果Cube-frustum太慢,你可以尝试使用sphere-frustum。
http://www.chadvernon.com/blog/resources/directx9/frustum-culling/