modify cone wave
This commit is contained in:
parent
09767ecdbd
commit
a88557220b
@ -141,7 +141,14 @@ 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()) {
|
||||||
|
waveCountUniform_->set(static_cast<float>(waveCount_));
|
||||||
|
} else {
|
||||||
|
// 否则重建整个几何体和着色器
|
||||||
Rebuild();
|
Rebuild();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConeWave::SetWaveSpeed(float speed) {
|
void ConeWave::SetWaveSpeed(float speed) {
|
||||||
@ -348,13 +355,18 @@ void ConeWave::CreateRadarShader() {
|
|||||||
"uniform float ringBrightAlpha;\n"
|
"uniform float ringBrightAlpha;\n"
|
||||||
"uniform float ringDarkAlpha;\n"
|
"uniform float ringDarkAlpha;\n"
|
||||||
"uniform float waveSpeed;\n"
|
"uniform float waveSpeed;\n"
|
||||||
|
"uniform float waveCount;\n"
|
||||||
"varying vec3 pos;\n"
|
"varying vec3 pos;\n"
|
||||||
"void main()\n"
|
"void main()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" float h = abs(pos.z) / max(height, 1.0);\n"
|
" float h = abs(pos.z) / max(height, 1.0);\n"
|
||||||
" float radialDist = sqrt(pos.x * pos.x + pos.y * pos.y);\n"
|
" float radialDist = sqrt(pos.x * pos.x + pos.y * pos.y);\n"
|
||||||
" float wavePhase = radialDist * 3.2 - waveTime * waveSpeed;\n"
|
" float waveFreq = 0.2 * max(1.0, waveCount * 0.1);\n"
|
||||||
|
" float timeScale = waveTime * waveSpeed * 0.1;\n"
|
||||||
|
" float wavePhase = radialDist * waveFreq - timeScale;\n"
|
||||||
" float ripple = sin(wavePhase);\n"
|
" float ripple = sin(wavePhase);\n"
|
||||||
|
" float ripple2 = sin(wavePhase * 1.1 + timeScale * 0.5);\n"
|
||||||
|
" ripple = (ripple + ripple2 * 0.3) / 1.3;\n"
|
||||||
" if (ripple > 0.3)\n"
|
" if (ripple > 0.3)\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" gl_FragColor = vec4(waveColor.rgb, ringBrightAlpha);\n"
|
" gl_FragColor = vec4(waveColor.rgb, ringBrightAlpha);\n"
|
||||||
@ -383,6 +395,7 @@ void ConeWave::CreateRadarShader() {
|
|||||||
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); // 确保高度不为0
|
||||||
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);
|
||||||
|
|
||||||
// 创建透明度控制uniform变量
|
// 创建透明度控制uniform变量
|
||||||
ringBrightAlphaUniform_ = new osg::Uniform("ringBrightAlpha", ringBrightAlpha_);
|
ringBrightAlphaUniform_ = new osg::Uniform("ringBrightAlpha", ringBrightAlpha_);
|
||||||
@ -393,6 +406,7 @@ void ConeWave::CreateRadarShader() {
|
|||||||
stateSet->addUniform(waveColorUniform_);
|
stateSet->addUniform(waveColorUniform_);
|
||||||
stateSet->addUniform(levelHeightUniform_);
|
stateSet->addUniform(levelHeightUniform_);
|
||||||
stateSet->addUniform(waveSpeedUniform_);
|
stateSet->addUniform(waveSpeedUniform_);
|
||||||
|
stateSet->addUniform(waveCountUniform_);
|
||||||
stateSet->addUniform(ringBrightAlphaUniform_);
|
stateSet->addUniform(ringBrightAlphaUniform_);
|
||||||
stateSet->addUniform(ringDarkAlphaUniform_);
|
stateSet->addUniform(ringDarkAlphaUniform_);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user