0

我的数据至少包含 30k 个点,每个点我都想可视化为一个球体,所以我会看到成千上万个球体形成一个形状。我尝试使用 VRML,因为它看起来很简单,但文件变得太大,因为它包含重复的文本波纹管,每个点一个:

# 'X_32228'
Transform {
    translation 96.0 85.0 76.0
    children [
        Shape {
            appearance Appearance { material Material {} }
            geometry Sphere { radius 1 }
        }
    ]
}

如何创建一个球体并将其复制到不同的点?或更一般地说,如何减小输出文件的大小?即使它采用不同的格式(如 X3D)。

4

1 回答 1

1

你可以通过使用PROTO机制来实现你想要的。

PROTO SmallSphere [  
    exposedField SFVec3f SmallSphere_translation 0 0 0  
] 
{  
Transform {
    translation IS SmallSphere_translation
    children [
        Shape {
            appearance Appearance { material Material {} }
            geometry Sphere { radius 1 }
        }
    ]
}

上面的代码基本上从您的转换中创建了一个 PROTO(类似于面向对象编程中的一个类),其中翻译是可变的。然后,您必须按如下方式创建它的实例:

SmallSphere { SmallSphere_translation 96.0 85.0 76.0 }
SmallSphere { SmallSphere_translation 3.0 8.0 6.0 }
SmallSphere { SmallSphere_translation 936.0 385.0 746.0 }

...任意数量,其中翻译是您从一个实例更改为另一个实例的参数。如果您需要使用实例更改其他一些字段,您只需按照上面的示例进行操作。例如,您希望球体的半径是可变的,您必须按如下方式创建您的 PROTO:

PROTO SmallSphere [  
    exposedField SFVec3f SmallSphere_translation 0 0 0  
    exposedField SFFloat SmallSphere_radius 2.0
] 
{  
Transform {
    translation IS SmallSphere_translation
    children [
        Shape {
            appearance Appearance { material Material {} }
            geometry Sphere { radius IS SmallSpehere_radius }
        }
    ]
}

请注意SmallSphere_translationSmallSphere_radius是我选择的名称。您可以根据需要命名这些字段。

于 2017-09-11T22:17:54.690 回答