テクスチャの読み込みが完了したら、MeshPhongMaterial を作成します。ただし、テクスチャが読み込まれる前に、メッシュは既に作成されています。this.atmosphere_material はまだ定義されていないため、基本的なマテリアルが使用されます。
ローダー関数で、この問題を引き起こす可能性のあるスコープエラーがあります:
this.loader.load( 'app/textures/atmospheres/earth_1.jpg', function ( texture ) {
this.atmosphere_material = new THREE.MeshPhongMaterial({
map: texture,
color: 10790052,
ambient: 16777215,
emissive: 1381653,
specular: 16777215,
shininess: 5000,
opacity: 0.46,
transparent: true,
wireframe: false
});
});
this.atmosphere_material プロパティが Earth オブジェクトに設定されていません。このコールバックでは、スコープが異なります。以下は、テクスチャをロードする簡単な方法です。
var Earth = function() {
this.planet = new THREE.Object3D();
this.planet_geometry = new THREE.SphereGeometry( 200, 32, 32 );
this.atmosphere = new THREE.Object3D();
this.atmosphere_geometry = new THREE.SphereGeometry( 205, 32, 32 );
this.material = new THREE.MeshPhongMaterial({
map: THREE.ImageUtils.loadTexture( "app/textures/surfaces/earth.jpg" ),
color: 13750737,
ambient: 13092807,
emissive: 595494,
specular: 3223857,
shininess: 25,
opacity: 1,
transparent: false,
wireframe: false,
});
this.surface = new THREE.Mesh( this.planet_geometry, this.material );
this.planet.add(this.surface);
scene.add( this.planet );
this.atmosphere_material = new THREE.MeshPhongMaterial({
map: THREE.ImageUtils.loadTexture( "app/textures/atmospheres/earth_1.jpg" ),
color: 10790052,
ambient: 16777215,
emissive: 1381653,
specular: 16777215,
shininess: 5000,
opacity: 0.46,
transparent: true,
wireframe: false
});
this.surface = new THREE.Mesh( this.atmosphere_geometry, this.atmosphere_material );
this.atmosphere.add(this.surface);
scene.add( this.atmosphere );
}
私はコードをテストしていませんが、正しいはずです。