質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

Q&A

解決済

1回答

3343閲覧

Three.jsでMMDを表示させようとすると, loader.load(..)でローカルのファイルのMMDが表示できない。

misogil

総合スコア13

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

0グッド

0クリップ

投稿2017/06/08 05:57

###前提・実現したいこと
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanimaru

2017/06/08 06:43

htmlとほかのスクリプトはありませんか?多分file:によるものかとおもいますが、適当にサーバ立ててlocalhostでアクセスしてもダメですか?
misogil

2017/06/08 06:58

python3でローカルにサーバをたててやってみると解決しました。 すごく助かりました。ありがとうございました。
guest

回答1

0

ベストアンサー

pythonとかnodeでサーバー立てられるならば、それが正攻法だと思います。
もっと楽なのは、FireFoxで実行してみると、おそらく起動できたのではと思います。

投稿2017/06/08 07:15

adrs2002

総合スコア203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問