我正在使用一个c#应用程序,它使用一个ilpanel来显示一个3d IL组的ILTriangles。我试图设置三个按钮,每个按钮都应修改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方向矩阵以实现此结果?
编辑:更清楚:如果将旋转矩阵设置为标识,只有在我没有使用鼠标旋转立方体之前,它才能工作。如果我使用鼠标,它似乎创建了一种克隆立方体,其旋转矩阵等于标识一,但它仍然可视化旋转的视图。
答案 0 :(得分:0)
用于渲染每个面板/驱动程序创建场景的同步副本。鼠标交互仅操作同步副本。该副本应该用于手动设置绘图立方体的方向。
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
是绘图立方体的基类。做类似的事情,但通过添加一个新的旋转到现有的旋转工作,这可能不是,你想要的:
// pc.Rotate?(..) rotates the camera iteratively
pc.RotateZ(Math.PI * 0.5); // <- this is another thing! Use pc.Rotation instead!