mirror of
https://github.com/openglobus/openglobus.git
synced 2025-12-08 19:25:27 +00:00
read depth buffer touch event handle
This commit is contained in:
parent
199efb4c48
commit
95f5225154
@ -288,14 +288,14 @@ export class TouchNavigation extends Control {
|
||||
t1.y = (e.sys!.touches.item(1)!.clientY - e.sys!.offsetTop) * handler.pixelRatio;
|
||||
|
||||
const middle = t0.vec.add(t1.vec).scale(0.5);
|
||||
const earthMiddlePoint = this.planet!.getCartesianFromPixelTerrain(
|
||||
const earthMiddlePoint = this.planet!.getCartesianFromPixelEllipsoid(
|
||||
middle
|
||||
);
|
||||
if (earthMiddlePoint) {
|
||||
this.pointOnEarth = earthMiddlePoint
|
||||
this.pointOnEarth = earthMiddlePoint;
|
||||
|
||||
const prevAngle = Math.atan2(t0.prev_y - t1.prev_y, t0.prev_x - t1.prev_x)
|
||||
const curAngle = Math.atan2(t0.y - t1.y, t0.x - t1.x)
|
||||
const prevAngle = Math.atan2(t0.prev_y - t1.prev_y, t0.prev_x - t1.prev_x);
|
||||
const curAngle = Math.atan2(t0.y - t1.y, t0.x - t1.x);
|
||||
|
||||
const deltaAngle = curAngle - prevAngle;
|
||||
const distanceToPointOnEarth = cam.eye.distance(this.pointOnEarth);
|
||||
@ -304,7 +304,6 @@ export class TouchNavigation extends Control {
|
||||
const zoomPrev = t0.vecPrev.sub(t1.vecPrev);
|
||||
let scale = zoomCur.length() / zoomPrev.length();
|
||||
scale = scale > 1.08 ? 1.08 : scale < 0.92 ? 0.92 : scale;
|
||||
|
||||
let d = distanceToPointOnEarth * -(1 - scale);
|
||||
cam.eye.addA(cam.getForward().scale(d));
|
||||
cam.rotateAround(-deltaAngle, false, this.pointOnEarth, this.earthUp!);
|
||||
|
||||
@ -996,8 +996,10 @@ class Renderer {
|
||||
*/
|
||||
public draw() {
|
||||
this.activeCamera!.checkMoveEnd();
|
||||
|
||||
let e = this.events;
|
||||
let pointerEvent = e.pointerEvent();
|
||||
let pointerFree = !e.mouseState.leftButtonDown && !e.mouseState.rightButtonDown;
|
||||
let touchTrigger = e.touchState.touchStart || e.touchState.touchEnd;
|
||||
e.handleEvents();
|
||||
|
||||
let sceneFramebuffer = this.sceneFramebuffer!;
|
||||
@ -1017,8 +1019,7 @@ class Renderer {
|
||||
|
||||
let frustums = this.activeCamera!.frustums;
|
||||
|
||||
let pointerEvent = e.pointerEvent();
|
||||
let pointerFree = !e.mouseState.leftButtonDown && !e.mouseState.rightButtonDown && !e.touchState.touching && !e.touchState.moving;
|
||||
|
||||
|
||||
// Rendering scene nodes and entityCollections
|
||||
let rn = this._renderNodesArr;
|
||||
@ -1046,7 +1047,7 @@ class Renderer {
|
||||
|
||||
e.dispatch(e.drawtransparent, this);
|
||||
|
||||
if (pointerEvent && pointerFree) {
|
||||
if ((pointerEvent && pointerFree) || touchTrigger) {
|
||||
this._drawPickingBuffer(0);
|
||||
}
|
||||
|
||||
@ -1066,7 +1067,7 @@ class Renderer {
|
||||
|
||||
this._drawEntityCollections(i);
|
||||
|
||||
if (pointerEvent && pointerFree) {
|
||||
if ((pointerEvent && pointerFree) || touchTrigger) {
|
||||
this._drawPickingBuffer(i);
|
||||
}
|
||||
|
||||
@ -1080,7 +1081,7 @@ class Renderer {
|
||||
|
||||
this.blitFramebuffer && (sceneFramebuffer as Multisample).blitTo(this.blitFramebuffer, 0);
|
||||
|
||||
if (pointerEvent && pointerFree) {
|
||||
if ((pointerEvent && pointerFree) || touchTrigger) {
|
||||
this._readPickingBuffer();
|
||||
this._readDepthBuffer();
|
||||
}
|
||||
|
||||
@ -337,14 +337,10 @@ class RendererEvents extends Events<RendererEventsType> implements RendererEvent
|
||||
}
|
||||
|
||||
public pointerEvent(): boolean {
|
||||
let ms = this.mouseState,
|
||||
ts = this.touchState;
|
||||
let ms = this.mouseState;
|
||||
return (
|
||||
ms.moving ||
|
||||
ms.justStopped ||
|
||||
ts.moving ||
|
||||
ts.touchStart ||
|
||||
ts.touchEnd ||
|
||||
ms.wheelDelta !== 0
|
||||
)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user