[auto] stub out empty AR scene to remove three.js dependency
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>main
parent
9390be7f1a
commit
6f5d7381b4
|
|
@ -1,58 +1,17 @@
|
||||||
import * as THREE from 'three'
|
|
||||||
|
|
||||||
export interface ARState {
|
export interface ARState {
|
||||||
renderer: THREE.WebGLRenderer
|
canvas: HTMLCanvasElement
|
||||||
scene: THREE.Scene
|
|
||||||
camera: THREE.PerspectiveCamera
|
|
||||||
logFrame: number
|
|
||||||
}
|
|
||||||
|
|
||||||
function computeVFov(hfovDeg: number, aspect: number): number {
|
|
||||||
const hfovRad = hfovDeg * Math.PI / 180
|
|
||||||
return 2 * Math.atan(Math.tan(hfovRad / 2) / aspect) * 180 / Math.PI
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createARScene(
|
export function createARScene(
|
||||||
canvas: HTMLCanvasElement,
|
canvas: HTMLCanvasElement,
|
||||||
width: number,
|
_width: number,
|
||||||
height: number,
|
_height: number,
|
||||||
hfov: number,
|
_hfov: number,
|
||||||
heightOffset: number,
|
_heightOffset: number,
|
||||||
): ARState {
|
): ARState {
|
||||||
const renderer = new THREE.WebGLRenderer({
|
return { canvas }
|
||||||
canvas,
|
|
||||||
alpha: true,
|
|
||||||
antialias: true,
|
|
||||||
premultipliedAlpha: false,
|
|
||||||
})
|
|
||||||
renderer.setSize(width, height)
|
|
||||||
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
|
|
||||||
renderer.setClearColor(0x000000, 0)
|
|
||||||
|
|
||||||
const scene = new THREE.Scene()
|
|
||||||
|
|
||||||
const aspect = width / height
|
|
||||||
const vfov = computeVFov(hfov, aspect)
|
|
||||||
|
|
||||||
const camera = new THREE.PerspectiveCamera(vfov, aspect, 0.01, 100)
|
|
||||||
camera.position.set(0, heightOffset + 0.75, 0)
|
|
||||||
camera.lookAt(0, 0, -5)
|
|
||||||
|
|
||||||
return { renderer, scene, camera, logFrame: 0 }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateARScene(state: ARState) {
|
export function updateARScene(_state: ARState) {}
|
||||||
state.logFrame++
|
|
||||||
state.renderer.render(state.scene, state.camera)
|
|
||||||
}
|
|
||||||
|
|
||||||
export function disposeARScene(state: ARState) {
|
export function disposeARScene(_state: ARState) {}
|
||||||
state.renderer.dispose()
|
|
||||||
state.scene.traverse((obj) => {
|
|
||||||
if (obj instanceof THREE.Mesh || obj instanceof THREE.Line) {
|
|
||||||
obj.geometry.dispose()
|
|
||||||
const mats = Array.isArray(obj.material) ? obj.material : [obj.material]
|
|
||||||
mats.forEach((m) => m.dispose())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue