test before mr

This commit is contained in:
mige 2025-07-22 17:46:41 +04:00
parent 7ddb21b350
commit 567b6e9174
3 changed files with 55 additions and 64 deletions

View File

@ -87,24 +87,19 @@ globus.planet.addControl(new control.KeyboardNavigation({
})
);
let toneMappingFramebufferPreview = new control.FramebufferPreview({
title: "toneMappingFramebuffer",
framebuffer: globus.renderer.toneMappingFramebuffer,
flippedUV: true
});
globus.planet.addControl(toneMappingFramebufferPreview);
// let toneMappingFramebufferPreview = new control.FramebufferPreview({
// title: "toneMappingFramebuffer",
// framebuffer: globus.renderer.toneMappingFramebuffer,
// flippedUV: true
// });
// globus.planet.addControl(toneMappingFramebufferPreview);
let pickingFramebufferPreview = new control.FramebufferPreview({
title: "pickingFramebuffer",
framebuffer: globus.renderer.pickingFramebuffer,
flippedUV: true
});
globus.planet.addControl(pickingFramebufferPreview);
globus.planet.addControl(new control.KeyboardNavigation({
camera: depthHandler.camera
}));
// let pickingFramebufferPreview = new control.FramebufferPreview({
// title: "pickingFramebuffer",
// framebuffer: globus.renderer.pickingFramebuffer,
// flippedUV: true
// });
// globus.planet.addControl(pickingFramebufferPreview);
globus.planet.renderer.controls.SimpleSkyBackground.colorOne = "black";
globus.planet.renderer.controls.SimpleSkyBackground.colorTwo = "black";

View File

