44 #include <ACG/GL/acg_glew.hh>
46 #include "PostProcessorRadialBlur.hh"
48 #include <ACG/GL/ScreenQuad.hh>
49 #include <ACG/GL/ShaderCache.hh>
50 #include <ACG/GL/GLFormatInfo.hh>
56 #include <QVBoxLayout>
57 #include <ACG/QtWidgets/QtColorChooserButton.hh>
61 PostProcessorRadialBlur::PostProcessorRadialBlur()
62 : blur_(16), radius_(1.0f), intensity_(0.0025f), center_(0.5f, 0.5f)
67 PostProcessorRadialBlur::~PostProcessorRadialBlur()
71 QString PostProcessorRadialBlur::checkOpenGL()
74 return QString(
"Radial Blur plugin requires OpenGL 3.0!");
80 void PostProcessorRadialBlur::postProcess(
ACG::GLState* _glstate,
const std::vector<const PostProcessorInput*>& _input,
const PostProcessorOutput& _output )
82 glBindFramebuffer(GL_FRAMEBUFFER, _output.fbo_);
83 glDrawBuffer(_output.drawBuffer_);
89 blur_.execute(_input[0]->colorTex_, radius_, intensity_, center_);
94 QAction * action =
new QAction(
"Radial Blur Options" ,
this );
96 connect(action,SIGNAL(triggered(
bool )),
this,SLOT(optionDialog(
bool )));
101 void PostProcessorRadialBlur::optionDialog(
bool )
104 QDialog* optionsDlg =
new QDialog();
105 QVBoxLayout* layout =
new QVBoxLayout();
106 layout->setAlignment(Qt::AlignTop);
109 curColor.setRgbF(0.3f, 0.2f, 0.7f);
111 QLabel* label =
new QLabel(tr(
"Samples [1, 32]:"));
112 layout->addWidget(label);
114 QSlider* radiusSlider =
new QSlider(Qt::Horizontal);
115 radiusSlider->setRange(1, 32);
116 radiusSlider->setValue(8);
117 radiusSlider->setTracking(
true);
118 layout->addWidget(radiusSlider);
121 label =
new QLabel(tr(
"Radius [0, 2]:"));
122 layout->addWidget(label);
124 QSlider* sigmaSlider =
new QSlider(Qt::Horizontal);
125 sigmaSlider->setRange(1, 100);
126 sigmaSlider->setValue(50);
127 sigmaSlider->setTracking(
true);
128 layout->addWidget(sigmaSlider);
131 label =
new QLabel(tr(
"Intensity [0.001, 0.01]:"));
132 layout->addWidget(label);
134 QSlider* intensitySlider =
new QSlider(Qt::Horizontal);
135 intensitySlider->setRange(0, 100);
136 intensitySlider->setValue(2);
137 intensitySlider->setTracking(
true);
138 layout->addWidget(intensitySlider);
141 label =
new QLabel(tr(
"CenterU [0, 1]:"));
142 layout->addWidget(label);
144 QSlider* centerUSlider =
new QSlider(Qt::Horizontal);
145 centerUSlider->setRange(0, 100);
146 centerUSlider->setValue(50);
147 centerUSlider->setTracking(
true);
148 layout->addWidget(centerUSlider);
151 label =
new QLabel(tr(
"CenterV [0, 1]:"));
152 layout->addWidget(label);
154 QSlider* centerVSlider =
new QSlider(Qt::Horizontal);
155 centerVSlider->setRange(0, 100);
156 centerVSlider->setValue(50);
157 centerVSlider->setTracking(
true);
158 layout->addWidget(centerVSlider);
162 optionsDlg->setLayout(layout);
165 connect(radiusSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(samplesChanged(
int)));
166 connect(sigmaSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(radiusChanged(
int)));
167 connect(intensitySlider, SIGNAL(sliderMoved(
int)),
this, SLOT(intensityChanged(
int)));
168 connect(centerUSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(centerXChanged(
int)));
169 connect(centerVSlider, SIGNAL(sliderMoved(
int)),
this, SLOT(centerYChanged(
int)));
177 void PostProcessorRadialBlur::samplesChanged(
int _n )
182 void PostProcessorRadialBlur::radiusChanged(
int _r )
184 radius_ = float(_r) * 0.01f * 2.0f;
187 void PostProcessorRadialBlur::intensityChanged(
int _r )
189 float t = float(_r) * 0.01f;
190 intensity_ = 0.001f * (1.0f - t) + 0.01 * t;
193 void PostProcessorRadialBlur::centerXChanged(
int _r )
195 center_[0] = float(_r) * 0.01f;
198 void PostProcessorRadialBlur::centerYChanged(
int _r )
200 center_[1] = float(_r) * 0.01f;
204 #if QT_VERSION < 0x050000
QAction * optionsAction()
Return options menu.
bool openGLVersion(const int _major, const int _minor)