私の目標は、単一のテクスチャを持つ立方体/ボックスを作成することですが、側面ごとに異なる繰り返し値を作成することです。作業コードは以下のとおりです。
var cubeMaker = function(w,h,d, tName)
{
var g = new THREE.CubeGeometry( 50*w, 50*h, 50*d );
var tx = THREE.ImageUtils.loadTexture( tName );
var ty = THREE.ImageUtils.loadTexture( tName );
var tz = THREE.ImageUtils.loadTexture( tName );
tx.wrapS = tx.wrapT = THREE.RepeatWrapping;
ty.wrapS = ty.wrapT = THREE.RepeatWrapping;
tz.wrapS = tz.wrapT = THREE.RepeatWrapping;
tx.repeat.set(d,h);
ty.repeat.set(w,d);
tz.repeat.set(w,h);
var mx = new THREE.MeshBasicMaterial( {map: tx} );
var my = new THREE.MeshBasicMaterial( {map: ty} );
var mz = new THREE.MeshBasicMaterial( {map: tz} );
var mArray = [mx,mx,my,my,mz,mz];
var m6 = new THREE.MeshFaceMaterial( mArray );
var cube = new THREE.Mesh(g, m6);
return cube;
}
ただ、テクスチャを3回ロードするのはもったいない気がします。前に、次のように、(ファイル名を表す文字列の代わりに) テクスチャを引数として関数に渡そうとしました。
var cubeMaker = function(w,h,d, texture)
{
...
var tx = texture.clone();
var ty = texture.clone();
var tz = texture.clone();
...
しかし、その後、テクスチャはシーンに表示されず、代わりに黒一色の画像のみが表示されました。私の推測では、clone メソッドが呼び出される前にテクスチャ イメージの読み込みが完了しておらず、代わりに何らかの null 値がコピーされた可能性があります。クローン機能が意図したとおりに機能するように、onLoad メソッドを使用して十分な時間待機する方法はありますか?
注: Can't clone() Textureの提案を試しましたが、問題は解決しません。
ご協力ありがとうございます。