Мне нужно вывести модель формата pmx, pmd. из базы данных и вывести их в браузере
Но у меня возникло пару проблем с этим так как используя код
из примера
https://threejs.org/examples/webgl_loader_mmd.htmlfunction 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/藤原...