1

我正在使用 ThreeJs 在浏览器中呈现一些 STL 文件。我试图弄清楚是否可以向这些模型添加参数,以便我可以使用 ThreeJs 或 X3DOM 编辑这些模型。例如,我有一个立方体,我想向这个立方体添加一个文本参数。当 text 参数传递给 ThreeJS 时,它会在立方体上的特定位置浮雕文本。

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

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

  1. 这在 ThreeJS 或 X3DOM 中可行吗?
  2. 如果是,那么是否有任何文档可以用来实现这一目标?

如果这些库无法处理这种情况,那么还有其他库可以实现相同的功能吗?

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

4

2 回答 2

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

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

于 2013-11-08T15:05:57.770 回答
0

探索va3c 查看器,它具有从 REVIT、grasshopper 等打开文件的选项。

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

这是一种预感,在您提供包含用例详细信息的实际文件之前,我无法尝试。

告诉我这是否有效。;)

于 2015-04-05T16:27:04.660 回答