@ -52,7 +52,7 @@ export interface ICameraDepthHandlerParams extends IControlParams {
export class CameraDepthHandler extends Control {
protected _depthCameraFrameHandler: CameraFrameHandler | null;
protected _frameHandler: CameraFrameHandler | null;
protected _frameComposer: CameraFrameComposer;
public readonly cameraGeoImage: GeoImage;
@ -65,7 +65,7 @@ export class CameraDepthHandler extends Control {
super(params);
this._frameComposer = new CameraFrameComposer();
this._depthCameraFrameHandler = null;
this._frameHandler = null;
this.cameraGeoImage = new GeoImage(`cameraGeoImage:${this.__id}`, {
src: "test4.jpg",
@ -97,8 +97,8 @@ export class CameraDepthHandler extends Control {
}
public get camera(): Camera | undefined {
if (this._depthCameraFrameHandler) {
return this._depthCameraFrameHandler.camera;
if (this._frameHandler) {
return this._frameHandler.camera;
}
}
@ -125,7 +125,7 @@ export class CameraDepthHandler extends Control {
useDepth: true
});
this._depthCameraFrameHandler = new CameraFrameHandler({
this._frameHandler = new CameraFrameHandler({
camera: this._createCamera(),
frameBuffer: depthFramebuffer,
frameHandler: this._depthHandlerCallback
@ -137,7 +137,7 @@ export class CameraDepthHandler extends Control {
this.renderer.addControl(this._frameComposer);
}
this._frameComposer.add(this._depthCameraFrameHandler);
this._frameComposer.add(this._frameHandler);
if (this.planet) {
@ -161,8 +161,8 @@ export class CameraDepthHandler extends Control {
}
public get framebuffer(): Framebuffer | undefined {
if (this._depthCameraFrameHandler) {
return this._depthCameraFrameHandler.frameBuffer;
if (this._frameHandler) {
return this._frameHandler.frameBuffer;
}
}
@ -235,9 +235,9 @@ export class CameraDepthHandler extends Control {
}
public getCartesianFromPixelTerrain(x: number, y: number): Vec3 | undefined {
if (this._depthCameraFrameHandler) {
let framebuffer = this._depthCameraFrameHandler.frameBuffer;
let camera = this._depthCameraFrameHandler.camera;
if (this._frameHandler) {
let framebuffer = this._frameHandler.frameBuffer;
let camera = this._frameHandler.camera;
let distance = getDistanceFromPixel(x, y, camera, framebuffer);
if (distance === 0) {
return;

View File

@ -1105,7 +1105,7 @@ export class Planet extends RenderNode {
let sh = this._setUniformsNoAtmos(cam);
//
// PASS 0: rendering base slice of layers, which is often zero height
this._renderingScreenNodes(sh, cam);
this._renderingScreenNodes(this.quadTreeStrategy, sh, cam);
}
protected _renderScreenNodesPASSAtmos() {
@ -1113,7 +1113,7 @@ export class Planet extends RenderNode {
let sh = this._setUniformsAtmos(cam);
//
// PASS 0: rendering base slice of layers, which is often zero height
this._renderingScreenNodes(sh, cam);
this._renderingScreenNodes(this.quadTreeStrategy, sh, cam);
}
protected _renderScreenNodesWithHeightPASSNoAtmos() {
@ -1121,7 +1121,7 @@ export class Planet extends RenderNode {
let sh = this._setUniformsNoAtmos(cam);
//
// PASS 1: rendering slices, and layers with heights, without transition opacity effect
this._renderingScreenNodesWithHeight(sh, cam);
this._renderingScreenNodesWithHeight(this.quadTreeStrategy, sh, cam);
}
protected _renderScreenNodesWithHeightPASSAtmos() {
@ -1129,7 +1129,7 @@ export class Planet extends RenderNode {
let sh = this._setUniformsAtmos(cam);
//
// PASS 1: rendering slices, and layers with heights, without transition opacity effect
this._renderingScreenNodesWithHeight(sh, cam);
this._renderingScreenNodesWithHeight(this.quadTreeStrategy, sh, cam);
}
protected _globalPreDraw() {
@ -1346,14 +1346,14 @@ export class Planet extends RenderNode {
return sh;
}
protected _renderingFadingNodes = (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outTransparentSegments?: Segment[], outOpaqueSegments?: Segment[]) => {
protected _renderingFadingNodes = (quadTreeStrategy: QuadTreeStrategy, nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outTransparentSegments?: Segment[], outOpaqueSegments?: Segment[]) => {
let isFirstPass = sliceIndex === 0;
let isEq = this.terrain!.equalizeVertices;
for (let j = 0, len = currentNode._fadingNodes.length; j < len; j++) {
let f = currentNode._fadingNodes[j].segment;
if (this.quadTreeStrategy._fadingNodes.has(currentNode._fadingNodes[0].__id) && !nodes.has(f.node.__id)) {
if (quadTreeStrategy._fadingNodes.has(currentNode._fadingNodes[0].__id) && !nodes.has(f.node.__id)) {
nodes.set(f.node.__id, true);
if (f._transitionOpacity < 1.0) {
@ -1372,7 +1372,7 @@ export class Planet extends RenderNode {
}
}
protected _renderingFadingNodesNoDepth = (nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outOpaqueSegments?: Segment[]) => {
protected _renderingFadingNodesNoDepth = (quadTreeStrategy: QuadTreeStrategy, nodes: Map<number, boolean>, sh: Program, currentNode: Node, sl: Layer[], sliceIndex: number, outOpaqueSegments?: Segment[]) => {
let isFirstPass = sliceIndex === 0;
let isEq = this.terrain!.equalizeVertices;
@ -1382,7 +1382,7 @@ export class Planet extends RenderNode {
for (let j = 0, len = currentNode._fadingNodes.length; j < len; j++) {
let f = currentNode._fadingNodes[j].segment;
if (this.quadTreeStrategy._fadingNodes.has(currentNode._fadingNodes[0].__id) && !nodes.has(f.node.__id)) {
if (quadTreeStrategy._fadingNodes.has(currentNode._fadingNodes[0].__id) && !nodes.has(f.node.__id)) {
nodes.set(f.node.__id, true);
if (isFirstPass) {
isEq && f.equalize();
@ -1398,25 +1398,26 @@ export class Planet extends RenderNode {
gl.enable(gl.DEPTH_TEST);
}
protected static __refreshLayersFadingOpacity__(layersRef: Layer[], minCurrZoom: number, maxCurrZoom: number) {
for (let i = layersRef.length - 1; i >= 0; --i) {
let li = layersRef[i];
if (li._fading && li._refreshFadingOpacity(minCurrZoom, maxCurrZoom)) {
layersRef.splice(i, 1);
}
}
}
/**
* Drawing nodes
*/
protected _renderingScreenNodes(sh: Program, cam: PlanetCamera) {
protected _renderingScreenNodes(quadTreeStrategy: QuadTreeStrategy, sh: Program, cam: PlanetCamera) {
let renderedNodes = this.quadTreeStrategy._renderedNodesInFrustum[cam.currentFrustumIndex];
let firstPass = cam.isFirstPass;
let renderedNodes = quadTreeStrategy._renderedNodesInFrustum[cam.currentFrustumIndex];
let sl = this._visibleTileLayerSlices;
if (sl.length) {
let sli = sl[0];
for (let i = sli.length - 1; i >= 0; --i) {
let li = sli[i];
if (li._fading && firstPass && li._refreshFadingOpacity(this.quadTreeStrategy.minCurrZoom, this.quadTreeStrategy.maxCurrZoom)) {
sli.splice(i, 1);
}
}
if (sl.length && cam.isFirstPass) {
Planet.__refreshLayersFadingOpacity__(sl[0], quadTreeStrategy.minCurrZoom, quadTreeStrategy.maxCurrZoom);
}
let nodes = new Map<number, boolean>;
@ -1430,14 +1431,14 @@ export class Planet extends RenderNode {
// as the segments with equalized sides, which means that there are no gaps
// between currently rendered neighbours
//
this.quadTreeStrategy._fadingOpaqueSegments = [];
quadTreeStrategy._fadingOpaqueSegments = [];
if (cam.slope > 0.8 || !this.terrain || this.terrain.isEmpty /*|| cam.getAltitude() > 10000*/) {
while (i--) {
let ri = renderedNodes[i];
let s = ri.segment;
this._renderingFadingNodesNoDepth(nodes, sh, ri, sl[0], 0, this.quadTreeStrategy._fadingOpaqueSegments);
this._renderingFadingNodesNoDepth(quadTreeStrategy, nodes, sh, ri, sl[0], 0, quadTreeStrategy._fadingOpaqueSegments);
isEq && s.equalize();
s.readyToEngage && s.engage();
@ -1452,7 +1453,7 @@ export class Planet extends RenderNode {
let ri = renderedNodes[i];
let s = ri.segment;
this._renderingFadingNodes(nodes, sh, ri, sl[0], 0, transparentSegments, this.quadTreeStrategy._fadingOpaqueSegments);
this._renderingFadingNodes(quadTreeStrategy, nodes, sh, ri, sl[0], 0, transparentSegments, quadTreeStrategy._fadingOpaqueSegments);
if (s._transitionOpacity < 1) {
transparentSegments.push(s);
@ -1474,17 +1475,13 @@ export class Planet extends RenderNode {
tj.screenRendering(sh, sl[0], 0);
}
}
}
protected _renderingScreenNodesWithHeight(sh: Program, cam: PlanetCamera) {
protected _renderingScreenNodesWithHeight(quadTreeStrategy: QuadTreeStrategy, sh: Program, cam: PlanetCamera) {
let renderedNodes = this.quadTreeStrategy._renderedNodesInFrustum[cam.currentFrustumIndex];
let renderedNodes = quadTreeStrategy._renderedNodesInFrustum[cam.currentFrustumIndex];
let gl = this.renderer!.handler.gl!;
let firstPass = cam.isFirstPass;
let sl = this._visibleTileLayerSlices;
gl.enable(gl.POLYGON_OFFSET_FILL);
gl.disable(gl.CULL_FACE);
@ -1492,20 +1489,19 @@ export class Planet extends RenderNode {
let nodes = new Map<number, boolean>;
let transparentSegments: Segment[] = [];
let sl = this._visibleTileLayerSlices;
for (let j = 1, len = sl.length; j < len; j++) {
let slj = sl[j];
for (let i = slj.length - 1; i >= 0; --i) {
let li = slj[i];
if (li._fading && firstPass && li._refreshFadingOpacity(this.quadTreeStrategy.minCurrZoom, this.quadTreeStrategy.maxCurrZoom)) {
slj.splice(i, 1);
}
if (cam.isFirstPass) {
Planet.__refreshLayersFadingOpacity__(sl[j], quadTreeStrategy.minCurrZoom, quadTreeStrategy.maxCurrZoom);
}
gl.polygonOffset(0, -j);
let i = renderedNodes.length;
while (i--) {
let ri = renderedNodes[i];
this._renderingFadingNodes(nodes, sh, ri, sl[j], j, transparentSegments);
this._renderingFadingNodes(quadTreeStrategy, nodes, sh, ri, sl[j], j, transparentSegments);
if (ri.segment._transitionOpacity < 1) {
ri.segment.initSlice(j);
} else {