|
@@ -5,7 +5,7 @@ import math from "../utils/math.js";
|
|
|
const geo = new THREE.PlaneBufferGeometry(1,1)
|
|
|
export default class Sprite extends THREE.Mesh{
|
|
|
|
|
|
- constructor(options){
|
|
|
+ constructor(options={}){
|
|
|
super(geo, options.mat || new DepthBasicMaterial(options))/* ({map:options.map, useDepth:options.useDepth})) */
|
|
|
|
|
|
this.root = options.root || this;
|
|
@@ -13,6 +13,8 @@ export default class Sprite extends THREE.Mesh{
|
|
|
this.pickOrder = options.pickOrder || 0
|
|
|
this.sizeInfo = options.sizeInfo
|
|
|
this.dontFixOrient = options.dontFixOrient
|
|
|
+ this.options = options
|
|
|
+ this.lineDir = options.lineDir
|
|
|
|
|
|
this.root.matrixAutoUpdate = false;
|
|
|
this.matrixMap = new Map()
|
|
@@ -104,9 +106,34 @@ export default class Sprite extends THREE.Mesh{
|
|
|
let camera = e.viewport.camera
|
|
|
//rotation
|
|
|
|
|
|
- if(!this.dontFixOrient){ //orthoCamera一般要加dontFixOrient
|
|
|
+ if(!this.dontFixOrient){ //orthoCamera一般要加dontFixOrient
|
|
|
+ let orient2d
|
|
|
+
|
|
|
+ if(this.lineDir){
|
|
|
+ /* let r1 = Potree.Utils.getPos2d(new THREE.Vector3, camera, viewer.renderArea, e.viewport);
|
|
|
+ let r2 = Potree.Utils.getPos2d(this.lineDir, camera, viewer.renderArea, e.viewport); */
|
|
|
+
|
|
|
+ let r1 = Potree.Utils.getPos2d(this.lineDir[0], camera, viewer.renderArea, e.viewport);
|
|
|
+ let r2 = Potree.Utils.getPos2d(this.lineDir[1], camera, viewer.renderArea, e.viewport);
|
|
|
+
|
|
|
+ if(!r1.trueSide || !r2.trueSide){
|
|
|
+ return console.log('!r1.trueSide || !r2.trueSide', )
|
|
|
+ }
|
|
|
+ let p1 = r1.pos, p2 = r2.pos
|
|
|
+ let vec = new THREE.Vector2().subVectors(p1,p2);
|
|
|
+ let angle = vec.angle()
|
|
|
+ let axis = p1.x < p2.x ? 1 : -1
|
|
|
+ orient2d = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0,0,1), axis*angle)
|
|
|
+ console.log(this.parent.text, THREE.Math.radToDeg(angle), axis )
|
|
|
+ }
|
|
|
+
|
|
|
let parentQua = this.root.parent.getWorldQuaternion(new THREE.Quaternion)
|
|
|
this.root.quaternion.multiplyQuaternions(parentQua.invert(),camera.quaternion) //乘上parentQua.invert()是为了中和掉父结点的qua,使只剩下camera.quaternion
|
|
|
+
|
|
|
+ if(this.lineDir){
|
|
|
+ this.root.quaternion.multiply(orient2d)
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//scale
|