mofify cone to remove warning
This commit is contained in:
parent
9cf724588a
commit
eba320eaeb
@ -21,14 +21,12 @@ public:
|
|||||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
|
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
|
||||||
timeElapsed += (nv->getFrameStamp()->getSimulationTime() - SimulationTime);
|
timeElapsed += (nv->getFrameStamp()->getSimulationTime() - SimulationTime);
|
||||||
|
|
||||||
// 获取并更新geometry的顶点
|
|
||||||
osg::Geode* geode = dynamic_cast<osg::Geode*>(node);
|
osg::Geode* geode = dynamic_cast<osg::Geode*>(node);
|
||||||
if (geode) {
|
if (geode) {
|
||||||
osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(geode->getDrawable(0));
|
osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(geode->getDrawable(0));
|
||||||
if (geometry) {
|
if (geometry) {
|
||||||
osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());
|
osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());
|
||||||
if (vertices) {
|
if (vertices) {
|
||||||
// 更新顶点位置来模拟波动
|
|
||||||
float amplitude = 2.0f;
|
float amplitude = 2.0f;
|
||||||
float frequency = 1.0f;
|
float frequency = 1.0f;
|
||||||
for (unsigned int i = 0; i < vertices->size(); ++i) {
|
for (unsigned int i = 0; i < vertices->size(); ++i) {
|
||||||
@ -36,12 +34,11 @@ public:
|
|||||||
vertex.z() = amplitude * sin(frequency * (vertex.x() + timeElapsed));
|
vertex.z() = amplitude * sin(frequency * (vertex.x() + timeElapsed));
|
||||||
}
|
}
|
||||||
geometry->setVertexArray(vertices);
|
geometry->setVertexArray(vertices);
|
||||||
geometry->dirtyBound(); // 更新几何体边界
|
geometry->dirtyBound();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 继续遍历场景图
|
|
||||||
traverse(node, nv);
|
traverse(node, nv);
|
||||||
SimulationTime = nv->getFrameStamp()->getSimulationTime();
|
SimulationTime = nv->getFrameStamp()->getSimulationTime();
|
||||||
}
|
}
|
||||||
@ -51,7 +48,6 @@ private:
|
|||||||
double SimulationTime;
|
double SimulationTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 雷达扫描波时间更新回调
|
|
||||||
class RadarWaveTimeCallback : public osg::NodeCallback {
|
class RadarWaveTimeCallback : public osg::NodeCallback {
|
||||||
public:
|
public:
|
||||||
RadarWaveTimeCallback(osg::ref_ptr<osg::Uniform> waveTimeUniform)
|
RadarWaveTimeCallback(osg::ref_ptr<osg::Uniform> waveTimeUniform)
|
||||||
@ -64,16 +60,13 @@ public:
|
|||||||
startTime_ = currentTime;
|
startTime_ = currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算经过的时间
|
|
||||||
float elapsedTime = static_cast<float>(currentTime - startTime_);
|
float elapsedTime = static_cast<float>(currentTime - startTime_);
|
||||||
|
|
||||||
// 更新waveTime uniform
|
|
||||||
if (waveTimeUniform_.valid()) {
|
if (waveTimeUniform_.valid()) {
|
||||||
waveTimeUniform_->set(elapsedTime);
|
waveTimeUniform_->set(elapsedTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 继续遍历场景图
|
|
||||||
traverse(node, nv);
|
traverse(node, nv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +80,6 @@ ConeWave::ConeWave() {
|
|||||||
osgEarth::Registry::shaderGenerator().run(this);
|
osgEarth::Registry::shaderGenerator().run(this);
|
||||||
currentTime_ = 0.0;
|
currentTime_ = 0.0;
|
||||||
|
|
||||||
// 确保成员变量有合理的默认值
|
|
||||||
height_ = 1000.0f;
|
height_ = 1000.0f;
|
||||||
radius_ = 50.0f;
|
radius_ = 50.0f;
|
||||||
waveRadius_ = 100.0f;
|
waveRadius_ = 100.0f;
|
||||||
@ -96,7 +88,6 @@ ConeWave::ConeWave() {
|
|||||||
baseColor_ = osg::Vec4(0.0f, 0.8f, 1.0f, 1.0f);
|
baseColor_ = osg::Vec4(0.0f, 0.8f, 1.0f, 1.0f);
|
||||||
waveColor_ = osg::Vec4(1.0f, 0.5f, 1.0f, 0.8f);
|
waveColor_ = osg::Vec4(1.0f, 0.5f, 1.0f, 0.8f);
|
||||||
|
|
||||||
// 初始化透明度值
|
|
||||||
ringBrightAlpha_ = 0.8f;
|
ringBrightAlpha_ = 0.8f;
|
||||||
ringDarkAlpha_ = 0.3f;
|
ringDarkAlpha_ = 0.3f;
|
||||||
coneAlpha_ = 0.7f;
|
coneAlpha_ = 0.7f;
|
||||||
@ -108,8 +99,6 @@ ConeWave::~ConeWave(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::Render(double dt) {
|
void ConeWave::Render(double dt) {
|
||||||
// 时间更新现在由RadarWaveTimeCallback回调处理
|
|
||||||
// 这里可以处理其他需要更新的属性
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::InitGeode() {
|
void ConeWave::InitGeode() {
|
||||||
@ -142,11 +131,9 @@ void ConeWave::SetBaseColor(const osg::Vec4& color) {
|
|||||||
void ConeWave::SetWaveCount(int count) {
|
void ConeWave::SetWaveCount(int count) {
|
||||||
waveCount_ = count;
|
waveCount_ = count;
|
||||||
|
|
||||||
// 如果uniform已经存在,直接更新值
|
|
||||||
if (waveCountUniform_.valid()) {
|
if (waveCountUniform_.valid()) {
|
||||||
waveCountUniform_->set(static_cast<float>(waveCount_));
|
waveCountUniform_->set(static_cast<float>(waveCount_));
|
||||||
} else {
|
} else {
|
||||||
// 否则重建整个几何体和着色器
|
|
||||||
Rebuild();
|
Rebuild();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,10 +146,9 @@ void ConeWave::SetWaveSpeed(float speed) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 雷达扫描波效果相关方法实现
|
|
||||||
void ConeWave::SetWaveRadius(float radius) {
|
void ConeWave::SetWaveRadius(float radius) {
|
||||||
waveRadius_ = radius;
|
waveRadius_ = radius;
|
||||||
radius_ = radius; // 同时更新锥形的半径
|
radius_ = radius;
|
||||||
Rebuild();
|
Rebuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +160,6 @@ void ConeWave::SetWaveColor(const osg::Vec4& color) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 透明度控制方法实现
|
|
||||||
void ConeWave::SetRingBrightAlpha(float alpha) {
|
void ConeWave::SetRingBrightAlpha(float alpha) {
|
||||||
ringBrightAlpha_ = alpha;
|
ringBrightAlpha_ = alpha;
|
||||||
|
|
||||||
@ -192,11 +177,7 @@ void ConeWave::SetRingDarkAlpha(float alpha) {
|
|||||||
|
|
||||||
void ConeWave::SetConeAlpha(float alpha) {
|
void ConeWave::SetConeAlpha(float alpha) {
|
||||||
coneAlpha_ = alpha;
|
coneAlpha_ = alpha;
|
||||||
// 更新锥形的基础颜色透明度
|
|
||||||
if (coneGeometry_.valid()) {
|
if (coneGeometry_.valid()) {
|
||||||
// 通过着色器uniform来控制透明度,而不是直接设置颜色
|
|
||||||
// 这里可以在CreateRadarShader中添加coneAlpha uniform来控制
|
|
||||||
// 或者通过StateSet的材质属性来控制
|
|
||||||
osg::StateSet* ss = coneGeometry_->getOrCreateStateSet();
|
osg::StateSet* ss = coneGeometry_->getOrCreateStateSet();
|
||||||
osg::ref_ptr<osg::Material> material = new osg::Material();
|
osg::ref_ptr<osg::Material> material = new osg::Material();
|
||||||
material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(0.0f, 0.8f, 1.0f, alpha));
|
material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4(0.0f, 0.8f, 1.0f, alpha));
|
||||||
@ -206,9 +187,8 @@ void ConeWave::SetConeAlpha(float alpha) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::Clear() {
|
void ConeWave::Clear() {
|
||||||
// 清除锥形几何体和相关uniform
|
|
||||||
if (coneCallback_.valid()) {
|
if (coneCallback_.valid()) {
|
||||||
setUpdateCallback(nullptr); // 移除时间更新回调
|
setUpdateCallback(nullptr);
|
||||||
coneCallback_ = nullptr;
|
coneCallback_ = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,31 +208,25 @@ void ConeWave::Clear() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::Rebuild() {
|
void ConeWave::Rebuild() {
|
||||||
// 清除当前几何体和uniform
|
|
||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
CreateRadarScanWave();
|
CreateRadarScanWave();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::CreateConeGeometry() {
|
void ConeWave::CreateConeGeometry() {
|
||||||
// 创建锥形几何体
|
|
||||||
osg::ref_ptr<osg::Geometry> coneGeometry = new osg::Geometry();
|
osg::ref_ptr<osg::Geometry> coneGeometry = new osg::Geometry();
|
||||||
|
|
||||||
// 锥形参数
|
const int segments = 64;
|
||||||
const int segments = 64; // 圆周细分数
|
|
||||||
const float angleStep = 2.0f * osg::PI / segments;
|
const float angleStep = 2.0f * osg::PI / segments;
|
||||||
|
|
||||||
// 创建顶点数组
|
|
||||||
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
|
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
|
||||||
osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array();
|
osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array();
|
||||||
osg::ref_ptr<osg::Vec2Array> texCoords = new osg::Vec2Array();
|
osg::ref_ptr<osg::Vec2Array> texCoords = new osg::Vec2Array();
|
||||||
|
|
||||||
// 锥顶(位于原点)
|
|
||||||
vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
|
vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
|
||||||
normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
|
normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
|
||||||
texCoords->push_back(osg::Vec2(0.5f, 0.5f));
|
texCoords->push_back(osg::Vec2(0.5f, 0.5f));
|
||||||
|
|
||||||
// 底面圆周顶点(位于height_高度处)
|
|
||||||
for (int i = 0; i <= segments; ++i) {
|
for (int i = 0; i <= segments; ++i) {
|
||||||
float angle = i * angleStep;
|
float angle = i * angleStep;
|
||||||
float x = radius_ * cos(angle);
|
float x = radius_ * cos(angle);
|
||||||
@ -261,12 +235,10 @@ void ConeWave::CreateConeGeometry() {
|
|||||||
|
|
||||||
vertices->push_back(osg::Vec3(x, y, z));
|
vertices->push_back(osg::Vec3(x, y, z));
|
||||||
|
|
||||||
// 计算法线(从锥顶指向圆周的单位向量)
|
|
||||||
osg::Vec3 normal(x, y, radius_);
|
osg::Vec3 normal(x, y, radius_);
|
||||||
normal.normalize();
|
normal.normalize();
|
||||||
normals->push_back(normal);
|
normals->push_back(normal);
|
||||||
|
|
||||||
// 纹理坐标
|
|
||||||
texCoords->push_back(osg::Vec2((x/radius_ + 1.0f) * 0.5f, (y/radius_ + 1.0f) * 0.5f));
|
texCoords->push_back(osg::Vec2((x/radius_ + 1.0f) * 0.5f, (y/radius_ + 1.0f) * 0.5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,15 +247,12 @@ void ConeWave::CreateConeGeometry() {
|
|||||||
coneGeometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
|
coneGeometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
|
||||||
coneGeometry->setTexCoordArray(0, texCoords);
|
coneGeometry->setTexCoordArray(0, texCoords);
|
||||||
|
|
||||||
// 创建三角形索引
|
|
||||||
osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES);
|
osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES);
|
||||||
|
|
||||||
// 生成锥面三角形
|
|
||||||
for (int i = 0; i < segments; ++i) {
|
for (int i = 0; i < segments; ++i) {
|
||||||
// 每个三角形:锥顶 -> 底面点i -> 底面点i+1
|
indices->push_back(0);
|
||||||
indices->push_back(0); // 锥顶
|
indices->push_back(i + 1);
|
||||||
indices->push_back(i + 1); // 底面点i
|
indices->push_back(i + 2);
|
||||||
indices->push_back(i + 2); // 底面点i+1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
coneGeometry->addPrimitiveSet(indices);
|
coneGeometry->addPrimitiveSet(indices);
|
||||||
@ -301,41 +270,33 @@ void ConeWave::CreateConeGeometry() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::CreateRadarScanWave() {
|
void ConeWave::CreateRadarScanWave() {
|
||||||
// 手动创建锥形几何体
|
|
||||||
CreateConeGeometry();
|
CreateConeGeometry();
|
||||||
|
|
||||||
// 添加到几何节点
|
|
||||||
addDrawable(coneDrawable_);
|
addDrawable(coneDrawable_);
|
||||||
|
|
||||||
// 设置渲染状态
|
|
||||||
osg::StateSet* ss = coneDrawable_->getOrCreateStateSet();
|
osg::StateSet* ss = coneDrawable_->getOrCreateStateSet();
|
||||||
ss->setRenderBinDetails(120, "RenderBin");
|
ss->setRenderBinDetails(120, "RenderBin");
|
||||||
ss->setMode(GL_CULL_FACE, osg::StateAttribute::OFF); // 关闭面剔除以确保可见
|
ss->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
|
||||||
ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||||
|
|
||||||
// 设置混合模式
|
|
||||||
osg::ref_ptr<osg::BlendFunc> bf = new osg::BlendFunc(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
|
osg::ref_ptr<osg::BlendFunc> bf = new osg::BlendFunc(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
|
||||||
ss->setAttributeAndModes(bf, osg::StateAttribute::ON);
|
ss->setAttributeAndModes(bf, osg::StateAttribute::ON);
|
||||||
ss->setMode(GL_BLEND, osg::StateAttribute::ON);
|
ss->setMode(GL_BLEND, osg::StateAttribute::ON);
|
||||||
ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
ss->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||||
ss->setAttributeAndModes(new osg::CullFace(osg::CullFace::BACK));
|
ss->setAttributeAndModes(new osg::CullFace(osg::CullFace::BACK));
|
||||||
|
|
||||||
// 创建雷达扫描波着色器
|
|
||||||
CreateRadarShader();
|
CreateRadarShader();
|
||||||
|
|
||||||
// 添加时间更新回调
|
|
||||||
osg::ref_ptr<osg::NodeCallback> waveTimeCallback = new RadarWaveTimeCallback(waveTimeUniform_);
|
osg::ref_ptr<osg::NodeCallback> waveTimeCallback = new RadarWaveTimeCallback(waveTimeUniform_);
|
||||||
coneCallback_ = waveTimeCallback;
|
coneCallback_ = waveTimeCallback;
|
||||||
setUpdateCallback(coneCallback_);
|
setUpdateCallback(coneCallback_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::CreateRadarShader() {
|
void ConeWave::CreateRadarShader() {
|
||||||
// 防止重复创建着色器
|
|
||||||
if (waveTimeUniform_.valid()) {
|
if (waveTimeUniform_.valid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 顶点着色器 - 使用简单的基于高度的条纹效果
|
|
||||||
static const char* vertexShaderSource =
|
static const char* vertexShaderSource =
|
||||||
"varying vec3 pos;\n"
|
"varying vec3 pos;\n"
|
||||||
"void main()\n"
|
"void main()\n"
|
||||||
@ -346,7 +307,6 @@ void ConeWave::CreateRadarShader() {
|
|||||||
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
|
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
// 片段着色器 - 可控透明度的同心圆波纹效果
|
|
||||||
static const char* fragmentShaderSource =
|
static const char* fragmentShaderSource =
|
||||||
"uniform float height;\n"
|
"uniform float height;\n"
|
||||||
"uniform vec4 baseColor;\n"
|
"uniform vec4 baseColor;\n"
|
||||||
@ -377,7 +337,6 @@ void ConeWave::CreateRadarShader() {
|
|||||||
" }\n"
|
" }\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
// 创建着色器
|
|
||||||
osg::ref_ptr<osg::Shader> vertexShader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource);
|
osg::ref_ptr<osg::Shader> vertexShader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource);
|
||||||
osg::ref_ptr<osg::Shader> fragmentShader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource);
|
osg::ref_ptr<osg::Shader> fragmentShader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource);
|
||||||
|
|
||||||
@ -385,19 +344,16 @@ void ConeWave::CreateRadarShader() {
|
|||||||
program->addShader(vertexShader);
|
program->addShader(vertexShader);
|
||||||
program->addShader(fragmentShader);
|
program->addShader(fragmentShader);
|
||||||
|
|
||||||
// 获取drawable的状态集并设置着色器程序
|
|
||||||
osg::StateSet* stateSet = coneDrawable_->getOrCreateStateSet();
|
osg::StateSet* stateSet = coneDrawable_->getOrCreateStateSet();
|
||||||
stateSet->setAttributeAndModes(program, osg::StateAttribute::ON);
|
stateSet->setAttributeAndModes(program, osg::StateAttribute::ON);
|
||||||
|
|
||||||
// 创建uniform变量
|
|
||||||
waveTimeUniform_ = new osg::Uniform("waveTime", 0.0f);
|
waveTimeUniform_ = new osg::Uniform("waveTime", 0.0f);
|
||||||
baseColorUniform_ = new osg::Uniform("baseColor", baseColor_); // 绿色雷达色调
|
baseColorUniform_ = new osg::Uniform("baseColor", baseColor_);
|
||||||
waveColorUniform_ = new osg::Uniform("waveColor", waveColor_);
|
waveColorUniform_ = new osg::Uniform("waveColor", waveColor_);
|
||||||
levelHeightUniform_ = new osg::Uniform("height", height_ > 0 ? height_ : 100.0f); // 确保高度不为0
|
levelHeightUniform_ = new osg::Uniform("height", height_ > 0 ? height_ : 100.0f);
|
||||||
waveSpeedUniform_ = new osg::Uniform("waveSpeed", waveSpeed_ > 0 ? waveSpeed_ : 1.0f);
|
waveSpeedUniform_ = new osg::Uniform("waveSpeed", waveSpeed_ > 0 ? waveSpeed_ : 1.0f);
|
||||||
waveCountUniform_ = new osg::Uniform("waveCount", waveCount_ > 0 ? waveCount_ : 1);
|
waveCountUniform_ = new osg::Uniform("waveCount", waveCount_ > 0 ? waveCount_ : 1);
|
||||||
|
|
||||||
// 创建透明度控制uniform变量
|
|
||||||
ringBrightAlphaUniform_ = new osg::Uniform("ringBrightAlpha", ringBrightAlpha_);
|
ringBrightAlphaUniform_ = new osg::Uniform("ringBrightAlpha", ringBrightAlpha_);
|
||||||
ringDarkAlphaUniform_ = new osg::Uniform("ringDarkAlpha", ringDarkAlpha_);
|
ringDarkAlphaUniform_ = new osg::Uniform("ringDarkAlpha", ringDarkAlpha_);
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ public:
|
|||||||
void InitGeode();
|
void InitGeode();
|
||||||
void Destory();
|
void Destory();
|
||||||
|
|
||||||
// 雷达扫描波效果相关方法
|
|
||||||
void CreateRadarScanWave();
|
void CreateRadarScanWave();
|
||||||
void CreateConeGeometry();
|
void CreateConeGeometry();
|
||||||
void CreateRadarShader();
|
void CreateRadarShader();
|
||||||
@ -46,7 +45,6 @@ public:
|
|||||||
return baseColor_;
|
return baseColor_;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 透明度控制方法
|
|
||||||
void SetRingBrightAlpha(float alpha);
|
void SetRingBrightAlpha(float alpha);
|
||||||
float GetRingBrightAlpha() const { return ringBrightAlpha_; }
|
float GetRingBrightAlpha() const { return ringBrightAlpha_; }
|
||||||
|
|
||||||
@ -69,7 +67,6 @@ private:
|
|||||||
float height_{ 6.0f };
|
float height_{ 6.0f };
|
||||||
float radius_{ 10.0f };
|
float radius_{ 10.0f };
|
||||||
|
|
||||||
// 雷达扫描波效果相关成员变量
|
|
||||||
osg::ref_ptr<osg::Uniform> waveTimeUniform_;
|
osg::ref_ptr<osg::Uniform> waveTimeUniform_;
|
||||||
osg::ref_ptr<osg::Uniform> waveRadiusUniform_;
|
osg::ref_ptr<osg::Uniform> waveRadiusUniform_;
|
||||||
osg::ref_ptr<osg::Uniform> waveSpeedUniform_;
|
osg::ref_ptr<osg::Uniform> waveSpeedUniform_;
|
||||||
@ -78,20 +75,18 @@ private:
|
|||||||
osg::ref_ptr<osg::Uniform> waveColorUniform_;
|
osg::ref_ptr<osg::Uniform> waveColorUniform_;
|
||||||
osg::ref_ptr<osg::Uniform> levelHeightUniform_;
|
osg::ref_ptr<osg::Uniform> levelHeightUniform_;
|
||||||
|
|
||||||
// 透明度控制uniform变量
|
|
||||||
osg::ref_ptr<osg::Uniform> ringBrightAlphaUniform_;
|
osg::ref_ptr<osg::Uniform> ringBrightAlphaUniform_;
|
||||||
osg::ref_ptr<osg::Uniform> ringDarkAlphaUniform_;
|
osg::ref_ptr<osg::Uniform> ringDarkAlphaUniform_;
|
||||||
osg::ref_ptr<osg::Uniform> coneAlphaUniform_;
|
osg::ref_ptr<osg::Uniform> coneAlphaUniform_;
|
||||||
|
|
||||||
float waveRadius_{ 100.0f }; // 扫描波最大半径
|
float waveRadius_{ 100.0f };
|
||||||
float waveSpeed_{ 20.0f }; // 扫描波速度
|
float waveSpeed_{ 20.0f };
|
||||||
int waveCount_{ 30 }; // 同时存在的波纹数量
|
int waveCount_{ 30 };
|
||||||
osg::Vec4 baseColor_{ 1.0f, 0.2f, 0.5f, 1.f };
|
osg::Vec4 baseColor_{ 1.0f, 0.2f, 0.5f, 1.f };
|
||||||
osg::Vec4 waveColor_{ 0.0f, 0.5f, 1.0f, 0.8f }; // 扫描波颜色(蓝色)
|
osg::Vec4 waveColor_{ 0.0f, 0.5f, 1.0f, 0.8f };
|
||||||
double currentTime_{ 0.0 }; // 当前时间
|
double currentTime_{ 0.0 };
|
||||||
|
|
||||||
// 透明度值
|
float ringBrightAlpha_{ 0.8f };
|
||||||
float ringBrightAlpha_{ 0.8f }; // 亮环透明度
|
float ringDarkAlpha_{ 0.3f };
|
||||||
float ringDarkAlpha_{ 0.3f }; // 暗环透明度
|
float coneAlpha_{ 0.7f };
|
||||||
float coneAlpha_{ 0.7f }; // 锥形透明度
|
|
||||||
};
|
};
|
||||||
|
@ -62,7 +62,6 @@ void ConeWaveComponent::Begin() {
|
|||||||
|
|
||||||
void ConeWaveComponent::Update(double dt) {
|
void ConeWaveComponent::Update(double dt) {
|
||||||
UpdateEvent();
|
UpdateEvent();
|
||||||
// 更新雷达扫描波效果
|
|
||||||
if (coneWave_.valid()) {
|
if (coneWave_.valid()) {
|
||||||
coneWave_->Render(dt);
|
coneWave_->Render(dt);
|
||||||
}
|
}
|
||||||
@ -151,7 +150,6 @@ void ConeWaveComponent::UpdateEvent() {
|
|||||||
coneWave_->setNodeMask(value == 0 ? 0x0 : 0xff);
|
coneWave_->setNodeMask(value == 0 ? 0x0 : 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 雷达扫描波效果相关方法实现
|
|
||||||
void ConeWaveComponent::SetWaveRadius(float radius) {
|
void ConeWaveComponent::SetWaveRadius(float radius) {
|
||||||
if (coneWave_.valid()) {
|
if (coneWave_.valid()) {
|
||||||
coneWave_->SetWaveRadius(radius);
|
coneWave_->SetWaveRadius(radius);
|
||||||
|
Loading…
Reference in New Issue
Block a user