我的数据包含至少30k点,其中每一点我想要被视为一个球体,所以我会看到成千上万个球形成一个形状。我尝试使用VRML,因为它看起来非常简单,但是文件太大了,因为它包含了重复的文本,每个点都有一个:
# 'X_32228'
Transform {
translation 96.0 85.0 76.0
children [
Shape {
appearance Appearance { material Material {} }
geometry Sphere { radius 1 }
}
]
}
如何创建一个球体并在不同点上复制?或者更一般,我如何减小输出文件的大小?即使它采用不同的格式(如X3D)。
答案 0 :(得分: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 }
}
]
}
上面的代码基本上是从您的Transform创建一个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_translation 和 SmallSphere_radius 是我选择的名称。您可以根据需要为这些字段命名。