three.js では、ImageUtils を使用してサーバーから直接画像をロードし、JSONLoader を使用してモデルを .js ファイルとしてロードできることは知っていますが、バイト配列から画像とモデルを直接ロードすることは可能ですか? (たとえば、圧縮ファイルをダウンロードし、javascript で抽出し、バイト配列をローダーに直接フィードしますか?)
ありがとう
three.js では、ImageUtils を使用してサーバーから直接画像をロードし、JSONLoader を使用してモデルを .js ファイルとしてロードできることは知っていますが、バイト配列から画像とモデルを直接ロードすることは可能ですか? (たとえば、圧縮ファイルをダウンロードし、javascript で抽出し、バイト配列をローダーに直接フィードしますか?)
ありがとう
わかりました、私は答えを見つけました。
関連するオブジェクトに独自の拡張メソッドを追加することで実行できます。テクスチャの読み込みでは、次のように imageutils に新しいメソッドを追加することで、バイナリ配列を読み込むことができます。
THREE.ImageUtils.prototype.loadTextureBinary = function ( data, mapping, callback ) {
var image = new Image(), texture = new THREE.Texture( image, mapping );
image.onload = function () { texture.needsUpdate = true; if ( callback ) callback( this ); };
image.crossOrigin = this.crossOrigin;
image.src = "data:image/png;base64," + Base64.encode(data);
return texture;
};
文字列 JSON をロードするには、データを抽出して文字列にし、JSONLoader のこの新しい拡張メソッドに渡します。
THREE.JSONLoader.prototype.loadJson = function ( data, callback, texturePath ) {
var worker, scope = this;
texturePath = texturePath ? texturePath : this.extractUrlBase( url );
this.onLoadStart();
var json = JSON.parse( data );
context.createModel( json, callback, texturePath );
};
注: 上記のコードは Three.js r49 用です。新しいバージョンでコードが変更されている場合は、上記のメソッドに追加して準拠してください。