2016-10-12 1 views

Antwort

3

sowie das Sprite, können Sie auch einen Bildschirm Übersetzung tun, wenn Sie es vorziehen, für welchen Gründen auch immer divs zu verwenden.

Wo obj einen object3d ist und Renderer, Kamera definiert sind und verfügbar sind, die X- und Y-Werte aus der Funktion kann an CSS übergeben werden:

function getScreenTranslation (obj) { 

    var vector = new THREE.Vector3(); 
    var widthHalf = 0.5 * renderer.context.canvas.width; 
    var heightHalf = 0.5 * renderer.context.canvas.height; 

    var bbox = new THREE.BoundingBoxHelper(obj, 0xFFFFFF); 

    bbox.update(); 

      bbox.updateMatrixWorld(); 
      bbox.updateMatrix(); 

    vector.setFromMatrixPosition(bbox.matrixWorld); 
    vector.project(camera); 
    vector.x = vector.x * widthHalf + widthHalf; 
    vector.y = -(vector.y * heightHalf) + heightHalf; 
    return { 
      x: vector.x, 
      y: vector.y 
    }; 

};

Je nach Einstellung, wenn sich die Szene ändert und Objekte sich bewegen, müssen Sie die Div-Positionen aktualisieren. Sie können dies mit Kamera oder Steuerelementen tun. Da mein Textbaustein nur die Welt mit Steuereingaben ändert, benutze ich eine Change-Event-Funktion.

Es ist schwierig, hier ein Beispiel zu geben, weil es schwierig ist zu wissen, welche divs Sie verwalten. Aber ich verwalte zum Beispiel ein multidimensionales Array von 3D-Objekten und entsprechenden Beschriftungen in jQuery divs.

Das Array der Struktur: [[div, object3d], [div, object3d], [div, object3d], [div, object3d]]

und das Änderungsereignis auf die Kontrollen führt die folgenden :

 if (labels !== undefined) { 
       for (var i = 0; i < labels.length; i++) { 
         var position = getScreenTranslation(labels[i][1]); 
         labels[i][0].css({ 
           left: position.x, 
           top: position.y 
         }); 
       } 
     } 

bearbeiten Arbeits Geige: https://jsfiddle.net/dpe5r41g/

+0

habe ich versucht, Ihre zu verwenden Methode in dieser Geige. Es bleibt nur in der Mitte: http://fiddle.jshell.net/umairrafiq/b3mvLxk7/7/ –

+1

Entschuldigung für die Verzögerung, habe ich vergessen, einige Matrix-Updates für die Bbox zu tun. Ich habe eine funktionierende Geige gemacht @ https://jsfiddle.net/vvq35tc8/ – Radio

Verwandte Themen