我想從我的Box類中計算AABB(軸對齊的邊界框)。從框中計算AABB(center,halfSize,rotation)
盒類:
Box{
Point3D center; //x,y,z
Point3D halfSize; //x,y,z
Point3D rotation; //x,y,z rotation
};
的AABB類(盒,但沒有旋轉):
BoundingBox{
Point3D center; //x,y,z
Point3D halfSize; //x,y,z
};
OFC,當rotation = (0,0,0), BoundingBox = Box
。但是如何計算包含盒子裏所有東西的最小BoundingBox當rotation = (rx,ry,rz)
?
如果有人問:旋轉的弧度,我用它在DirectX矩陣旋轉:
XMMATRIX rotX = XMMatrixRotationX(rotation.getX());
XMMATRIX rotY = XMMatrixRotationY(rotation.getY());
XMMATRIX rotZ = XMMatrixRotationZ(rotation.getZ());
XMMATRIX scale = XMMatrixScaling(1.0f, 1.0f, 1.0f);
XMMATRIX translate = XMMatrixTranslation(center.getX(), center.getY(), center.getZ());
XMMATRIX worldM = scale * rotX * rotY * rotZ * translate;
謝謝:)這可能是愚蠢的,但如何將矩陣應用於DirectX 11中的點/矢量(而不是着色器)?不再有setState函數。 – PolGraphic 2012-08-14 13:29:28
我不真的使用DirectX,所以我不知道如何回答。讓我試一試。在實踐中,我所做的是創建矢量是創建矢量'V =(X,Y,Z)',其中X = +/-沿x的一半尺寸,Y = +/- 沿y的半尺寸和Z = +/- 沿z的一半尺寸(不旋轉)。這會給你8個頂點。你只需要4(你不需要對立的頂點)。然後,只需進行乘法'V'= R V'(矩陣和矢量的相乘)。 V'應該包含新頂點的位置。然後計算它們到xy,xz和yz平面的距離。最大距離是邊界框的一半。 – rpsml 2012-08-14 13:39:13
偉大:-)非常感謝。 – PolGraphic 2012-08-14 13:51:14