0

我正在尝试围绕其焦点旋转 vtk 相机。目的是“环绕”模型。

我正在使用camera.SetPosiiton(x, y, z)调用来设置相机位置,并且我知道我可以在渲染窗口的每个更新期间执行相同的操作。

焦点具有位置 (0, 0, 0),而其他一些边界框则为我提供了我的初始相机 (x, y, z) 位置。从焦点 (0, 0, 0) 到相机位置 9x, y, z) 的距离描述了球体的半径。

在我的脑海中,这实质上是围绕点 (0, 0, 0) 逐步移动相机,我假设有一个数学函数可以用来将其输入我的起始相机点,并计算出我的下一个相机位置。

这应该会导致模型看起来在空间中旋转。我的相机视图从所有 x、y、z 平面偏移,使其成为 3d 问题,而不是 2d 问题。但是,我确实希望我的相机与模型(焦点)保持相同的距离

我想要达到的效果是这样的:-拿一支铅笔(我的模型又长又窄)。将其握在您的指尖与手臂的距离,尖端指向天花板。将铅笔倾斜约 30 度。这是相机的起始位置。用手指旋转笔身,保持倾斜角度和与眼睛的距离。

这篇文章看起来很有帮助:在球体边缘绘制一个点但是,这假设您知道到达初始 x、y 位置的半径。

有人能指出我需要做的数学吗,我的数学生锈得可怕。

4

2 回答 2

1

似乎您想要的是围绕轴旋转矢量,这可以使用旋转矩阵最容易地完成

所以,如果你想要的旋转轴在 zx 平面上从 z 轴倾斜 30 度,你的旋转轴是 (cos(pi/6),0,sin(pi/6)),增加旋转角度,插入即进入旋转矩阵得到矩阵R,新的相机位置向量将为R*(x,y,z)'

于 2013-07-30T09:09:44.780 回答
0

从点 (+-1,0,0)、(0,+-1,0)、(0,0,+-1) 开始。它们形成了两个金字塔,所有点都在单位球面上。

现在您可以取每个三角形的中点,然后将它们投影出来,使它们也位于单位球面上。对于每个三角形,现在这会为您提供 3 个新三角形,您可以重复该过程。

三角形中点的替代方法是取每一边的中点,并将它们连接起来。这给出了可以投影到单位圆的 3 个新点。这为每个细分提供了 4 个三角形。

根据需要重复多次。

于 2013-07-30T08:24:52.840 回答