###前提・実現したいこと
ARでMMDのファイルを出せるようにしたい。
jsartoolkit, three.jsを使って, マーカーにMMDを表示させたい。
###発生している問題・エラーメッセージ
error { target: XMLHttpRequest, isTrusted: true, lengthComputable: false, loaded: 0, total: 0, eventPhase: 0, bubbles: false, cancelable: false, defaultPrevented: false, composed: false, timeStamp: 1496901170109509 } おそらく, onErrorのときのconsole.log()によるもの
###該当のソースコード
JavaScript
1barcode_number = 0; 2 3function set_BarcodeMarkerNumber(number){ 4 barcode_number = number; 5} 6 7window.ARThreeOnLoad = function() { 8 9 ARController.getUserMediaThreeScene({maxARVideoSize: 320, cameraParam: 'Data/camera_para-iPhone 5 rear 640x480 1.0m.dat', 10 onSuccess: function(arScene, arController, arCamera) { 11 12 document.body.className = arController.orientation; 13 14 arController.setPatternDetectionMode(artoolkit.AR_MATRIX_CODE_DETECTION); 15 16 var clock = new THREE.Clock(); 17 18 var renderer = new THREE.WebGLRenderer({antialias: true}); 19 if (arController.orientation === 'portrait') { 20 var w = (window.innerWidth / arController.videoHeight) * arController.videoWidth; 21 var h = window.innerWidth; 22 renderer.setSize(w, h); 23 renderer.domElement.style.paddingBottom = (w-h) + 'px'; 24 } else { 25 if (/Android|mobile|iPad|iPhone/i.test(navigator.userAgent)) { 26 renderer.setSize(window.innerWidth, (window.innerWidth / arController.videoWidth) * arController.videoHeight); 27 } else { 28 renderer.setSize(arController.videoWidth, arController.videoHeight); 29 document.body.className += ' desktop'; 30 } 31 } 32 document.body.insertBefore(renderer.domElement, document.body.firstChild); 33 34 var markerRoot = arController.createThreeBarcodeMarker(20); 35 36 arScene.scene.add(markerRoot); 37 38 // outline 39 40 var effect = new THREE.OutlineEffect(renderer); 41 42 // this is a trick to draw outline correctly(?) 43 arScene.camera.projectionMatrix.elements[15] = 0.001; 44 45 // light 46 47 var ambient = new THREE.AmbientLight( 0x666666 ); 48 arScene.scene.add( ambient ); 49 50 var directionalLight = new THREE.DirectionalLight( 0x887766 ); 51 directionalLight.position.set( -1, 1, 1 ).normalize(); 52 arScene.scene.add( directionalLight ); 53 54 // model, dance, audio 55 56 var modelFile = 'models/mmd/miku/miku_v2.pmd'; 57 var vmdFiles = ['models/mmd/vmds/wavefile_v2.vmd']; 58 var audioFile = 'https://rawgit.com/mrdoob/three.js/dev/examples/models/mmd/audios/wavefile_short.mp3'; 59 var audioParams = {delayTime: 160 * 1 / 30}; 60 61 var onProgress = function(xhr) { 62 if (xhr.lengthComputable) { 63 var percentComplete = xhr.loaded / xhr.total * 100; 64 console.log( Math.round(percentComplete, 2) + '% downloaded' ); 65 } 66 }; 67 68 var onError = function(xhr) { 69 console.error(xhr); 70 console.log("hogehoge"); 71 }; 72 73 var helper = new THREE.MMDHelper(); 74 75 var loader = new THREE.MMDLoader(); 76 //loader.setTextureCrossOrigin('anonymous'); 77 78 var ready = false; 79 80 var mesh, ikHelper, physicsHelper; 81 82 loader.load(modelFile, vmdFiles, function(object){ 83 mesh = object; 84 arScene.add(mesh); 85 helper.add(mesh); 86 helper.setAnimation(mesh); 87 88 ikHelper = new THREE.CDIKHelper(mesh); 89 ikHelper.visible = false; 90 arScene.add(ikHelper); 91 92 helper.setPhysics(mesh); 93 physicsHelper = new THREE.MMDPhysicsHelper(mesh); 94 physicsHelper.visible = false; 95 arScene.add(physicsHelper); 96 97 helper.unifyAnimationDUration(); 98 99 console.log('heyhey'); 100 markerRoot.add(mesh); 101 ready = true; 102 103 }, onProgress, onError); 104 105 /** 106 loader.load(modelFile, vmdFiles, function(object) { 107 mesh = object; 108 helper.add(mesh); 109 helper.setAnimation(mesh); 110 helper.setPhysics(mesh); 111 112 loader.loadAudio(audioFile, function (audio, listener) { 113 listener.position.z = 1; 114 helper.setAudio(audio, listener, audioParams); 115 helper.unifyAnimationDuration(); 116 arScene.scene.add(audio); 117 arScene.scene.add(listener); 118 markerRoot.add(mesh); 119 ready = true; 120 }, onProgress, onError); 121 }, onProgress, onError); 122 **/ 123 124 var tick = function() { 125 arScene.process(); 126 if (ready) { 127 // this is a trick to let Physics go correctly 128 // with scale and rotation setting 129 mesh.scale.set(1.0, 1.0, 1.0); 130 var parent = mesh.parent; 131 parent.remove(mesh); 132 mesh.rotation.x = 0; 133 mesh.updateMatrixWorld(true); 134 135 helper.animate(clock.getDelta()); 136 137 mesh.rotation.x = 60 * Math.PI / 180; 138 mesh.scale.set(0.1, 0.1, 0.1); 139 parent.add(mesh); 140 mesh.updateMatrixWorld(true); 141 } 142 arScene.renderOn(effect); 143 requestAnimationFrame(tick); 144 }; 145 146 tick(); 147 148 }}); 149 150 delete window.ARThreeOnLoad; 151 152}; 153 154if (window.ARController && ARController.getUserMediaThreeScene) { 155 ARThreeOnLoad(); 156} 157
###試したこと
https://takahirox.github.io/mmd-ar/examples/barcode.html
ここのソースコードを利用しているが, ここではモデルのパスが
var model = 'https://rawgit.com/mrdoob/three.js/dev/examples/models/mmd/miku/miku_v2.pmd'
var vmdFiles = ['https://rawgit.com/mrdoob/three.js/dev/examples/models/mmd/vmds/wavefile_v2.vmd']
となっている。これをローカルに変更(上のソースのように)したら, エラーが起きるようになった。
ネットではローカルのファイルを指定するようなものが多いので、うまくいくとおもったがなかなか上手くいかない..。
###補足情報(言語/FW/ツール等のバージョンなど)
Artoolkit5, three.js, MMD
回答1件
あなたの回答
tips
プレビュー