最近应老大的需求,让我去整一个求出模型里能容纳的最大长方体,要考虑旋转,位移,性能等要求。
为什么要搞这个b东西呢
其实就是他们有个遮挡剔除的demo,可以设计一个东西为遮挡物,让其他东西为被遮挡物,这遮挡物拦在前面的时候,被遮挡物就可以被遮挡了

就像这个cube2,


遮住的时候就会自动隐藏了,关键是他这玩意还只能用球形和立方体作遮挡物,所以他就给我提了这玩意,让我算出来。
让我回去想了一天,我说想不出来,本来以为老大能有什么牛逼的方法,但实际上也就提了下射线检测和正交矩阵,意思是要求出xmin,ymin,zmin,xmax,ymax,zmax就能确定长方体的范围了,意思是可以分开求前面的面的面积最大,在考虑侧面的,上下可以不考虑。具体怎么求,他也讲了一下,但他讲完一下我就发觉其实他也不是很清楚。唉.
然后我还是决定自己想个办法,发现leetcode上的最大矩形可以满足正交情况下求出某个面的最大矩形来,所以可以从这里入手

假设形状的面积主要在前后面比较大,像这样,那就先计算前后面的最大矩形,算出来就能得出xmin,xmax,ymin,ymax,就有了y的范围,之后再到侧面去求z的范围。如果是侧面比较大,就反过来,我懒,就只算正面的。
先得出中心点(所有顶点相加取平均)
按leetcode题意,先得出二维数组,每个单元有模型是1,空的是0
如何检测是否有模型,就用碰撞,发射线检测.

我这里用的是球形射线

结果如上图.
得到数组之后就可以利用leetcode的柱状图解法,求出最大面积,和能求出的最大面积的行数,列数,宽高了,由此求出x,y范围,
然后从侧面观察,继续用射线在ymin 到 ymax 之间的高度上,检测zmin是多少和能达到的zmax是多少。
一般结果就还ok的。
然后是结果的样子。

我根据min,max drawmesh生成了一个cube,
复杂一点的模型。
弄了一个编辑器

还做了个球体的,如果是球体就从面积可能更小的那个面求出最大正方形,就容易做了。

这是立方体
然后这种解法基本就是和碰撞器是紧密联系的。做得时候是基于无旋转来做的,用的射线,跟位移没有关系,所以不用考虑坐标的问题,所以有旋转的时候,就先记录旋转,reset模型,然后算完,把生成的cube绑定在模型里面,再把模型转回去就行了。
这东西有什么用呢,应该是批量自动生成模型碰撞体用的。

博主应老大需求,要在模型中求出能容纳的最大长方体,需考虑旋转、位移和性能。老大提出射线检测和正交矩阵思路,但未讲清具体方法。博主借鉴 leetcode 最大矩形解法,通过碰撞检测得出二维数组,利用柱状图解法求出最大面积及范围,还考虑了旋转情况,该方法可用于批量自动生成模型碰撞体。
5522

被折叠的 条评论
为什么被折叠?



