123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import * as THREE from "../../libs/three.js/build/three.module.js";
- import {transitions, esing, lerp} from '../utils/transitions.js'
- let texLoader = new THREE.TextureLoader()
- let defaultOpacity = 0.7
- //鼠标指示小圆片
- export default class Reticule extends THREE.Mesh{
- constructor(inputHandler){
- var defaultTex = texLoader.load(Potree.config.urls.localTextures+'whiteCircle.png'/* reticule-256x256.png' */)
- var crosshairTex = texLoader.load(Potree.config.urls.localTextures+'reticule_cross_hair.png')
-
- super(new THREE.PlaneBufferGeometry(0.15,0.15,1,1),new THREE.MeshBasicMaterial({
- side: THREE.DoubleSide ,
- map: defaultTex,
- transparent:true,
- depthTest: !1,
- opacity: defaultOpacity,
- //depthWrite: !1,
- }))
-
-
-
-
- /* new THREE.RawShaderMaterial({
- side: THREE.DoubleSide,
- depthWrite: !1,
- depthTest: !1,
- transparent: !0,
- vertexShader: shaders.waypoint.vertexShader,
- fragmentShader: shaders.waypoint.fragmentShader,
- uniforms: uniform,
- name: "waypoint",
- opacity: 0
- })); */
-
-
-
-
-
- //this.layers.set(0/* RenderLayers.RETICULE */);
- this.renderOrder = 0
-
- this.direction = new THREE.Vector3;
- this.hidden = !0;
- this.mouseLastMoveTime = Date.now();
- inputHandler.addInputListener(this);
- this.addEventListener('mousemove',this.move.bind(this))
-
- this.addEventListener('measureMovePoint',()=>{
- this.material.map = crosshairTex
- })
- this.addEventListener('endMeasureMove',()=>{
- this.material.map = defaultTex
- })
-
-
- }
- move(){
- this.hidden = false,
- this.mouseLastMoveTime = Date.now()
- }
- hide(){
- //console.log("hide Reticule")
- this.hidden || (this.hidden = !0,
- transitions.start(lerp.property(this.material , "opacity", 0), 500))
- }
- show(){
- //console.log("show Reticule")
- this.hidden = !1,
- this.material.opacity <= 0 && transitions.start(lerp.property(this.material, "opacity", defaultOpacity), 300)
- }
- //鼠标静止一段时间它就会消失
- updateVisible(){
- Date.now() - this.mouseLastMoveTime > 1500 && !this.hidden && this.hide()
- }
- updatePosition(intersectPoint, cameraPos ){
- if (!this.hidden) {
- if (!intersectPoint || !intersectPoint.point.normal)
- return //this.hide();
- var i = intersectPoint.location
- , n = cameraPos.distanceTo(i)
- , r = 1 + .01 * n;
- n < 1 && (r -= 1 - n)
-
- let normal = new THREE.Vector3().fromArray(intersectPoint.point.normal)
- this.show();
- this.scale.set(r, r, r);
- this.direction = this.direction.multiplyScalar(.8);
- this.direction.add(normal.clone().multiplyScalar(.2));
- this.position.copy(i).add(normal.clone().multiplyScalar(.01));
- this.lookAt(this.position.clone().add(this.direction));
- }
- }
- }
|