2016-09-20 18 views
0

私は球形の画像を3Dで作成しています(下図参照)。また、重なっている平面図(ラベル)を追加しました。 three.jsライブラリを使用してラベルをどのように分けることができますか? enter image description here2JavaScriptでラベルが重複しないようにするにはどうすればよいですか?

labelBox.prototype.update = function() 
{ 

camera.updateMatrixWorld(); 
this.position.project(camera); 

var screenvector = new THREE.Vector3(); 
screenvector.copy(this.position); 
oldlabelpos.push(screenvector); 
//this.position.normalize(); 

this.posx = Math.round((this.position.x + 1)* this.domElement.offsetWidth/2 + webglviewport.left); 
this.posy = Math.round((1 - this.position.y)* this.domElement.offsetHeight/2); 

var boundingRect = this.box.getBoundingClientRect(); //getBoundingClientRect() method returns the 
               //size of element (here it is box) and its position relative to viewport 
//update the box overlays position 
this.box.style.left = this.posx + 'px'; 
this.box.style.top = this.posy + 'px'; 

this.occludeLabel(this.box, this.marker); 
}; 

labelBox.prototype.LabelUpdateFn = function() 
{  
    //var labels = 

のdocument.getElementById( 'MovingLabel1'); //のgetElementsByClassName( 'spritelabel'); //ラベル= $(ルート).find( ".spritelabel");

for(var k=0; k<oldlabelpos.length; k++) 
     { 
      this.reposition = new THREE.Vector3(); 
      this.reposition = convertlatlonToVec3(oldlabelpos[k].x, 
      oldlabelpos[k].y).multiplyScalar(radius); 
      this.reposition.normalize(); 

      camera.updateMatrixWorld(); 
      this.reposition.unproject(camera); 

      this.newposx = Math.round((this.reposition.x + 1)* 
      this.domElement.offsetWidth/2 + webglviewport.left) - this.posx; 
      this.newposy = Math.round((1 - this.reposition.y)* 
      this.domElement.offsetHeight/2) - this.posy; 

      var boundingRect = this.box.getBoundingClientRect(); 

      this.box.style.left = (this.newposx + boundingRect.width) + 'px'; 
      this.box.style.top = this.newposy + 'px'; 

      //$(this.box).css(left) = 

      this.occludeLabel(this.box, this.marker); 
      //var updatedpos = {updateposx, updateposy}; 

      //newlabelpos.push(updatedpos);    
     }      
} 

答えて

1

3Dで「ラベルの重なりを避ける」と言う場合は、ビューポートの「クリッピング」をチェックアウトする必要があります。 例としては次を参照article

関連する問題