【问题标题】:Make a solid box (cube) in ILNumerics在 ILNumerics 中制作一个实心盒子(立方体)
【发布时间】:2014-04-28 08:08:14
【问题描述】:

我想用 ILNumerics 制作一个实心盒子。正如我在文档网站中所读到的,只有一种制作球体对象的方法。我想要一个盒子(立方体)。

我刚刚阅读了这个帖子:ILNumerics plot a plane at specific location。然后我有一个想法,制作 6 个平面,然后将它们排列成一个盒子。

但它似乎是一个空盒子。我想要一个坚固的盒子。有什么想法吗? 我将复制此框以制作其中的许多以供进一步工作。

【问题讨论】:

    标签: c# 3d plot cube ilnumerics


    【解决方案1】:

    最简单的解决方案

    在(几乎没有记录的)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 形状开始
    • 给它 24 个顶点:每边 4 个
    • 创建 24 个颜色条目,并为侧面提供单独的颜色信息

    一个简单的例子如下所示:

    这是正面和右侧的代码。其他方面留作练习... ;)

    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();
    

    【讨论】:

    • 是的。这就是我想要的。谢谢老兄。你救了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多