1
This commit is contained in:
98
src/hotspot/HotSpot.ts
Normal file
98
src/hotspot/HotSpot.ts
Normal file
@ -0,0 +1,98 @@
|
||||
import { Point_Pool } from './Point_Pool'
|
||||
import { Point } from './Point'
|
||||
import {
|
||||
AbstractMesh,
|
||||
ArcRotateCamera,
|
||||
Engine,
|
||||
Matrix,
|
||||
Scene,
|
||||
Vector3,
|
||||
Texture,
|
||||
StandardMaterial,
|
||||
MeshBuilder,
|
||||
TransformNode
|
||||
} from '@babylonjs/core'
|
||||
import { HotspotPrams } from './HotspotPrams'
|
||||
import type { MainApp } from '../babylonjs/MainApp'
|
||||
|
||||
class HotSpot {
|
||||
_point_Pool!: Point_Pool
|
||||
body!: HTMLElement
|
||||
_camera!: ArcRotateCamera
|
||||
mainApp!: MainApp
|
||||
hotspotTexture!: Texture
|
||||
hotspotMaterial!: StandardMaterial
|
||||
hotspotContainer!: TransformNode
|
||||
|
||||
vector!: Vector3
|
||||
halfW!: number
|
||||
halfH!: number
|
||||
annotation!: HTMLElement
|
||||
modedl!: AbstractMesh
|
||||
|
||||
|
||||
constructor(mainAPP: MainApp) {
|
||||
this.mainApp = mainAPP
|
||||
}
|
||||
|
||||
Awake() {
|
||||
this._camera = this.mainApp.appCamera.object
|
||||
this._point_Pool = new Point_Pool()
|
||||
|
||||
// 创建热点容器
|
||||
this.hotspotContainer = new TransformNode('hotspotContainer', this.mainApp.appScene.object)
|
||||
}
|
||||
|
||||
|
||||
//创建圆点并且生成事件 类型
|
||||
Point_Event(prams: HotspotPrams) {
|
||||
const iconPath = prams.icon
|
||||
|
||||
// 为每个热点创建独立的材质
|
||||
const texture = new Texture(iconPath, this.mainApp.appScene.object)
|
||||
texture.hasAlpha = true
|
||||
texture.getAlphaFromRGB = false
|
||||
|
||||
|
||||
const material = new StandardMaterial(`hotspotMaterial_${Math.random()}`, this.mainApp.appScene.object)
|
||||
material.diffuseTexture = texture
|
||||
material.emissiveTexture = texture
|
||||
material.opacityTexture = texture
|
||||
material.useAlphaFromDiffuseTexture = true
|
||||
material.transparencyMode = 2 // ALPHABLEND 模式
|
||||
material.disableLighting = true
|
||||
material.backFaceCulling = false
|
||||
|
||||
// 检查纹理是否已加载
|
||||
if (texture.isReady()) {
|
||||
// 纹理已准备好,立即创建热点
|
||||
this.createPointPlane(prams, material)
|
||||
} else {
|
||||
// 纹理未准备好,等待加载完成
|
||||
texture.onLoadObservable.addOnce(() => {
|
||||
this.createPointPlane(prams, material)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 创建点平面的具体实现
|
||||
createPointPlane(prams: HotspotPrams, material: StandardMaterial) {
|
||||
let { position, disposition, onload, onCallBack } = prams
|
||||
let _point = new Point(material, this.hotspotContainer, this.mainApp.appScene.object)
|
||||
_point.init(position, disposition, onload, onCallBack, prams.radius)
|
||||
|
||||
// 将热点添加到热点池中
|
||||
this._point_Pool.Add_point(_point)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Enable_All(visible: boolean) {
|
||||
if (this._point_Pool) {
|
||||
this._point_Pool.Enable_All(visible)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { HotSpot }
|
||||
Reference in New Issue
Block a user