帮助解决此问题

时间:2010-09-08 00:26:22

标签: c++ c algorithm opengl

这是我的问题。我正在渲染轴大小相同的多维数据集。我创建了一个围绕玩家呈现的算法:

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

2 个答案:

答案 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/