2017-01-03 4 views
2

THREE.js内のプレーンのテクスチャとしてOpenLayersマップを使用したいと考えています。キャンバス要素をプレーンマテリアルのテクスチャとして読み込むことができるので、それを達成するさまざまな方法を試しましたが、成功しませんでした。まず、id=mapでDOMにキャンバス要素を作成します。その後、私はその上にマップを作成:OpenLayers THREE.js平面上のテクスチャとしてのマップ

const layers = [ 
     new ol.layer.Tile({ 
     source: new ol.source.OSM() 
     }) 
    ]; 
    const map = new ol.Map({ 
     layers: layers, 
     target: 'map', 
     view: new ol.View({ 
     center: [-10997148, 4569099], 
     zoom: 4 
     }) 
    }); 

をそして私は次のように私のTHREEシーンにテクスチャとしてマップをロードしようとすると:その際、私は黒のみ飛行機を見ることができます

const texture = new THREE.Texture(canvas); 
texture.needsUpdate = true; 
const material = new THREE.MeshBasicMaterial({ map : texture, }); 
const plane = new THREE.Mesh(geometry, material); 

scene.add(this.plane); 

。シーンの残りの要素は適切にレンダリングされ、2Dキャンバス要素でマップを完全に正確に見ることができます。 OpenLayersマップを使用してキャンバス上にfillRectなどのように描画するのではなく、プレーンがテクスチャをうまく取得できます。私は間違って何をしていますか?マップが完全にロードされた後2phaが示唆したように

+1

ますマップが完全にロードされた後に 'texture.needsUpdate'を設定する必要があります。 – 2pha

答えて

0

(私はOL3三台のR71を使用しています)、私はあなたのようOpenLayersをからpostrenderマップイベントを使用して確保することができ、texture.needsUpdateを設定するために必要な:

map.on('postrender',() => { 
    document.getElementById('map2').children[0].children[0]; 
    const texture = new THREE.Texture(canvas); 
    texture.needsUpdate = true; 
    const material = new THREE.MeshBasicMaterial({ map: texture }); 
    plane = new THREE.Mesh(geometry, material); 
    scene.add(this.plane); 
}); 
+0

"map2"は3つのjに使用されるidですか?また、「キャンバス」はどこに定義されていますか? –

関連する問題