Параметризация и редактирование модели с использованием ThreeJS или X3DOM в браузере
Я использую ThreeJs для рендеринга некоторых файлов STL в браузере. Я пытаюсь выяснить, могу ли я добавить параметры к этим моделям, чтобы я мог редактировать эти модели, используя ThreeJs или X3DOM. Например, у меня есть куб, и я хочу добавить текстовый параметр в этот куб. Когда текстовый параметр передается в ThreeJS, он вставляет текст в куб в определенном месте.
Я не против преобразования файлов STL в Js-файл модели ThreeJS или X3D-файлы, если я могу параметризовать рендеринг для добавления текста в базовую структуру.
Я хочу знать, имел ли кто-нибудь опыт такого рода 3D-параметризации.
- Это возможно в ThreeJS или X3DOM?
- Если да, то есть ли какая-либо документация, которую я мог бы использовать для достижения этой цели?
Если эти библиотеки не могут обработать этот случай, то есть ли другие библиотеки, которые могут достичь того же?
Изменить Мой вопрос больше о том, как я могу добавить параметры к самой модели. Можем ли мы иметь параметры в самих моделях ThreeJS, которые ThreeJS понимает "из коробки"? Позвольте мне игнорировать текстовый пример, если я рассмотрю простой куб в файле модели, есть ли способ заставить Threejs понимать длину его стороны как параметр из модели, и любые изменения этого параметра автоматически отражаются в визуализации. Т.е., если я изменю длину стороны с 1 на 3, Threejs рендерит куб большего размера.
2 ответа
Изучите средство просмотра va3c, в котором есть опции для открытия файлов из REVIT, Grasshopper и т. Д.
Вы можете сначала открыть свои файлы в Rhino + GH, затем создать необходимые параметры и затем импортировать их с помощью va3c.
Это догадка, и я не могу попробовать, пока вы не предоставите фактический файл с подробной информацией о сценарии использования.
Скажи мне, если это работает.;)
Я не уверен, что он отвечает на ваш вопрос, но лично я создал бы подкласс пустого трехмерного объекта и применил бы ваши эффекты программно после загрузки базовой модели.
Вот как я делаю с 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 );
});
Это может быть не самый простой способ сделать это, но я думаю, что он предлагает хорошую возможность многократного использования в долгосрочной перспективе.