如何访问C++中3D对象的最小和最大坐标?
我在qt Creator中使用C++和OpenGL创建了一个游戏,并尝试将边界框添加到我的场景中以实现碰撞检测。我使用从Maya导入的对象作为.obj在我的场景中,因此它们的尺寸不是在代码中设置的,只是它们的位置,旋转和缩放。我能够围绕每个匹配其位置的对象创建一个边界框,但我正在努力寻找一种方法来访问对象的最小值和最大值x,y和z值,以便匹配对象的大小。如何访问C++中3D对象的最小和最大坐标?
有没有人对我如何访问最小和最大坐标有任何想法?我知道如何实现代码,如果我可以访问这些值..
您承担的问题是,每个对象几何具有不同的内部存储和确定边界框的方法。
让我们尝试一些例子来说明这一点:
假设我们有一个圆圈,它的绘图参数内部存储的中心坐标
x_center
和y_center
和半径radius
。如果尝试确定此对象的边界框,则会看到它从(x_center - radius, y_center - radius)
延伸到(x_center + radius, y_center + radius)
。如果你有一个未旋转的矩形,由它的主对角线的两点给出,边界框恰好与它的形状一致,所以你只需要给出表示它的两个相同点的坐标。
如果在另一方面,我们有一个多边形,边界框将由所有多边形顶点的最小和最大坐标确定。如果允许旋转多边形,则需要在确定其最大值和最小值之前旋转所有顶点坐标,以获取边界框。
例如,如果我们有一个由其四个控制点的坐标确定的三次样条,则将确定两个三次多边形的最大值和最小值,这意味着求解两个二次方程(推导之后),在一般情况下。
为了应付所有这些东西,几何形状通常包括多态变形构造它的边框一些手段(它通常甚至缓存,所以你不必来计算的话,只转或变化后它的位置或比例)通过一些实例方法。
当然,所有这些都取决于如何定义形状的实现方式。也许你的情况比我在这里暴露的更简单,但你不说。您也不会显示任何代码或输入/输出数据,如How to create a Minimal, Complete, and Verifiable example页面中所述。所以你最好编辑你的问题并添加你的示例代码,这将显示更多有关你确切问题的信息。
如果你有obj加载器,所以你有一个数组。
float t[2100];
int x = 2100;
float xmax=-123243;
while(x>=0)
{
if(xmax<t[x]) xmax=t[x];
x-=3;
}
所以这里是对象(?)的最大值x。
如果您已经能够创建边界框,那么问题是什么? – Vallentin
@Vallentin - 如果你继续阅读另外两行,你会意识到情况并非如此。 OP创建一个“边界”框,它并不真正限制几何图形。 – dtech
我没看过。取所有顶点的x,y,z的最小值和最大值将创建一个适合的边界框。唯一不适合的情况是,如果后面的网格被旋转,哪个OP没有提到它是不适合的情况。 – Vallentin