Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 我怎样才能填满相机';s带有固定大小立方体的平截头体?_Math_Three.js_3d_Geometry_Frustum - Fatal编程技术网

Math 我怎样才能填满相机';s带有固定大小立方体的平截头体?

Math 我怎样才能填满相机';s带有固定大小立方体的平截头体?,math,three.js,3d,geometry,frustum,Math,Three.js,3d,Geometry,Frustum,我相信这将是一个梯形(相机的平截头体)的形状。我想用固定大小的立方体或长方体填充整个相机的平截头体。每次移动相机时,我都需要一组适合相机平截头体的立方体。重要的是这些立方体在世界空间中是轴对齐的,因为否则会有很多重叠,我必须在我的用例中避免这种情况 我最初的想法是从一个初始点p=(0,0,0)创建大量(高于世界大小)循环的立方体,使p成为立方体的中心,如果大小为2,则将p2=(2,0,0)作为下一个立方体的中心点,p3=(0,2,0)作为第三个立方体的中心点,依此类推。。。 这样做的问题是,我会

我相信这将是一个梯形(相机的平截头体)的形状。我想用固定大小的立方体或长方体填充整个相机的平截头体。每次移动相机时,我都需要一组适合相机平截头体的立方体。重要的是这些立方体在世界空间中是轴对齐的,因为否则会有很多重叠,我必须在我的用例中避免这种情况

我最初的想法是从一个初始点
p=(0,0,0)
创建大量(高于世界大小)循环的立方体,使p成为立方体的中心,如果大小为2,则将
p2=(2,0,0)
作为下一个立方体的中心点,
p3=(0,2,0)
作为第三个立方体的中心点,依此类推。。。 这样做的问题是,我会在场景中添加比实际需要更多的立方体,每次移动相机时,我都必须遍历所有立方体,以检查它们是否相交或是否包含在相机的平截体中,我相信这种方法可能非常昂贵

我该怎么做,有没有更聪明的方法

另一方面,如果包装问题可以用可变尺寸的3D四边形来解决,这是一个更容易解决的问题吗?怎么做呢

编辑:在某些情况下,我很难理解相机空间和相机世界。我尝试了你的方法,但没有考虑我自己“人工”创建的层,也没有使用逆视图矩阵变换长方体,我得到了长方体的最大/最小点,以获得世界空间中的边界框(我相信这是真的)

this.createCuboids=(远相机、xDist、yDist、近点)=>{
//xDist是max.x和min.x的差值
//yDist是最大y和最小y的差值
//近点是表示近平面的4个点
const cuboidScont=5;//层数
const cuboidThickness=farCamera/cuboidscont;//每层的深度
设长方体列表=[];
for(设i=1;i//最后,将X/Y/Z max和min作为每个长方体的边界框
你能解释一下你需要它做什么吗?我觉得有更好的解决方案可以满足你的需要。如果没有,这些长方体的特征是什么?它们总是处于整数位置吗?或者它们可以任意移动吗?我想在后面执行空间查询结束加载位于相机平截头体内(空间中)的三维点时,我不能执行梯形形状的查询,只能执行立方体或常规三维四边形。要解决此问题,我可以执行多个较小的查询,查询形状为立方体/四边形,跟随梯形(相机平截头体)的形状。我认为更小的立方体可以获得更高的精度。长方体也可以吗?那么,每个深度层只需要一个长方体,这要少得多。层的厚度最终将决定您的精度。是的,长方体很好。我正在研究如何设置每层的厚度?如果这个层类允许我划分相机的厚度s平截头体切片(长方体)这可以解决我的问题。但我不知道如何使用它。第二种方法有什么问题?我看到的一件事是,你的相交测试已关闭。立方体可以与平截头体相交,即使它的顶点都不在平截头体内。使用
trustum.intersectsBox()
相反。但是,它不会告诉您交叉点是否为部分交叉点。您可能需要为此编写自己的函数。