gpt4 book ai didi

c++ - 带定向边界框的轴旋转

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:54 27 4
gpt4 key购买 nike

我正在尝试为一个项目在斯坦福兔周围放置一个定向边界框。为此,我创建了一个包含顶点的协方差矩阵,并将特征向量列用作 OBB 的新轴 vector 。

为了绘制 OBB,我使用 vector 列与 x、y 和 z 轴的叉积来找到垂直于这两个轴的 vector ,然后我使用点积来找到它们之间的角度。

//rv,uv,fv are the normalised column vectors from the eigenvector matrix.
// Calculate cross product for normal
crossv1x[0] = xaxis[1]*rv[2] - xaxis[2]*rv[1];
crossv1x[1] = xaxis[2]*rv[0] - xaxis[0]*rv[2];
crossv1x[2] = xaxis[0]*rv[1] - xaxis[1]*rv[0];

// Calculate cross product for normal
crossv2y[0] = yaxis[1]*uv[2] - yaxis[2]*uv[1];
crossv2y[1] = yaxis[2]*uv[0] - yaxis[0]*uv[2];
crossv2y[2] = yaxis[0]*uv[1] - yaxis[1]*uv[0];

// Calculate cross product for normal
crossv3z[0] = zaxis[1]*fv[2] - zaxis[2]*fv[1];
crossv3z[1] = zaxis[2]*fv[0] - zaxis[0]*fv[2];
crossv3z[2] = zaxis[0]*fv[1] - zaxis[1]*fv[0];

//dot product:
thetaX = dot(xaxis,rv,1)*180/PI;
thetaY = dot(yaxis,uv,1)*180/PI;
thetaZ = dot(zaxis,fv,1)*180/PI;

然后我围绕叉积 vector 应用旋转,角度由每个轴的点积确定(glRotatef(angle,cross[0],cross 1 ,cross[2]))。然后我绘制一个轴对齐的边界框,然后反向旋转回到原来的位置。

        glRotatef(thetaY,crossv2y[0],crossv2y[1],crossv2y[2]);
glRotatef(thetaZ,crossv3z[0],crossv3z[1],crossv3z[2]);
glRotatef(thetaX,crossv1x[0],crossv1x[1],crossv1x[2]);

glTranslatef(-meanX, -meanY, -meanZ);
glColor3f(1.0f,0.0f,0.0f);
AOBB(1); //Creates an axis aligned box.

glRotatef(-thetaX,crossv1x[0],crossv1x[1],crossv1x[2]);
glRotatef(-thetaZ,crossv3z[0],crossv3z[1],crossv3z[2]);
glRotatef(-thetaY,crossv2y[0],crossv2y[1],crossv2y[2]);

正如您在下面看到的,盒子并没有完全适合兔子,也没有与我绘制的轴对齐……我在这里遗漏了什么吗?我绞尽脑汁想找到解决办法,但无济于事......

enter image description here

最佳答案

To draw the OBB, I take the cross product of the vector columns with the x,y and z axes to find the vector perpendicular both, then I use the dot product to find the angle between them.

那些“vector 列”?这些实际上是您要生成的旋转矩阵的列。

因此,与其使用这些 vector 来计算旋转角度,不如构建一个以这些(归一化) vector 作为列的矩阵。使用 glMultMatrix 上传它,你应该没问题。

关于c++ - 带定向边界框的轴旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34074504/

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