我想用ILNumerics打造一个坚固的盒子。正如我在文档网站上看到的那样,只有一种方法可以制作一个球体对象。我想要一个盒子(立方体)。
我刚读过这个帖子:ILNumerics plot a plane at specific location。然后我有一个想法,使6架飞机然后安排他们作为一个盒子。
但它似乎是一个空盒子。我想要一个坚固的盒子。有什么想法吗? 我将复制此框以使其中许多用于进一步的工作。
答案 0 :(得分:2)
在(几乎没有记录的)ILNumerics.Drawing.Shapes
课程中,您可以找到UnitCubeFilled
形状及其线框版本:
private void ilPanel1_Load(object sender, EventArgs e) {
ilpanel1.Scene.Camera.Add(Shapes.UnitCubeFilled);
ilpanel1.Scene.Camera.Add(Shapes.UnitCubeWireframe);
ilpanel1.Scene.First<ILTriangles>().AutoNormals = false;
ilpanel1.Configure();
}
注意,立方体的所有边共享形状中的仅8个顶点。因此,在所有边缘之间共享和插值照明法线,这将导致任何照明看起来不自然。这就是为什么我通过禁用自动法线创建来停用灯光。
您可以轻松地重复使用这些形状 - 它们的存储由ILNumerics共享。在大型设置中,您可以将多个这些形状放在单个ILGroup
节点下。这些组用于相应地重新定位和旋转形状。
Shapes.UnitCubeFilled
专注于便宜的设置。如果您需要侧面的单独颜色或更好的照明,则需要为每个边缘的各个顶点组装立方体。基本上,人们会做什么:
ILTriangles
形状一个简单的例子如下:
这是前端和右侧的代码。其他方面留作练习......;)
ilpanel1.Scene.Camera.Add(new ILTriangles("tri")
{
Positions = new float[,] {
// front side
{0,0,0},{1,0,0},{1,1,0},
{0,0,0},{1,1,0},{0,1,0},
// right side
{1,0,0},{1,0,-1},{1,1,-1},
{1,0,0},{1,1,-1},{1,1,0},
},
Colors = new float[,] {
// front side
{0,0,1},{0,0,1},{0,0,1},
{0,0,1},{0,0,1},{0,0,1},
// right side
{0,1,0},{0,1,0},{0,1,0},
{0,1,0},{0,1,0},{0,1,0},
}
});
ilpanel1.Configure();