@zeni1agent

Как вывести mmd models из базы данных в three.js?

Мне нужно вывести модель формата pmx, pmd. из базы данных и вывести их в браузере

Но у меня возникло пару проблем с этим так как используя код

из примера
https://threejs.org/examples/webgl_loader_mmd.html

function onProgress( xhr ) {
					if ( xhr.lengthComputable ) {
	               				var percentComplete = xhr.loaded / xhr.total * 100;
						console.log( Math.round( percentComplete, 2 ) + '% downloaded' );
					}}
				var modelFile = 'models/藤原妹紅_物理A.pmd';
				var vmdFiles = [ 'models/Test.vmd' ];
				var helper = new THREE.MMDAnimationHelper( {
					afterglow: 2.0
				} );
				var loader = new THREE.MMDLoader();
				loader.loadWithAnimation( modelFile, vmdFiles, function ( mmd ) {
					var mesh = mmd.mesh;
					mesh.position.y = - 10;
					scene.add( mesh );
					helper.add( mesh, {
						animation: mmd.animation,
						physics: true
					} );
					var ikHelper = helper.objects.get( mesh ).ikSolver.createHelper();
					ikHelper.visible = false;
					scene.add( ikHelper );
					var physicsHelper = helper.objects.get( mesh ).physics.createHelper();
					physicsHelper.visible = false;
					scene.add( physicsHelper );
					initGui();
				}, onProgress, null );
				var phongMaterials;
				var originalMaterials;
				function makePhongMaterials( materials ) {
					var array = [];
					for ( var i = 0, il = materials.length; i < il; i ++ ) {
						var m = new THREE.MeshPhongMaterial();
						m.copy( materials[ i ] );
						m.needsUpdate = true;
						array.push( m );
					}
					phongMaterials = array;
				}
				function initGui() {
					var api = {
						'animation': true,
						'gradient mapping': true,
						'ik': true,
						'outline': true,
						'physics': true,
						'show IK bones': false,
						'show rigid bodies': false
					};
					var gui = new dat.GUI();
					gui.add( api, 'animation' ).onChange( function () {
						helper.enable( 'animation', api[ 'animation' ] );
					} );
					gui.add( api, 'gradient mapping' ).onChange( function () {
						if ( originalMaterials === undefined ) originalMaterials = mesh.material;
						if ( phongMaterials === undefined ) makePhongMaterials( mesh.material );
						if ( api[ 'gradient mapping' ] ) {
							mesh.material = originalMaterials;
						} else {
							mesh.material = phongMaterials;
                                       }} );
					gui.add( api, 'ik' ).onChange( function () {
						helper.enable( 'ik', api[ 'ik' ] );
					} );
					gui.add( api, 'outline' ).onChange( function () {
						effect.enabled = api[ 'outline' ];
					} );
					gui.add( api, 'physics' ).onChange( function () {
						helper.enable( 'physics', api[ 'physics' ] );
					} );
					gui.add( api, 'show IK bones' ).onChange( function () {
						ikHelper.visible = api[ 'show IK bones' ];
					} );
					gui.add( api, 'show rigid bodies' ).onChange( function () {
						if ( physicsHelper !== undefined ) physicsHelper.visible = api[ 'show rigid bodies' ];
					} );
				}

Возникло две проблемы

Как сделать загрузку vmdFiles = [ 'models/Test.vmd' ]; необязательным условием для работы кода

И как лучше загружать текстуры если в бд можно загрузить только файлы поочередно
а код ищет файл основываясь на место положений файла 藤原妹紅_物理A.pmd.
и подгрузив файл по url из базы данных он текстуры найти не сможет

http://localhost/wor/wp-content/uploads/2018/12/藤原...
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы