antvis / antvis/L7

ThreeLayer如何在resize事件中进行场景的重渲染调整?

Open
#2,663 2 comments 1 reaction 1 assignee Claimed by @lvisei View on GitHub
question
Dominant language
TypeScript
Stars
4.1k
Forks
656
PR merge metrics
No merged PRs in 30d

Description

### 问题描述

在使用L7叠加一个threejs图层渲染的时候,如果触发窗口的 `resize` 事件,默认情况下,three场景图层中的物体始终保持原来的位置信息。
通过手动调整 `camera.aspect` 和 `renderer.setSize` 方法后才能正确地渲染原有位置关系,但是会产生抖动,有没有更好的解决办法?

### 重现链接

_No response_

### 重现步骤

```javascript
import { Scene } from '@antv/l7';
import { GaodeMap } from '@antv/l7-maps';
import { ThreeLayer, ThreeRender } from '@antv/l7-three';
import * as THREE from 'three';

const scene = new Scene({
id: 'map',
map: new GaodeMap({
pitch: 50,
style: 'light',
center: [104.062427, 30.656733],
zoom: 14,
}),
});

scene.on('loaded', () => {
scene.registerRenderService(ThreeRender);

const threeJSLayer = new ThreeLayer({
enableMultiPassRenderer: false,
onAddMeshes: (threeScene, layer) => {
threeScene.add(new THREE.AmbientLight(0xffffff));
const sunlight = new THREE.DirectionalLight(0xffffff, 1);
sunlight.position.set(0, 80000000, 100000000);
sunlight.matrixWorldNeedsUpdate = true;
threeScene.add(sunlight);

const center = scene.getCenter();

const cubeGeometry = new THREE.BoxGeometry(500, 500, 500);
const cubeMaterial = new THREE.MeshStandardMaterial({ color: 0xff9900, side: THREE.DoubleSide });
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
layer.setObjectLngLat(cube, [center.lng, center.lat], 500);
threeScene.add(cube);

// 重绘图层
window.addEventListener("resize", () => {
const camera = threeJSLayer.getRenderCamera()
camera.aspect = window.innerWidth / window.innerHeight;
layer.threeRenderService.renderer.setSize(window.innerWidth, window.innerHeight)
})
},
}).animate(true)
scene.addLayer(threeJSLayer);
})
```

### 预期行为

resize事件触发时,图层中的物体不产生抖动

### 平台

- 操作系统: Windows
- 网页浏览器: Google Chrome 131.0.6778.265

### 屏幕截图或视频(可选)

未处理前:

![Image](https://github.com/user-attachments/assets/feb851b7-8b68-40f3-b446-781baaf9a25d)

处理后:

![Image](https://github.com/user-attachments/assets/186882be-4de1-4fac-a68b-59c498c99cc9)

### 补充说明(可选)

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.