git-svn-id: svn://db.shs.com.ru/libs@678 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -46,8 +46,7 @@ QGLView::QGLView(): OpenGLWindow(), renderer_(this), mouse(this) {
|
|||||||
fps_tm = fps_ = 0.;
|
fps_tm = fps_ = 0.;
|
||||||
fogColor_ = Qt::darkGray;
|
fogColor_ = Qt::darkGray;
|
||||||
fogDensity_ = 0.;
|
fogDensity_ = 0.;
|
||||||
fogDecay_1 = 0.1;
|
fogDecay_ = 10.;
|
||||||
fogDecay_0 = fogDecay_2 = 0.;
|
|
||||||
hoverHaloFill_ = selectionHaloFill_ = 0.15f;
|
hoverHaloFill_ = selectionHaloFill_ = 0.15f;
|
||||||
//lmode = Simple;
|
//lmode = Simple;
|
||||||
setFeature(qglFXAA, false);
|
setFeature(qglFXAA, false);
|
||||||
|
|||||||
@@ -55,9 +55,7 @@ class QGLView: public OpenGLWindow
|
|||||||
Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor)
|
Q_PROPERTY (QColor fogColor READ fogColor WRITE setFogColor)
|
||||||
Q_PROPERTY (bool fogEnabled READ isFogEnabled WRITE setFogEnabled)
|
Q_PROPERTY (bool fogEnabled READ isFogEnabled WRITE setFogEnabled)
|
||||||
Q_PROPERTY (float fogDensity READ fogDensity WRITE setFogDensity)
|
Q_PROPERTY (float fogDensity READ fogDensity WRITE setFogDensity)
|
||||||
Q_PROPERTY (float fogDecayConst READ fogDecayConst WRITE setFogDecayConst)
|
Q_PROPERTY (float fogDecay READ fogDecay WRITE setFogDecay)
|
||||||
Q_PROPERTY (float fogDecayLinear READ fogDecayLinear WRITE setFogDecayLinear)
|
|
||||||
Q_PROPERTY (float fogDecayQuadratic READ fogDecayQuadratic WRITE setFogDecayQuadratic)
|
|
||||||
Q_PROPERTY (int renderMode READ renderMode WRITE setRenderMode)
|
Q_PROPERTY (int renderMode READ renderMode WRITE setRenderMode)
|
||||||
Q_PROPERTY (bool grabMouse READ isGrabMouseEnabled WRITE setGrabMouseEnabled)
|
Q_PROPERTY (bool grabMouse READ isGrabMouseEnabled WRITE setGrabMouseEnabled)
|
||||||
Q_PROPERTY (bool mouseRotate READ isMouseRotateEnabled WRITE setMouseRotateEnabled)
|
Q_PROPERTY (bool mouseRotate READ isMouseRotateEnabled WRITE setMouseRotateEnabled)
|
||||||
@@ -120,9 +118,7 @@ public:
|
|||||||
QColor ambientColor() const {return ambientColor_;}
|
QColor ambientColor() const {return ambientColor_;}
|
||||||
QColor fogColor() const {return fogColor_;}
|
QColor fogColor() const {return fogColor_;}
|
||||||
float fogDensity() const {return fogDensity_;}
|
float fogDensity() const {return fogDensity_;}
|
||||||
float fogDecayConst() const {return fogDecay_0;}
|
float fogDecay() const {return fogDecay_;}
|
||||||
float fogDecayLinear() const {return fogDecay_1;}
|
|
||||||
float fogDecayQuadratic() const {return fogDecay_2;}
|
|
||||||
bool isFogEnabled() const {return fogEnabled_;}
|
bool isFogEnabled() const {return fogEnabled_;}
|
||||||
bool isLightEnabled() const {return lightEnabled_;}
|
bool isLightEnabled() const {return lightEnabled_;}
|
||||||
bool isGrabMouseEnabled() const {return mouse.isGrabMouseEnabled();}
|
bool isGrabMouseEnabled() const {return mouse.isGrabMouseEnabled();}
|
||||||
@@ -224,7 +220,7 @@ private:
|
|||||||
QHash<int, QVariant> features_;
|
QHash<int, QVariant> features_;
|
||||||
QSize prev_size;
|
QSize prev_size;
|
||||||
float lineWidth_;
|
float lineWidth_;
|
||||||
float fogDensity_, fps_, fps_tm, fogDecay_0, fogDecay_1, fogDecay_2;
|
float fps_, fps_tm, fogDensity_, fogDecay_;
|
||||||
float hoverHaloFill_, selectionHaloFill_, m_motionBlurFactor;
|
float hoverHaloFill_, selectionHaloFill_, m_motionBlurFactor;
|
||||||
int timer, fps_cnt, sh_id_loc, deleting_;
|
int timer, fps_cnt, sh_id_loc, deleting_;
|
||||||
bool is_first_draw, is_init, fogEnabled_, lightEnabled_;
|
bool is_first_draw, is_init, fogEnabled_, lightEnabled_;
|
||||||
@@ -244,9 +240,7 @@ public slots:
|
|||||||
void setAmbientColor(const QColor & arg) {ambientColor_ = arg;}
|
void setAmbientColor(const QColor & arg) {ambientColor_ = arg;}
|
||||||
void setFogColor(const QColor & arg) {fogColor_ = arg;}
|
void setFogColor(const QColor & arg) {fogColor_ = arg;}
|
||||||
void setFogDensity(const float & arg) {fogDensity_ = arg;}
|
void setFogDensity(const float & arg) {fogDensity_ = arg;}
|
||||||
void setFogDecayConst(const float & arg) {fogDecay_0 = arg;}
|
void setFogDecay(const float & arg) {fogDecay_ = arg;}
|
||||||
void setFogDecayLinear(const float & arg) {fogDecay_1 = arg;}
|
|
||||||
void setFogDecayQuadratic(const float & arg) {fogDecay_2 = arg;}
|
|
||||||
void setFogEnabled(const bool & arg) {fogEnabled_ = arg;}
|
void setFogEnabled(const bool & arg) {fogEnabled_ = arg;}
|
||||||
void setLightEnabled(const bool & arg) {lightEnabled_ = arg;}
|
void setLightEnabled(const bool & arg) {lightEnabled_ = arg;}
|
||||||
void setGrabMouseEnabled(const bool & arg) {mouse.setGrabMouseEnabled(arg);}
|
void setGrabMouseEnabled(const bool & arg) {mouse.setGrabMouseEnabled(arg);}
|
||||||
|
|||||||
@@ -124,9 +124,7 @@ private slots:
|
|||||||
|
|
||||||
void on_colorFogBack_colorChanged(const QColor & v) {view->view()->setFogColor(v);}
|
void on_colorFogBack_colorChanged(const QColor & v) {view->view()->setFogColor(v);}
|
||||||
void on_spinFogDensity_valueChanged(double v) {view->view()->setFogDensity(v);}
|
void on_spinFogDensity_valueChanged(double v) {view->view()->setFogDensity(v);}
|
||||||
void on_spinFogDecayConst_valueChanged(double v) {view->view()->setFogDecayConst(v);}
|
void on_spinFogDecay_valueChanged(double v) {view->view()->setFogDecay(v);}
|
||||||
void on_spinFogDecayLinear_valueChanged(double v) {view->view()->setFogDecayLinear(v);}
|
|
||||||
void on_spinFogDecayQuadratic_valueChanged(double v) {view->view()->setFogDecayQuadratic(v);}
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
|
|||||||
@@ -351,7 +351,11 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2">
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
<widget class="QGroupBox" name="groupCamera">
|
<widget class="QGroupBox" name="groupCamera">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Camera</string>
|
<string>Camera</string>
|
||||||
@@ -380,10 +384,6 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@@ -395,16 +395,22 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Fog</string>
|
<string>Fog</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_12">
|
<layout class="QFormLayout" name="formLayout_10">
|
||||||
<item>
|
<property name="fieldGrowthPolicy">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||||
<item>
|
</property>
|
||||||
|
<property name="labelAlignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Density:</string>
|
<string>Density:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<widget class="SpinSlider" name="spinFogDensity">
|
<widget class="SpinSlider" name="spinFogDensity">
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
@@ -440,35 +446,26 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_25">
|
<widget class="QLabel" name="label_25">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Decay:</string>
|
<string>Decay:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<widget class="SpinSlider" name="spinFogDecay">
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_26">
|
|
||||||
<property name="text">
|
|
||||||
<string>^0:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="SpinSlider" name="spinFogDecayConst">
|
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<double>0.000000000000000</double>
|
<double>0.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<double>1.000000000000000</double>
|
<double>9999.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<double>0.000000000000000</double>
|
<double>10.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="decimals">
|
<property name="decimals">
|
||||||
<number>3</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="singleStep">
|
<property name="singleStep">
|
||||||
<double>0.050000000000000</double>
|
<double>0.050000000000000</double>
|
||||||
@@ -476,77 +473,14 @@
|
|||||||
<property name="pageStep">
|
<property name="pageStep">
|
||||||
<double>0.100000000000000</double>
|
<double>0.100000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
<property name="spinMaximum">
|
<property name="squareScale">
|
||||||
<double>1.000000000000000</double>
|
<bool>true</bool>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_24">
|
|
||||||
<property name="text">
|
|
||||||
<string>^1:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="SpinSlider" name="spinFogDecayLinear">
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>0.100000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="decimals">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<double>0.050000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="pageStep">
|
|
||||||
<double>0.100000000000000</double>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="spinMaximum">
|
<property name="spinMaximum">
|
||||||
<double>1.000000000000000</double>
|
<double>9999.000000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_23">
|
|
||||||
<property name="text">
|
|
||||||
<string>^2:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="SpinSlider" name="spinFogDecayQuadratic">
|
|
||||||
<property name="minimum">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<double>0.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="decimals">
|
|
||||||
<number>3</number>
|
|
||||||
</property>
|
|
||||||
<property name="singleStep">
|
|
||||||
<double>0.050000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="pageStep">
|
|
||||||
<double>0.100000000000000</double>
|
|
||||||
</property>
|
|
||||||
<property name="spinMaximum">
|
|
||||||
<double>1.000000000000000</double>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ void Renderer::renderLight(int first_wr_buff) {
|
|||||||
prog->setUniformValue("lights_start", lights_start[pass.second]);
|
prog->setUniformValue("lights_start", lights_start[pass.second]);
|
||||||
prog->setUniformValue("lights_count", cur_lights[pass.second].size());
|
prog->setUniformValue("lights_count", cur_lights[pass.second].size());
|
||||||
prog->setUniformValue("fog_color", view->fogColor_);
|
prog->setUniformValue("fog_color", view->fogColor_);
|
||||||
prog->setUniformValue("fog_decay", QVector3D(view->fogDecay_0, view->fogDecay_1, view->fogDecay_2));
|
prog->setUniformValue("fog_decay", qMax(view->fogDecay_, 0.001f));
|
||||||
prog->setUniformValue("fog_density", view->fogDensity_);
|
prog->setUniformValue("fog_density", view->fogDensity_);
|
||||||
fbo_out.setWriteBuffer(first_wr_buff + pass.second);
|
fbo_out.setWriteBuffer(first_wr_buff + pass.second);
|
||||||
glClearFramebuffer(Qt::black, false);
|
glClearFramebuffer(Qt::black, false);
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4;
|
|||||||
uniform int lights_start, lights_count;
|
uniform int lights_start, lights_count;
|
||||||
|
|
||||||
uniform vec4 fog_color = vec4(0.5, 0.5, 0.5, 1);
|
uniform vec4 fog_color = vec4(0.5, 0.5, 0.5, 1);
|
||||||
uniform vec3 fog_decay = vec3(0, 0.1, 0); // [^0, ^1, ^2]
|
uniform float fog_decay = 10, fog_density = 0;
|
||||||
uniform float fog_density = 0;
|
|
||||||
|
|
||||||
const vec3 luma = vec3(0.299, 0.587, 0.114);
|
const vec3 luma = vec3(0.299, 0.587, 0.114);
|
||||||
const float _pe = 2.4e-7;
|
const float _pe = 2.4e-7;
|
||||||
@@ -131,9 +130,10 @@ void main(void) {
|
|||||||
vec3 res_col = max(vec3(0), li * diffuse + si * specular + emission);
|
vec3 res_col = max(vec3(0), li * diffuse + si * specular + emission);
|
||||||
|
|
||||||
float plen = length(pos.xyz);
|
float plen = length(pos.xyz);
|
||||||
float fog = clamp(dot(fog_decay, vec3(1, plen, plen*plen)) * fog_color.a * fog_density, 0, 1);
|
float fog = 1 - exp(-plen / fog_decay);
|
||||||
|
fog = clamp(fog * fog_color.a * fog_density, 0, 1);
|
||||||
res_col = mix(res_col, fog_color.rgb, fog);
|
res_col = mix(res_col, fog_color.rgb, fog);
|
||||||
|
|
||||||
qgl_FragColor = vec4(res_col, alpha);
|
qgl_FragColor = vec4(res_col, alpha);
|
||||||
//qgl_FragColor.rgb = vec3(z);
|
//qgl_FragColor.rgb = vec3(fog);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user