我正在尝试围绕其焦点旋转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度。这是相机的起始位置。用手指旋转铅笔,保持倾斜角度和眼睛的距离。
这篇帖子看起来很有帮助:Plotting a point on the edge of a sphere但是,这假设您知道到达初始x,y位置的半径。
有人能指出我需要做的数学运算,我的数学非常生疏。
答案 0 :(得分:1)
看起来您想要的是围绕轴旋转矢量,这可以通过rotation matrix
轻松完成因此,如果您想要的旋转轴在zx平面上与z轴倾斜30度,则旋转轴为(cos(pi / 6),0,sin(pi / 6)),增加旋转插入rotation matrix以获取矩阵R,新的相机位置矢量将为R *(x,y,z)'
答案 1 :(得分:0)
从点(+ -1,0,0),(0,+ - 1,0),(0,0,+ - 1)开始。这些形成了两个金字塔,其中包含单位球上的所有点。
现在你可以拍摄每个三角形的中点,然后投射出来,这样它们就会位于单位球体上。对于每个三角形,现在为您提供3个新三角形,您可以重复此过程。
三角形中点的替代方法是取每边的中点,然后将它们连接起来。这提供了3个可以投射到单位圆的新点。这为每个子分区提供了4个三角形。
根据需要重复多次。