2015-11-04 13 views
9

Voglio inserire una decalcomania all'interno di un segmento di una geometria del tubo (nel backface).three.js - TubeGeometry + DecalGeometry su un segmento del tubo

Il modo in cui lo faccio è utilizzare TubeGeometry come geometria della decalcomania.

Questo è quello che ho: enter image description here

E questo è ciò che voglio: enter image description here (cattivo disegno) Codice

Esempio:

//code 
var tube = new THREE.TubeGeometry(pipelineSpline, 200, 20, 20, closed2); 

tubeMesh = THREE.SceneUtils.createMultiMaterialObject(
     geometry, [ 
      material,  // a phong material 
      materialInside // a material for the inside    
     ]); 

scene.add(tubeMesh); 

var decalGeometry = new THREE.DecalGeometry(
     tubeMesh.children[0], 
     new THREE.Vector3(0,0,0),  //position 
     new THREE.Vector3(0,1,0),  //direction 
     new THREE.Vector3(10,10,10), //dimensions 
     new THREE.Vector3(0,0,0)  //check 
    ); 

Tuttavia questo sembra applica una decalcomania del tubo lungo tutto il percorso della geometria del retro. E lo voglio solo su una parte del BackSide of the Tube sulle posizioni chiave.

Come si può realizzare un'etichetta decimale localizzata in un oggetto TubeGeometry utilizzando THREE.DecalGeometry? È possibile?

risposta

3

Sarà necessario utilizzare un ShaderMaterial per questo, e definire le regole di posizionamento e opacità nel codice shader e le varie uniform (ad esempio, la nuova texture) e parameter (ad esempio, UV) valori passati ad esso per tre. js.

+0

Grazie per la risposta. E non si può fare con l'uso di THREE.DecalGeometry https://github.com/spite/THREE.DecalGeometry? Il migliore è –

+2

Questo non è nella libreria standard :) Un metodo geo-pesante come questo è utile per il set-dressing, ma sarà difficile se le decalcomanie vengono posizionate dinamicamente (ad esempio, quando l'esplosione brucia in un gioco). Solo tu conosci il contesto di cui hai bisogno. – bjorke

+0

Grazie @bjorke Saranno messi all'inizio della scena ... come 10 lungo il tubo e poi saranno statici –