分开绘制调用

接下来我想在我的游戏中实现的是截锥体扑杀。 我遇到的问题是创建一个绘制方法,我可以检查我绘制的顶点缓冲区中的哪些立方体。 我想要做的是循环我的列表“立方体”,并检查立方体具有的每个边界框。 我之前做过这个,当时每个立方体都有一个单独的顶点缓冲区,但是现在当我用一大块立方体尝试它时,会使我的电脑崩溃。 我知道为什么发生这种情况,所以我不会麻烦解释它。

cubes.Add(new Cube.Grass(device, new Vector3(x, map[x, z] - y, z), grass)); cubeBoundingBox(some Vector3s here); 

因此,使用这两行代码将多维数据集添加到列表中,并根据框的位置和大小创建一个边界框。 我相信有一个更好的方法来做到这一点。

  public void DrawMap(GameTime gameTime) { ContainmentType CurrentContainmentType = ContainmentType.Disjoint; foreach (Cube block in cube.cubes) { CurrentContainmentType = cam.frustum.Contains(cube.cubeBoundingBox); //some more stuff here if (CurrentContainmentType != ContainmentType.Disjoint) { cube.Draw(effect); } 

这是我几乎工作的旧方法。 但现在我已经将所有的多维数据集存储在一个顶点缓冲区中,这是行不通的。 我有点迷路了 我怎么能通过我的列表“立方体”中的所有立方体,以检查是否需要扑杀? 或者,制作一个边界框列表并循环这个列表会更有意义吗?

只要将偏移顶点迭代到下一个立方体的下一个顶点即可。 喜欢这个:

 point[] linevertices = new point[6]; // line is made of 2 points // Iterate through all lines for(int i=0; i<6; i=i+2){ // code }