#pragma once #include #include #include #include #include #include "effects/DrawDecorate.h" #include "viewer/UpdateRenderStd.h" class ConeWave : public osg::Geode , public UpdateRenderStd { public: explicit ConeWave(); ~ConeWave(void) override; void Render(double dt) override; void InitGeode(); void Destory(); void CreateRadarScanWave(); void CreateConeGeometry(); void CreateRadarShader(); void SetWaveRadius(float radius); float GetWaveRadius() const { return waveRadius_; } void SetWaveSpeed(float speed); float GetWaveSpeed() const { return waveSpeed_; } void SetWaveCount(int count); int GetWaveCount() const { return waveCount_; } void SetWaveColor(const osg::Vec4& color); const osg::Vec4& GetWaveColor() const { return waveColor_; } void SetHeight(float height); float GetHeght() const { return height_; } void SetBaseColor(const osg::Vec4& color); const osg::Vec4 GetBaseColor() const { return baseColor_; } void SetRingBrightAlpha(float alpha); float GetRingBrightAlpha() const { return ringBrightAlpha_; } void SetRingDarkAlpha(float alpha); float GetRingDarkAlpha() const { return ringDarkAlpha_; } void SetConeAlpha(float alpha); float GetConeAlpha() const { return coneAlpha_; } protected: void Clear(); void Rebuild(); private: osg::ref_ptr coneGeometry_; osg::ref_ptr coneDrawable_; osg::ref_ptr coneCallback_; float height_{ 6.0f }; float radius_{ 10.0f }; osg::ref_ptr waveTimeUniform_; osg::ref_ptr waveRadiusUniform_; osg::ref_ptr waveSpeedUniform_; osg::ref_ptr waveCountUniform_; osg::ref_ptr baseColorUniform_; osg::ref_ptr waveColorUniform_; osg::ref_ptr levelHeightUniform_; osg::ref_ptr ringBrightAlphaUniform_; osg::ref_ptr ringDarkAlphaUniform_; osg::ref_ptr coneAlphaUniform_; float waveRadius_{ 100.0f }; float waveSpeed_{ 20.0f }; int waveCount_{ 30 }; osg::Vec4 baseColor_{ 1.0f, 0.2f, 0.5f, 1.f }; osg::Vec4 waveColor_{ 0.0f, 0.5f, 1.0f, 0.8f }; double currentTime_{ 0.0 }; float ringBrightAlpha_{ 0.8f }; float ringDarkAlpha_{ 0.3f }; float coneAlpha_{ 0.7f }; };