gpt4 book ai didi

C++、OpenGL 裁剪

转载 作者:行者123 更新时间:2023-11-30 03:09:01 27 4
gpt4 key购买 nike

我正在制作一个基于立方体的游戏(一切都是立方体),目前正在尝试通过不在视野之外绘制东西来优化它。

以下内容仅适用于 x 和 y 平面,稍后我会担心 z ......所以现在只进行侧面裁剪。

我知道我自己在世界中的位置和旋转以及每个立方体的位置,所以我的想法是比较玩家和立方体相对于玩家的 z 和 x 旋转角度,并只显示立方体在定义的范围内。

代码时间:

// this is how I turn
float zrotrad = (float)zrot*DEG2RAD;
float view_limit = .4;

// distance between the cube and me
float dist_x = box_x-xpos;
float dist_y = box_y-ypos;
float dist_z = box_z-zpos;

// total distance (I'll use fast sqrt later)
float dist_tot = sqrt(dist_x*dist_x+dist_y*dist_y);

float angle = acos(dist_y/dist_tot);
// need to add 2 pies because acos returns a value [0,2PI]
float zcuberot = dist_x<0?2*PI-angle:angle;

if(zcuberot > zrotrad-view_limit && zcuberot < zrotrad+view_limit)
{
drawcube(box_x, box_y, box_z);
}

正如您可能已经理解的那样,0 度附近存在问题,因为我的左视场视野限制变为负值并且 zcuberot 得到 2 个饼图,范围变得困惑。 359 度也是如此 - 实际上因为 view_limit = .4 而减少了。

我已经为此纠结了 2 天,觉得问这个问题真是个笨蛋。

最佳答案

实现八叉树会快很多(而且不容易出错)。然后,您将能够通过丢弃八叉树中不与您的视锥体相交的部分来剔除所有不可见的立方体。您不必对每个立方体都执行此测试,并且可以将测试减少到将一个较大的立方体与 6 个平面进行比较。

与您拥有的相比,八叉树的速度要快几个数量级

您可以在 Wikipedia 上找到大量关于八叉树的信息和 Flipcode ,以及其他地方。

关于C++、OpenGL 裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com