调整馆内模型初始化视角
This commit is contained in:
@@ -134,11 +134,29 @@ const SGS_VISUAL_RENDER_CONFIG = {
|
|||||||
} as const
|
} as const
|
||||||
|
|
||||||
const OVERVIEW_INITIAL_CAMERA_PARAMS = {
|
const OVERVIEW_INITIAL_CAMERA_PARAMS = {
|
||||||
position: new THREE.Vector3(496.3356, 708.6058, 137.501),
|
position: new THREE.Vector3(305.4812, 441.3596, 205.0497),
|
||||||
target: new THREE.Vector3(-4.1432, -31.3659, 3.3982),
|
target: new THREE.Vector3(-4.1432, -31.3659, 3.3982),
|
||||||
zoom: 1
|
zoom: 1
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
|
const getIndoorInitialCameraDirection = () => (
|
||||||
|
OVERVIEW_INITIAL_CAMERA_PARAMS.position
|
||||||
|
.clone()
|
||||||
|
.sub(OVERVIEW_INITIAL_CAMERA_PARAMS.target)
|
||||||
|
.normalize()
|
||||||
|
)
|
||||||
|
|
||||||
|
const INDOOR_INITIAL_MODEL_PARAMS = {
|
||||||
|
position: new THREE.Vector3(0, 0, 0),
|
||||||
|
rotation: new THREE.Euler(
|
||||||
|
THREE.MathUtils.degToRad(0),
|
||||||
|
THREE.MathUtils.degToRad(0),
|
||||||
|
THREE.MathUtils.degToRad(0),
|
||||||
|
'XYZ'
|
||||||
|
),
|
||||||
|
scale: new THREE.Vector3(1, 1, 1)
|
||||||
|
} as const
|
||||||
|
|
||||||
const MODEL_ADJUST_IDLE_REPORT_DELAY_MS = 800
|
const MODEL_ADJUST_IDLE_REPORT_DELAY_MS = 800
|
||||||
|
|
||||||
const degToRad = (degrees: number) => THREE.MathUtils.degToRad(degrees)
|
const degToRad = (degrees: number) => THREE.MathUtils.degToRad(degrees)
|
||||||
@@ -3430,7 +3448,7 @@ const fitCameraToObject = (object: THREE.Object3D, preset: CameraPreset = 'obliq
|
|||||||
? new THREE.Vector3(0.02, 1, 0.02)
|
? new THREE.Vector3(0.02, 1, 0.02)
|
||||||
: activeView.value === 'overview'
|
: activeView.value === 'overview'
|
||||||
? new THREE.Vector3(0.76, 0.48, 1)
|
? new THREE.Vector3(0.76, 0.48, 1)
|
||||||
: new THREE.Vector3(0.85, 0.62, 1)
|
: getIndoorInitialCameraDirection()
|
||||||
const overviewFitOptions: CameraFitOptions = activeView.value === 'overview'
|
const overviewFitOptions: CameraFitOptions = activeView.value === 'overview'
|
||||||
? {
|
? {
|
||||||
distanceFactor: 0.9,
|
distanceFactor: 0.9,
|
||||||
@@ -3448,6 +3466,13 @@ const fitCameraToObject = (object: THREE.Object3D, preset: CameraPreset = 'obliq
|
|||||||
setCameraView(center, maxDim, direction, overviewFitOptions)
|
setCameraView(center, maxDim, direction, overviewFitOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const applyIndoorInitialModelTransform = (model: THREE.Object3D) => {
|
||||||
|
model.position.copy(INDOOR_INITIAL_MODEL_PARAMS.position)
|
||||||
|
model.rotation.copy(INDOOR_INITIAL_MODEL_PARAMS.rotation)
|
||||||
|
model.scale.copy(INDOOR_INITIAL_MODEL_PARAMS.scale)
|
||||||
|
model.updateMatrixWorld(true)
|
||||||
|
}
|
||||||
|
|
||||||
const applyOverviewInitialCamera = () => {
|
const applyOverviewInitialCamera = () => {
|
||||||
if (!camera || !controls) return
|
if (!camera || !controls) return
|
||||||
|
|
||||||
@@ -3576,7 +3601,9 @@ const loadOverview = async () => {
|
|||||||
if (!targetScene) throw createStaleModelLoadError()
|
if (!targetScene) throw createStaleModelLoadError()
|
||||||
|
|
||||||
activeModel = cachedOverviewModel
|
activeModel = cachedOverviewModel
|
||||||
|
activeModel.name = 'GuideOverviewModel'
|
||||||
activeModel.visible = true
|
activeModel.visible = true
|
||||||
|
applyIndoorInitialModelTransform(activeModel)
|
||||||
applyModelVisibilityForView(activeModel, 'overview')
|
applyModelVisibilityForView(activeModel, 'overview')
|
||||||
cacheAutoSwitchOverviewMaxDim(activeModel)
|
cacheAutoSwitchOverviewMaxDim(activeModel)
|
||||||
targetScene.add(activeModel)
|
targetScene.add(activeModel)
|
||||||
@@ -3606,6 +3633,7 @@ const loadOverview = async () => {
|
|||||||
activeModel = gltf.scene
|
activeModel = gltf.scene
|
||||||
activeModel.name = 'GuideOverviewModel'
|
activeModel.name = 'GuideOverviewModel'
|
||||||
prepareModel(activeModel)
|
prepareModel(activeModel)
|
||||||
|
applyIndoorInitialModelTransform(activeModel)
|
||||||
applyModelVisibilityForView(activeModel, 'overview')
|
applyModelVisibilityForView(activeModel, 'overview')
|
||||||
cacheAutoSwitchOverviewMaxDim(activeModel)
|
cacheAutoSwitchOverviewMaxDim(activeModel)
|
||||||
cachedOverviewModel = activeModel
|
cachedOverviewModel = activeModel
|
||||||
@@ -3644,6 +3672,7 @@ const prepareFloorScene = async (
|
|||||||
model.name = `GuideFloorModel_${requestedFloorId}`
|
model.name = `GuideFloorModel_${requestedFloorId}`
|
||||||
model.userData.floorId = requestedFloorId
|
model.userData.floorId = requestedFloorId
|
||||||
model.visible = true
|
model.visible = true
|
||||||
|
applyIndoorInitialModelTransform(model)
|
||||||
applyModelVisibilityForView(model, 'floor', requestedFloorId)
|
applyModelVisibilityForView(model, 'floor', requestedFloorId)
|
||||||
} else {
|
} else {
|
||||||
if (!options.suppressProgress) {
|
if (!options.suppressProgress) {
|
||||||
@@ -3668,6 +3697,7 @@ const prepareFloorScene = async (
|
|||||||
model.name = `GuideFloorModel_${requestedFloorId}`
|
model.name = `GuideFloorModel_${requestedFloorId}`
|
||||||
model.userData.floorId = requestedFloorId
|
model.userData.floorId = requestedFloorId
|
||||||
prepareModel(model)
|
prepareModel(model)
|
||||||
|
applyIndoorInitialModelTransform(model)
|
||||||
applyModelVisibilityForView(model, 'floor', requestedFloorId)
|
applyModelVisibilityForView(model, 'floor', requestedFloorId)
|
||||||
cacheAsSharedModel = Boolean(floor.sharedModelAsset)
|
cacheAsSharedModel = Boolean(floor.sharedModelAsset)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user