我正在开发一个c#应用程序,它使用ilpanel来显示iltriangle的3d ILgroup。我尝试设置三个按钮每个按钮都应该修改ilplotcube的方向以显示x-y平面视图,x-z平面视图和y-z视图。
在创建ILPlotcube时,我使用
设置了一个默认的3D(等距)视图pc.Rotation = Matrix4.Rotation(new Vector3(0.5299, 0.2195, 0.8192), 0.9363);
,其中pc是对ILPlotCube对象的引用。如果我用鼠标旋转视图,改变的是什么,摄像头还是立方体?我无法找出如何从ILPlotCube方向的任意位置获得"平面"视图XY(或XZ,或YZ)。我应该如何设置ILPlotCube方向矩阵来实现这个结果?
编辑:更清楚:如果设置旋转矩阵为单位一个,它只工作,如果之前我没有使用鼠标来旋转立方体。如果我使用鼠标,它似乎创建了一种克隆立方体,旋转矩阵等于恒等矩阵,但它仍然显示一个旋转视图
对于渲染,每个面板/驱动程序创建一个场景的同步副本。鼠标交互仅操作同步副本。该副本应用于手动设置绘图多维数据集的方向。
private void button1_Click(object sender, EventArgs e) {
//fetch a reference to the SYNCHRONIZED version of the plot cube
var pc = ilPanel1.SceneSyncRoot.First<ILPlotCube>();
// modify the plot cube rotation on the synched copy!
// several example views - choose yours!
pc.Rotation = Matrix4.Identity; // XY - view (default, double click)
pc.Rotation = Matrix4.Rotation(new Vector3(1, 0, 0), Math.PI * 0.5); // ZX - view
pc.Rotation = Matrix4.Rotation(new Vector3(0, 1, 0), Math.PI * 0.5)
.Rotate(new Vector3(1, 0, 0), Math.PI * 0.5); // XZ - view
pc.Rotation = Matrix4.Rotation(new Vector3(0, 1, 0), Math.PI * 0.5); // ZY - view
ilPanel1.Refresh();
}
如果不画草图,我永远无法真正得到这些旋转的方向。你要检查自己的视角是否正确,并防止从错误的侧面/背面看!
另外,不要与ILCamera.RotateX()
, ILCamera.RotateY()
和ILCamera.RotateZ()
混淆!由于ILCamera
是plot cube的基类,因此它们也可以在plot cube上使用。做类似的事情,但通过添加一个新的旋转到现有的工作,这可能不是你想要的:
// pc.Rotate?(..) rotates the camera iteratively
pc.RotateZ(Math.PI * 0.5); // <- this is another thing! Use pc.Rotation instead!