mirror of
https://github.com/jiawanlong/Cesium-Examples.git
synced 2025-07-05 23:57:32 +00:00
564 lines
17 KiB
JavaScript
564 lines
17 KiB
JavaScript
![]() |
import { windData } from './WindData.js'
|
|||
|
|
|||
|
function RenderDynamicWind(viewer, Cesium) {
|
|||
|
this.particles = []
|
|||
|
this.particleCount = []
|
|||
|
this._height = undefined
|
|||
|
this._field = undefined
|
|||
|
this._scale = 1.0 //生成粒子的缩放因子
|
|||
|
this._imageMask = undefined
|
|||
|
this._particleNum = undefined
|
|||
|
this._mapCenter = undefined
|
|||
|
this._mapScale = undefined
|
|||
|
this._windowWidth = undefined
|
|||
|
this._windowHeight = undefined
|
|||
|
this._bounds = {
|
|||
|
x: 0,
|
|||
|
y: 0,
|
|||
|
xMax: 0,
|
|||
|
yMax: 0,
|
|||
|
width: 0,
|
|||
|
height: 0
|
|||
|
}
|
|||
|
this._viewer = viewer
|
|||
|
this._cancel = false
|
|||
|
this._centerPnt = new Cesium.Cartographic()
|
|||
|
this._timerOut = null
|
|||
|
this.animationLoop
|
|||
|
|
|||
|
this.densityScale = window.densityScale || 0.8 //密度比例系数
|
|||
|
this.velocityScale = window.velocityScale || 0.6 //速度比例系数
|
|||
|
this.builder = null
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.parseData = function (data) {
|
|||
|
this.uvData = data
|
|||
|
}
|
|||
|
|
|||
|
RenderDynamicWind.prototype.Render = function () {
|
|||
|
var scene = this._viewer.scene
|
|||
|
var renderObject = this
|
|||
|
renderObject.start = true
|
|||
|
renderObject._height = scene.camera.positionCartographic.height
|
|||
|
renderObject.velocityScale_o = renderObject.getVelocityScaleByHeight(
|
|||
|
renderObject._height
|
|||
|
)
|
|||
|
renderObject._isRender = true
|
|||
|
renderObject._scale = renderObject.getScaleByHeight(renderObject._height)
|
|||
|
renderObject.reCreate(renderObject)
|
|||
|
scene.camera.moveEnd.addEventListener(function () {
|
|||
|
renderObject._scale = renderObject.getScaleByHeight(renderObject._height)
|
|||
|
if (!renderObject.start) return
|
|||
|
//获取当前相机高度
|
|||
|
renderObject.start1 = true
|
|||
|
//获取当前相机高度
|
|||
|
renderObject._height = scene.camera.positionCartographic.height
|
|||
|
var newCenter = scene.camera.positionCartographic
|
|||
|
if (newCenter != renderObject._centerPnt) {
|
|||
|
// 添加延迟计算,尝试提升移动地球的流畅度
|
|||
|
if (renderObject._timerOut) {
|
|||
|
clearTimeout(renderObject._timerOut)
|
|||
|
renderObject._timerOut = null
|
|||
|
}
|
|||
|
|
|||
|
renderObject._timerOut = setTimeout(() => {
|
|||
|
renderObject.velocityScale_o = renderObject.getVelocityScaleByHeight(
|
|||
|
renderObject._height
|
|||
|
)
|
|||
|
renderObject.reCreate(renderObject)
|
|||
|
if (renderObject._height > 14125162)
|
|||
|
renderObject._isRender = true
|
|||
|
renderObject._scale = renderObject.getScaleByHeight(newCenter.height)
|
|||
|
renderObject.particles = []
|
|||
|
renderObject.particleCount = Math.round(
|
|||
|
renderObject._windowHeight *
|
|||
|
windData.PARTICLE_MULTIPLIER *
|
|||
|
renderObject._windowWidth *
|
|||
|
renderObject._scale
|
|||
|
)
|
|||
|
if (renderObject._field != null) {
|
|||
|
for (var i = 0; i < renderObject.particleCount; i++) {
|
|||
|
if (!renderObject.start1) {
|
|||
|
i = renderObject.particleCount - 1
|
|||
|
return
|
|||
|
}
|
|||
|
renderObject.particles.push(
|
|||
|
renderObject._field.randomize({
|
|||
|
age: windData.random(0, windData.MAX_PARTICLE_AGE)
|
|||
|
})
|
|||
|
)
|
|||
|
}
|
|||
|
}
|
|||
|
}, 10)
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
scene.camera.moveStart.addEventListener(function () {
|
|||
|
//获取当前相机高度
|
|||
|
var newCenter = scene.camera.positionCartographic
|
|||
|
if (newCenter != renderObject._centerPnt) {
|
|||
|
if (renderObject._field != null) {
|
|||
|
renderObject._field.release()
|
|||
|
}
|
|||
|
renderObject.start1 = false
|
|||
|
renderObject._isRender = false
|
|||
|
if (renderObject._imageG) {
|
|||
|
renderObject._imageG.clearRect(
|
|||
|
0,
|
|||
|
0,
|
|||
|
renderObject._windowWidth,
|
|||
|
renderObject._windowHeight
|
|||
|
)
|
|||
|
renderObject._g.clearRect(
|
|||
|
0,
|
|||
|
0,
|
|||
|
renderObject._windowWidth,
|
|||
|
renderObject._windowHeight
|
|||
|
)
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
var colorStyles = windData.windIntensityColorScale(
|
|||
|
windData.INTENSITY_SCALE_STEP,
|
|||
|
windData.maxIntensity
|
|||
|
)
|
|||
|
var buckets = colorStyles.map(function () {
|
|||
|
return []
|
|||
|
})
|
|||
|
function evolve() {
|
|||
|
buckets.forEach(function (bucket) {
|
|||
|
bucket.length = 0
|
|||
|
})
|
|||
|
renderObject.particles.forEach(function (particle) {
|
|||
|
if (particle.age > windData.MAX_PARTICLE_AGE) {
|
|||
|
renderObject._field.randomize(particle).age = 0
|
|||
|
}
|
|||
|
var x = particle.x
|
|||
|
var y = particle.y
|
|||
|
var v = renderObject._field(x, y) // vector at current position
|
|||
|
var m = v[2]
|
|||
|
if (m === null) {
|
|||
|
particle.age = windData.MAX_PARTICLE_AGE // particle has escaped the grid, never to return...
|
|||
|
} else {
|
|||
|
var xt = x + v[0] * windData.WindScale
|
|||
|
var yt = y + v[1] * windData.WindScale
|
|||
|
if (renderObject._field.isDefined(xt, yt)) {
|
|||
|
// Path from (x,y) to (xt,yt) is visible, so add this particle to the appropriate draw bucket.
|
|||
|
particle.xt = xt
|
|||
|
particle.yt = yt
|
|||
|
buckets[colorStyles.indexFor(m)].push(particle)
|
|||
|
} else {
|
|||
|
// Particle isn't visible, but it still moves through the field.
|
|||
|
particle.x = xt
|
|||
|
particle.y = yt
|
|||
|
}
|
|||
|
}
|
|||
|
particle.age += 1
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
function draw() {
|
|||
|
if (!renderObject.start) return
|
|||
|
|
|||
|
var g = renderObject._g
|
|||
|
if (g == null || renderObject._imageMask == null) {
|
|||
|
return
|
|||
|
}
|
|||
|
var bounds = renderObject._bounds
|
|||
|
|
|||
|
var prev = g.globalCompositeOperation
|
|||
|
g.globalCompositeOperation = 'destination-in'
|
|||
|
g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height)
|
|||
|
//g.putImageData(renderObject._imageMask.imageData,0,0)
|
|||
|
g.globalCompositeOperation = prev
|
|||
|
|
|||
|
g.lineWidth = renderObject.lineWidth || 1
|
|||
|
|
|||
|
// Draw new particle trails.
|
|||
|
buckets.forEach(function (bucket, i) {
|
|||
|
if (bucket.length > 0) {
|
|||
|
g.beginPath()
|
|||
|
g.strokeStyle = colorStyles[i]
|
|||
|
bucket.forEach(function (particle) {
|
|||
|
g.moveTo(particle.x, particle.y)
|
|||
|
g.lineTo(particle.xt, particle.yt)
|
|||
|
particle.x = particle.xt
|
|||
|
particle.y = particle.yt
|
|||
|
})
|
|||
|
g.stroke()
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
;(function frame() {
|
|||
|
evolve()
|
|||
|
draw()
|
|||
|
|
|||
|
if (renderObject.start) {
|
|||
|
renderObject.animationLoop = requestAnimationFrame(frame)
|
|||
|
}
|
|||
|
})()
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.zoom = function (renderObject) {
|
|||
|
var width = renderObject._viewer.scene.canvas.clientWidth
|
|||
|
var height = renderObject._viewer.scene.canvas.clientHeight
|
|||
|
renderObject._windowWidth = width
|
|||
|
renderObject._windowHeight = height
|
|||
|
renderObject._bounds.xMax = width
|
|||
|
renderObject._bounds.yMax = height
|
|||
|
renderObject._bounds.width = width
|
|||
|
renderObject._bounds.height = height
|
|||
|
if (renderObject._field != null) {
|
|||
|
renderObject._field.release()
|
|||
|
}
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.reCreate = function (renderObject) {
|
|||
|
this.zoom(renderObject)
|
|||
|
var scene = this._viewer.scene
|
|||
|
var canvas = scene.canvas
|
|||
|
var camera = scene.camera
|
|||
|
var params = {}
|
|||
|
params.clientWidth = canvas.clientWidth
|
|||
|
params.clientHeight = canvas.clientHeight
|
|||
|
params.viewMatrix = camera.viewMatrix
|
|||
|
params.projectionMatrix = camera.frustum.projectionMatrix
|
|||
|
params.fovy = camera.frustum.fovy
|
|||
|
params.aspectRatio = camera.frustum.aspectRatio
|
|||
|
params.near = camera.frustum.near
|
|||
|
params.positionWC = camera.positionWC
|
|||
|
params.directionWC = camera.directionWC
|
|||
|
params.rightWC = camera.rightWC
|
|||
|
params.upWC = camera.upWC
|
|||
|
params.center = renderObject._centerPnt
|
|||
|
params.bounds = renderObject._bounds
|
|||
|
params.uvData = this.uvData
|
|||
|
params.velocityScale_o = renderObject.velocityScale_o
|
|||
|
const data = renderObject.dealData(renderObject, params)
|
|||
|
renderObject.setData(renderObject, data)
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.dealData = (renderObject, params) => {
|
|||
|
const that = renderObject
|
|||
|
if (!that.builder) {
|
|||
|
let uvData = params.uvData
|
|||
|
let [header, uData, vData] = uvData
|
|||
|
that.builder = new windData.buildGrid({
|
|||
|
header,
|
|||
|
data: function (i) {
|
|||
|
return [uData[i], vData[i]]
|
|||
|
},
|
|||
|
interpolate: windData.bilinearInterpolateVector
|
|||
|
})
|
|||
|
}
|
|||
|
if (params.velocityScale_o) windData.velocityScale_o = params.velocityScale_o
|
|||
|
let result = windData.reCreate(params, that.builder, true)
|
|||
|
let data = {
|
|||
|
params,
|
|||
|
columns: result.columns,
|
|||
|
pixels: result.mask.imageData
|
|||
|
}
|
|||
|
return data
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.setData = (renderObject, e) => {
|
|||
|
const that = renderObject
|
|||
|
var bounds = e.params.bounds
|
|||
|
var columns = e.columns
|
|||
|
var maskImageData = e.pixels
|
|||
|
var mask = maskImageData
|
|||
|
that._imageMask = mask
|
|||
|
that._field = windData.createField(columns, bounds, false)
|
|||
|
|
|||
|
//lxl发现粒子在原位置时没生成,移到此位置
|
|||
|
|
|||
|
that.particleCount = Math.round(
|
|||
|
e.params.clientHeight *
|
|||
|
e.params.clientWidth *
|
|||
|
windData.PARTICLE_MULTIPLIER *
|
|||
|
that._scale
|
|||
|
)
|
|||
|
|
|||
|
if (that._field != null) {
|
|||
|
for (var i = 0; i < that.particleCount; i++) {
|
|||
|
that.particles.push(
|
|||
|
that._field.randomize({
|
|||
|
age: windData.random(0, windData.MAX_PARTICLE_AGE)
|
|||
|
})
|
|||
|
)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var canvas, canvasOverLay
|
|||
|
if (document.getElementById('fullScreen')) {
|
|||
|
canvas = document.getElementById('fullScreen')
|
|||
|
canvasOverLay = document.getElementById('image-canvas')
|
|||
|
} else {
|
|||
|
canvasOverLay = document.createElement('CANVAS')
|
|||
|
// document.body.appendChild(canvasOverLay);
|
|||
|
that._viewer.container.appendChild(canvasOverLay)
|
|||
|
canvasOverLay.id = 'image-canvas'
|
|||
|
canvasOverLay.width = bounds.width
|
|||
|
canvasOverLay.height = bounds.height
|
|||
|
canvasOverLay.style.position = 'absolute'
|
|||
|
canvasOverLay.style.top = 0
|
|||
|
canvasOverLay.style.left = 0
|
|||
|
canvasOverLay.style.zIndex = 100
|
|||
|
canvasOverLay.style.pointerEvents = 'none'
|
|||
|
|
|||
|
canvas = document.createElement('CANVAS')
|
|||
|
// document.body.appendChild(canvas);
|
|||
|
that._viewer.container.appendChild(canvas)
|
|||
|
canvas.id = 'fullScreen'
|
|||
|
canvas.style.position = 'absolute'
|
|||
|
canvas.style.top = 0
|
|||
|
canvas.style.left = 0
|
|||
|
canvas.style.zIndex = 100
|
|||
|
canvas.style.pointerEvents = 'none'
|
|||
|
canvas.width = bounds.width
|
|||
|
canvas.height = bounds.height
|
|||
|
}
|
|||
|
var g = canvas.getContext('2d')
|
|||
|
g.clearRect(0, 0, canvas.width, canvas.height)
|
|||
|
|
|||
|
that._lineCanvas = canvas
|
|||
|
that._lineCanvas.style.display = 'block'
|
|||
|
that._g = g
|
|||
|
that._g.lineWidth = that.lineWidth || 1
|
|||
|
that._g.fillStyle = windData.fadeFillStyle
|
|||
|
|
|||
|
var gOverlay = canvasOverLay.getContext('2d')
|
|||
|
gOverlay.clearRect(0, 0, canvasOverLay.width, canvasOverLay.height)
|
|||
|
|
|||
|
that._imageCanvas = canvasOverLay
|
|||
|
that._imageCanvas.style.display = 'block'
|
|||
|
that._imageG = gOverlay
|
|||
|
}
|
|||
|
|
|||
|
//根据分辨率、视野面积、高度获取例子流动速度
|
|||
|
RenderDynamicWind.prototype.getVelocityScaleByHeight = function (height) {
|
|||
|
let extent = this.getCurrentExtent()
|
|||
|
let mapBounds = {
|
|||
|
south: this.deg2rad(extent[1]),
|
|||
|
north: this.deg2rad(extent[3]),
|
|||
|
east: this.deg2rad(extent[2]),
|
|||
|
west: this.deg2rad(extent[0])
|
|||
|
}
|
|||
|
let mapArea =
|
|||
|
(mapBounds.south - mapBounds.north) * (mapBounds.west - mapBounds.east)
|
|||
|
|
|||
|
let scale = 0.0008 * this.velocityScale
|
|||
|
if (height < 650000) scale = 0.00018 * this.velocityScale
|
|||
|
let velocityScale_o =
|
|||
|
scale *
|
|||
|
(Math.pow(window.devicePixelRatio, 1 / 3) || 1) *
|
|||
|
Math.pow(mapArea, 0.2)
|
|||
|
|
|||
|
return velocityScale_o
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.computeDistance = function (
|
|||
|
newCenter,
|
|||
|
oldCenter,
|
|||
|
statues
|
|||
|
) {
|
|||
|
let w_newCenter
|
|||
|
let w_oldCenter
|
|||
|
let distance = 0
|
|||
|
if (statues) {
|
|||
|
w_newCenter = Cesium.Cartesian3.fromDegrees(
|
|||
|
newCenter.longitude,
|
|||
|
newCenter.latitude,
|
|||
|
0
|
|||
|
)
|
|||
|
w_oldCenter = Cesium.Cartesian3.fromDegrees(
|
|||
|
oldCenter.longitude,
|
|||
|
oldCenter.latitude,
|
|||
|
0
|
|||
|
)
|
|||
|
distance = Cesium.Cartesian3.distance(w_newCenter, w_oldCenter)
|
|||
|
} else {
|
|||
|
distance = Math.abs(Number(newCenter.height) - Number(oldCenter.height))
|
|||
|
}
|
|||
|
return distance
|
|||
|
}
|
|||
|
// 通过高度获取比例
|
|||
|
RenderDynamicWind.prototype.getScaleByHeight = function (height) {
|
|||
|
const baseMaxHeight = 14125162
|
|||
|
if (height < 550000) this.densityScale = 0.25
|
|||
|
let _scale
|
|||
|
if (height > baseMaxHeight) {
|
|||
|
_scale = 0.25 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * 0.8) {
|
|||
|
_scale = 0.25 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.8, 2)) {
|
|||
|
_scale = 0.225 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 3)) {
|
|||
|
_scale = 0.2 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 4)) {
|
|||
|
_scale = 0.09 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 5)) {
|
|||
|
_scale = 0.07 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 6)) {
|
|||
|
_scale = 0.065 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 7)) {
|
|||
|
_scale = 0.04 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 8)) {
|
|||
|
_scale = 0.03 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 9)) {
|
|||
|
_scale = 0.02 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 10)) {
|
|||
|
_scale = 0.015 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 11)) {
|
|||
|
_scale = 0.01 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 12)) {
|
|||
|
_scale = 0.005 * this.densityScale
|
|||
|
} else if (height > baseMaxHeight * Math.pow(0.5, 13)) {
|
|||
|
_scale = 0.0025 * this.densityScale
|
|||
|
} else {
|
|||
|
_scale = 0.00005 * this.densityScale
|
|||
|
}
|
|||
|
return _scale
|
|||
|
}
|
|||
|
|
|||
|
RenderDynamicWind.prototype.getCurrentExtent = function () {
|
|||
|
let _self = this
|
|||
|
//获取当前三维地图范围
|
|||
|
var Rectangle = _self._viewer.camera.computeViewRectangle()
|
|||
|
//地理坐标(弧度)转经纬度坐标
|
|||
|
var extent = [
|
|||
|
(Rectangle.west / Math.PI) * 180,
|
|||
|
(Rectangle.south / Math.PI) * 180,
|
|||
|
(Rectangle.east / Math.PI) * 180,
|
|||
|
(Rectangle.north / Math.PI) * 180
|
|||
|
]
|
|||
|
return extent
|
|||
|
}
|
|||
|
|
|||
|
RenderDynamicWind.prototype.deg2rad = function (deg) {
|
|||
|
return (deg / 180) * Math.PI
|
|||
|
}
|
|||
|
|
|||
|
RenderDynamicWind.prototype.remove = function () {
|
|||
|
if (this.animationLoop) {
|
|||
|
cancelAnimationFrame(this.animationLoop)
|
|||
|
this.animationLoop = null
|
|||
|
}
|
|||
|
|
|||
|
var renderObject = this
|
|||
|
if (
|
|||
|
renderObject._lineCanvas != undefined &&
|
|||
|
renderObject._lineCanvas.style != null
|
|||
|
) {
|
|||
|
renderObject._lineCanvas.style.display = 'none'
|
|||
|
}
|
|||
|
if (
|
|||
|
renderObject._imageCanvas != undefined &&
|
|||
|
renderObject._imageCanvas.style != null
|
|||
|
) {
|
|||
|
renderObject._imageCanvas.style.display = 'none'
|
|||
|
}
|
|||
|
renderObject.start = false
|
|||
|
if (this._timerOut) {
|
|||
|
clearTimeout(this._timerOut)
|
|||
|
this._timerOut = null
|
|||
|
}
|
|||
|
if (document.getElementById('image-canvas'))
|
|||
|
document.getElementById('image-canvas').remove()
|
|||
|
if (document.getElementById('fullScreen'))
|
|||
|
document.getElementById('fullScreen').remove()
|
|||
|
|
|||
|
this.particles = []
|
|||
|
}
|
|||
|
|
|||
|
RenderDynamicWind.prototype.clone = function () {}
|
|||
|
RenderDynamicWind.prototype.update = function () {
|
|||
|
var RTOD = 180.0 / 3.1415926
|
|||
|
var canvas = document.getElementById('animation')
|
|||
|
var g = canvas.getContext('2d')
|
|||
|
g.fillStyle = 'rgba(0, 0, 0, 0.97)'
|
|||
|
g.lineWidth = 20
|
|||
|
|
|||
|
function draw() {
|
|||
|
// Fade existing particle trails.
|
|||
|
var prev = 'source-over'
|
|||
|
g.globalCompositeOperation = 'destination-in'
|
|||
|
g.fillRect(0, 0, 800, 600)
|
|||
|
g.globalCompositeOperation = prev
|
|||
|
g.beginPath()
|
|||
|
g.strokeStyle = 0x111111
|
|||
|
for (var i = 0; i < 100; i++) {
|
|||
|
var x = Math.floor(Math.random() * 800)
|
|||
|
var y = Math.floor(Math.random() * 600)
|
|||
|
g.moveTo(x, y)
|
|||
|
g.lineTo(x + 5, y + 5)
|
|||
|
}
|
|||
|
g.stroke()
|
|||
|
}
|
|||
|
|
|||
|
;(function frame() {
|
|||
|
try {
|
|||
|
draw()
|
|||
|
setTimeout(frame, 400)
|
|||
|
} catch (e) {}
|
|||
|
})()
|
|||
|
}
|
|||
|
RenderDynamicWind.prototype.updateO = function (options) {
|
|||
|
const renderObject = this
|
|||
|
var scene = renderObject._viewer.scene
|
|||
|
renderObject.lineWidth = options.lineWidth || renderObject.lineWidth
|
|||
|
renderObject.densityScale = options.densityScale || renderObject.densityScale
|
|||
|
renderObject.velocityScale =
|
|||
|
options.velocityScale || renderObject.velocityScale
|
|||
|
//同比执行一次movestart 和moveend
|
|||
|
|
|||
|
if (renderObject._field != null) {
|
|||
|
renderObject._field.release()
|
|||
|
}
|
|||
|
renderObject.start1 = false
|
|||
|
renderObject._isRender = false
|
|||
|
if (renderObject._imageG) {
|
|||
|
renderObject._imageG.clearRect(
|
|||
|
0,
|
|||
|
0,
|
|||
|
renderObject._windowWidth,
|
|||
|
renderObject._windowHeight
|
|||
|
)
|
|||
|
renderObject._g.clearRect(
|
|||
|
0,
|
|||
|
0,
|
|||
|
renderObject._windowWidth,
|
|||
|
renderObject._windowHeight
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
if (!renderObject.start) return
|
|||
|
//获取当前相机高度
|
|||
|
renderObject.start1 = true
|
|||
|
//获取当前相机高度
|
|||
|
renderObject._height = scene.camera.positionCartographic.height
|
|||
|
renderObject._scale = renderObject.getScaleByHeight(renderObject._height)
|
|||
|
renderObject.velocityScale_o = renderObject.getVelocityScaleByHeight(
|
|||
|
renderObject._height
|
|||
|
)
|
|||
|
renderObject.reCreate(renderObject)
|
|||
|
renderObject._isRender = true
|
|||
|
renderObject.particles = []
|
|||
|
renderObject.particleCount = Math.round(
|
|||
|
renderObject._windowHeight *
|
|||
|
windData.PARTICLE_MULTIPLIER *
|
|||
|
renderObject._windowWidth *
|
|||
|
renderObject._scale
|
|||
|
)
|
|||
|
if (renderObject._field != null) {
|
|||
|
for (var i = 0; i < renderObject.particleCount; i++) {
|
|||
|
if (!renderObject.start1) {
|
|||
|
i = renderObject.particleCount - 1
|
|||
|
return
|
|||
|
}
|
|||
|
renderObject.particles.push(
|
|||
|
renderObject._field.randomize({
|
|||
|
age: windData.random(0, windData.MAX_PARTICLE_AGE)
|
|||
|
})
|
|||
|
)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export default RenderDynamicWind
|