在浏览器中使用ThreeJS或X3DOM参数化和编辑模型

时间:2013-11-08 02:48:26

标签: javascript 3d three.js webgl x3dom

我正在使用ThreeJs在浏览器中呈现一些STL文件。 我试图找出是否可以为这些模型添加参数,以便我可以使用ThreeJs或X3DOM编辑这些模型。 例如,我有一个多维数据集,我想为这个多维数据集添加一个文本参数。 当text参数传递给ThreeJS时,它会将文本压缩到特定位置的多维数据集上。

我不介意将STL文件转换为ThreeJS模型Js文件或X3D文件,只要我可以参数化渲染以将文本添加到基本结构中。

我想知道是否有人有过这种3D参数化的经验。

  1. 这可能在ThreeJS或X3DOM中吗?
  2. 如果是,那么我是否可以使用任何文件来实现这一目标?
  3. 如果这些库无法处理这种情况,那么是否还有其他库可以实现相同的目标?

    编辑 我的问题更多是关于如何向模型本身添加参数。我们可以在ThreeJS模型中拥有参数,ThreeJS可以直接理解这些参数。让我忽略文本示例,如果我在模型文件中考虑一个简单的立方体,是否有办法让Threejs将其边长理解为模型中的参数,并且对该参数的任何更改都会自动反映到可视化中。即如果我将边长从1改为3,则Threejs会渲染出更大的立方体。

2 个答案:

答案 0 :(得分:0)

我不确定它会回答你的问题,但我个人会创建一个空3D对象的子类,并在加载基本模型后以编程方式应用你的效果。

以下是我对three.js的处理方式(理想情况下,这是在一个单独的文件中):

var EmbossedCube = function( text, onLoaded ) {
  THREE.Object3D.apply(this);

  var self = this;
  var loader = new THREE.STLLoader();

  loader.addEventListener( 'load', function ( event ) {
    var material = new THREE.MeshPhongMaterial( { ambient: 0xff5533 } );

    // apply effects on the material, or the geometry
    // according to `text`

    var mesh = new THREE.Mesh( event.content, material );

    // transform the mesh locally if needed

    self.add( mesh );
    onLoaded && onLoaded( self );
  } );

  loader.load( './model.stl' );
};
EmbossedCube.prototype = Object.create( THREE.Object3D.prototype );

// methods of EmbossedCube

EmbossedCube.prototype.constructor = THREE.Object3D;

然后你可以创建这样一个对象,并将其添加到你的场景中:

var cube = new EmbossedCube("beep", function(obj){
  // you can translate/rotate the object if needed
  scene.add( obj );
});

这可能不是最简单的方法,但我认为从长远来看它提供了良好的可重用性。

答案 1 :(得分:0)

探索va3c viewer,其中包含从REVIT,蚱蜢等打开文件的选项。

您可以先尝试在Rhino + GH中打开文件,然后创建所需的参数,然后使用va3c导入它们。

这是一种预感,我不能尝试直到您提供有关用例的详细信息的实际文件。

告诉我这是否有效。 ;)