git-svn-id: svn://db.shs.com.ru/libs@60 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -59,13 +59,27 @@ void Camera::apply(const GLdouble & aspect) {
|
|||||||
pm.rotate(angles_.z(), 0., 0., 1.);
|
pm.rotate(angles_.z(), 0., 0., 1.);
|
||||||
//pm.translate(-aim_);
|
//pm.translate(-aim_);
|
||||||
if (parent_) {
|
if (parent_) {
|
||||||
pm.translate(-aim_);
|
//double dist = pm(2, 3);
|
||||||
pm *= parent_->worldTransform().inverted();
|
QMatrix4x4 pmat = parent_->worldTransform();//.inverted();
|
||||||
|
//offset_.setZ(offset_.z() - dist);
|
||||||
|
offset_ = pmat.column(3).toVector3D();
|
||||||
|
pmat(0, 3) = pmat(1, 3) = pmat(2, 3) = 0.;
|
||||||
|
pmat.translate(aim_);
|
||||||
|
//pm.translate(-aim_);
|
||||||
|
pm *= pmat.inverted();
|
||||||
|
//qDebug() << pmat;
|
||||||
}
|
}
|
||||||
setGLMatrix(pm);
|
setGLMatrix(pm);
|
||||||
//qDebug() << angles_;
|
//qDebug() << angles_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QMatrix4x4 Camera::offsetMatrix() const {
|
||||||
|
QMatrix4x4 ret;
|
||||||
|
ret.translate(parent_ ? -offset_ : -aim_);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
void Camera::localTransform(QMatrix4x4 & m) {
|
void Camera::localTransform(QMatrix4x4 & m) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -89,10 +89,12 @@ public:
|
|||||||
void assign(const Camera & c);
|
void assign(const Camera & c);
|
||||||
//QVector3D pointFromViewport(int x_, int y_, double z_); TODO
|
//QVector3D pointFromViewport(int x_, int y_, double z_); TODO
|
||||||
|
|
||||||
|
QMatrix4x4 offsetMatrix() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//void localTransform(QMatrix4x4 & m);
|
//void localTransform(QMatrix4x4 & m);
|
||||||
|
|
||||||
QVector3D aim_;
|
QVector3D aim_, offset_;
|
||||||
GLdouble fov_;
|
GLdouble fov_;
|
||||||
GLdouble depth_start;
|
GLdouble depth_start;
|
||||||
GLdouble depth_end;
|
GLdouble depth_end;
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ void GLObjectBase::buildTransform() {
|
|||||||
if (p != 0)
|
if (p != 0)
|
||||||
itransform_ = p->itransform_;
|
itransform_ = p->itransform_;
|
||||||
if (raw_matrix) {
|
if (raw_matrix) {
|
||||||
itransform_.translate(is_root ? dcam_pos_ : pos_);
|
itransform_.translate(pos_);
|
||||||
itransform_ *= mat_;
|
itransform_ *= mat_;
|
||||||
//qDebug() << "raw_matrix" << itransform_;
|
//qDebug() << "raw_matrix" << itransform_;
|
||||||
} else
|
} else
|
||||||
@@ -162,7 +162,7 @@ void GLObjectBase::buildTransform() {
|
|||||||
|
|
||||||
|
|
||||||
void GLObjectBase::localTransform(QMatrix4x4 & m) {
|
void GLObjectBase::localTransform(QMatrix4x4 & m) {
|
||||||
m.translate(is_root ? dcam_pos_ : pos_);
|
m.translate(pos_);
|
||||||
m.rotate(angles_.z(), 0., 0., 1.);
|
m.rotate(angles_.z(), 0., 0., 1.);
|
||||||
m.rotate(angles_.y(), 0., 1., 0.);
|
m.rotate(angles_.y(), 0., 1., 0.);
|
||||||
m.rotate(angles_.x(), 1., 0., 0.);
|
m.rotate(angles_.x(), 1., 0., 0.);
|
||||||
@@ -176,12 +176,6 @@ void GLObjectBase::checkPass() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GLObjectBase::preparePos(const Camera & cam) {
|
|
||||||
dcam_pos_ = pos_ - cam.aim();
|
|
||||||
buildTransform();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QMatrix4x4 GLObjectBase::worldMatrix(QMatrix4x4 parent) const {
|
QMatrix4x4 GLObjectBase::worldMatrix(QMatrix4x4 parent) const {
|
||||||
QMatrix4x4 mat;
|
QMatrix4x4 mat;
|
||||||
mat.translate(pos_);
|
mat.translate(pos_);
|
||||||
@@ -217,7 +211,7 @@ void GLObjectBase::render(int * id, QMap<int, GLObjectBase * > * ids, int sh_id_
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Light::Light(): GLObjectBase(), shadow_map(1, true, GL_R16F) {
|
Light::Light(): GLObjectBase(), shadow_map(0, true, GL_R16F) {
|
||||||
type_ = GLObjectBase::Light;
|
type_ = GLObjectBase::Light;
|
||||||
light_type = Omni;
|
light_type = Omni;
|
||||||
intensity = 1.;
|
intensity = 1.;
|
||||||
@@ -228,7 +222,7 @@ Light::Light(): GLObjectBase(), shadow_map(1, true, GL_R16F) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Light::Light(const QVector3D & p, const QColor & c, GLdouble i): GLObjectBase(), shadow_map(1, true, GL_R16F) {
|
Light::Light(const QVector3D & p, const QColor & c, GLdouble i): GLObjectBase(), shadow_map(0, true, GL_R16F) {
|
||||||
type_ = GLObjectBase::Light;
|
type_ = GLObjectBase::Light;
|
||||||
light_type = Omni;
|
light_type = Omni;
|
||||||
pos_ = p;
|
pos_ = p;
|
||||||
|
|||||||
@@ -168,8 +168,6 @@ public:
|
|||||||
const Box3D & boundingBox(bool withChildren = true) const {return bound;}
|
const Box3D & boundingBox(bool withChildren = true) const {return bound;}
|
||||||
GLVBO & VBO() {return vbo;}
|
GLVBO & VBO() {return vbo;}
|
||||||
|
|
||||||
void preparePos(const Camera & cam);
|
|
||||||
|
|
||||||
QVector3D pos_h;
|
QVector3D pos_h;
|
||||||
QVector<Vector3d> points, puvws;
|
QVector<Vector3d> points, puvws;
|
||||||
QVector<Vector3i> faces, uvws, norms;
|
QVector<Vector3i> faces, uvws, norms;
|
||||||
@@ -198,7 +196,7 @@ protected:
|
|||||||
RenderMode render_mode;
|
RenderMode render_mode;
|
||||||
Material material_;
|
Material material_;
|
||||||
Box3D bound;
|
Box3D bound;
|
||||||
QVector3D pos_, angles_, scale_, dcam_pos_;
|
QVector3D pos_, angles_, scale_;
|
||||||
QList<GLObjectBase * > children_;
|
QList<GLObjectBase * > children_;
|
||||||
QList<GLuint> textures;
|
QList<GLuint> textures;
|
||||||
QMatrix4x4 itransform_, mat_;
|
QMatrix4x4 itransform_, mat_;
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ void GLRendererBase::renderObjects(int pass, int light_pass, void * shaders, boo
|
|||||||
rpl.prev_view_matrix = rp.prev_view_matrix;
|
rpl.prev_view_matrix = rp.prev_view_matrix;
|
||||||
rpl.proj_matrix = rp.proj_matrix;
|
rpl.proj_matrix = rp.proj_matrix;
|
||||||
rpl.prev_proj_matrix = rp.prev_proj_matrix;
|
rpl.prev_proj_matrix = rp.prev_proj_matrix;
|
||||||
|
rpl.cam_offset_matrix = view.camera().offsetMatrix();
|
||||||
//qDebug() << "view:" << rp.view_matrix;
|
//qDebug() << "view:" << rp.view_matrix;
|
||||||
for (int i = 0; i < 32; ++i) rpl.prev_tex[i] = 0;
|
for (int i = 0; i < 32; ++i) rpl.prev_tex[i] = 0;
|
||||||
setupTextures(view.objects_, rpl, true);
|
setupTextures(view.objects_, rpl, true);
|
||||||
@@ -187,7 +188,7 @@ void GLRendererBase::renderSingleObject(GLObjectBase & o, RenderingParameters &
|
|||||||
if (!o.visible_) return;
|
if (!o.visible_) return;
|
||||||
if (rpl.pass == o.pass_) {
|
if (rpl.pass == o.pass_) {
|
||||||
Material & mat(o.material_);
|
Material & mat(o.material_);
|
||||||
QMatrix4x4 curview = rpl.view_matrix * o.itransform_, prevview = rpl.prev_view_matrix * o.itransform_;
|
QMatrix4x4 curview = rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_, prevview = rpl.prev_view_matrix * rpl.cam_offset_matrix * o.itransform_;
|
||||||
setupTextures(o, rpl, false);
|
setupTextures(o, rpl, false);
|
||||||
mat.apply((QGLShaderProgram*)rpl.shaders);
|
mat.apply((QGLShaderProgram*)rpl.shaders);
|
||||||
glSetPolygonMode(o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL));
|
glSetPolygonMode(o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL));
|
||||||
@@ -251,10 +252,11 @@ void GLRendererBase::renderShadow(Light * l, QGLShaderProgram * prog, QMatrix4x4
|
|||||||
rpl.textures = rpl.light = rpl.fog = false;
|
rpl.textures = rpl.light = rpl.fog = false;
|
||||||
rpl.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX);
|
rpl.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX);
|
||||||
rpl.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX);
|
rpl.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX);
|
||||||
|
rpl.cam_offset_matrix = cam.offsetMatrix();
|
||||||
QMatrix4x4 mbias;
|
QMatrix4x4 mbias;
|
||||||
mbias.scale(0.5, 0.5, 0.5);
|
mbias.scale(0.5, 0.5, 0.5);
|
||||||
mbias.translate(1., 1., 1.);
|
mbias.translate(1., 1., 1.);
|
||||||
l->shadow_matrix = mbias*rpl.proj_matrix*rpl.view_matrix*mat;//;// * mbias;
|
l->shadow_matrix = mbias*rpl.proj_matrix*rpl.view_matrix*rpl.cam_offset_matrix*mat;//;// * mbias;
|
||||||
//qDebug() << mbias;
|
//qDebug() << mbias;
|
||||||
//glPushMatrix();
|
//glPushMatrix();
|
||||||
renderSingleShadow(view.objects_, rpl);
|
renderSingleShadow(view.objects_, rpl);
|
||||||
@@ -268,10 +270,10 @@ void GLRendererBase::renderSingleShadow(GLObjectBase & o, RenderingParameters &
|
|||||||
if (!o.visible_) return;
|
if (!o.visible_) return;
|
||||||
if (rpl.shaders) {
|
if (rpl.shaders) {
|
||||||
//qDebug() << o.name() << curview << curview.determinant();
|
//qDebug() << o.name() << curview << curview.determinant();
|
||||||
setUniformMatrices((QGLShaderProgram*)rpl.shaders, rpl.proj_matrix, rpl.view_matrix * o.itransform_);
|
setUniformMatrices((QGLShaderProgram*)rpl.shaders, rpl.proj_matrix, rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_);
|
||||||
} else {
|
} else {
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
setGLMatrix(rpl.view_matrix * o.itransform_);
|
setGLMatrix(rpl.view_matrix * rpl.cam_offset_matrix * o.itransform_);
|
||||||
}
|
}
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL));
|
glPolygonMode(GL_FRONT_AND_BACK, o.render_mode != GLObjectBase::View ? o.render_mode : (view.rmode != GLObjectBase::View ? view.rmode : GL_FILL));
|
||||||
glLineWidth(o.line_width > 0. ? o.line_width : view.lineWidth_);
|
glLineWidth(o.line_width > 0. ? o.line_width : view.lineWidth_);
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ protected:
|
|||||||
QMatrix4x4 proj_matrix, proj_matrix_i, prev_proj_matrix;
|
QMatrix4x4 proj_matrix, proj_matrix_i, prev_proj_matrix;
|
||||||
QMatrix4x4 viewproj_matrix, viewproj_matrix_i;
|
QMatrix4x4 viewproj_matrix, viewproj_matrix_i;
|
||||||
QMatrix3x3 normal_matrix;
|
QMatrix3x3 normal_matrix;
|
||||||
|
QMatrix4x4 cam_offset_matrix;
|
||||||
QGLShaderProgram * cur_shader;
|
QGLShaderProgram * cur_shader;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -238,6 +238,7 @@ void setUniformLight(QGLShaderProgram * prog, Light * light, QString ulightn, co
|
|||||||
prog->setUniformValue((ulightn + ".shadow").toLatin1().constData(), shadow);
|
prog->setUniformValue((ulightn + ".shadow").toLatin1().constData(), shadow);
|
||||||
prog->setUniformValue((ulightn + ".shadowColor").toLatin1().constData(), shadow);
|
prog->setUniformValue((ulightn + ".shadowColor").toLatin1().constData(), shadow);
|
||||||
prog->setUniformValue((ulightn + ".shadowMatrix").toLatin1().constData(), light->shadow_matrix);
|
prog->setUniformValue((ulightn + ".shadowMatrix").toLatin1().constData(), light->shadow_matrix);
|
||||||
|
//qDebug() << light->shadow_matrix;
|
||||||
//prog->setUniformValue((ulightn + ".shadowDir0").toLatin1().constData(), (mat * dir0));
|
//prog->setUniformValue((ulightn + ".shadowDir0").toLatin1().constData(), (mat * dir0));
|
||||||
//prog->setUniformValue((ulightn + ".shadowDir1").toLatin1().constData(), (mat * dir1));
|
//prog->setUniformValue((ulightn + ".shadowDir1").toLatin1().constData(), (mat * dir1));
|
||||||
//qDebug() << light->direction << light->dir0 << light->dir1;
|
//qDebug() << light->direction << light->dir0 << light->dir1;
|
||||||
|
|||||||
@@ -80,8 +80,12 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow()
|
|||||||
//((Light*)obj->child(i))->decay_linear = .5;
|
//((Light*)obj->child(i))->decay_linear = .5;
|
||||||
}
|
}
|
||||||
view->addObject(obj);
|
view->addObject(obj);
|
||||||
|
|
||||||
|
obj->setPos(1000000, -1000000, -10000000);
|
||||||
obj->child("Box001")->addChild(&(view->camera()));
|
obj->child("Box001")->addChild(&(view->camera()));
|
||||||
//view->camera().flyToDistance(30);
|
view->camera().setPos(QVector3D(10, -20, 20));
|
||||||
|
//view->camera().setAim(obj->pos());
|
||||||
|
view->camera().flyToDistance(500);
|
||||||
|
|
||||||
double al = 7.;
|
double al = 7.;
|
||||||
obj = new GLPrimitiveLine(QVector3D(0, 0, -al), QVector3D(0, 0, al));
|
obj = new GLPrimitiveLine(QVector3D(0, 0, -al), QVector3D(0, 0, al));
|
||||||
@@ -98,9 +102,6 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow()
|
|||||||
obj = new GLPrimitiveLine(QVector3D(), QVector3D(cos(lng)*cos(lat), sin(lng)*cos(lat), sin(lat)/*(EARTH_H/EARTH_WL)*/)*5);
|
obj = new GLPrimitiveLine(QVector3D(), QVector3D(cos(lng)*cos(lat), sin(lng)*cos(lat), sin(lat)/*(EARTH_H/EARTH_WL)*/)*5);
|
||||||
view->addObject(obj);
|
view->addObject(obj);
|
||||||
|
|
||||||
view->camera().setPos(QVector3D(10, -20, 20));
|
|
||||||
view->camera().setAim(QVector3D());
|
|
||||||
view->camera().flyToDistance(500);
|
|
||||||
//view->camera().setMode(Camera::AimMatrix);
|
//view->camera().setMode(Camera::AimMatrix);
|
||||||
Light * l = new Light(view->camera().pos());
|
Light * l = new Light(view->camera().pos());
|
||||||
/*l->light_type = Light::Cone;
|
/*l->light_type = Light::Cone;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1131</width>
|
<width>1131</width>
|
||||||
<height>772</height>
|
<height>781</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@@ -513,6 +513,9 @@
|
|||||||
<property name="text">
|
<property name="text">
|
||||||
<string>soft shadows</string>
|
<string>soft shadows</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
@@ -530,9 +533,6 @@
|
|||||||
<property name="text">
|
<property name="text">
|
||||||
<string>accomodation</string>
|
<string>accomodation</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
@@ -680,7 +680,6 @@
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<zorder>tabWidget</zorder>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
|
|||||||
setFeature(qglMotionBlurSteps, 8);
|
setFeature(qglMotionBlurSteps, 8);
|
||||||
setFeature(qglShadowsEnabled, false);
|
setFeature(qglShadowsEnabled, false);
|
||||||
setFeature(qglShadowsMapSize, 512);
|
setFeature(qglShadowsMapSize, 512);
|
||||||
setFeature(qglShadowsSoftEnabled, false);
|
setFeature(qglShadowsSoftEnabled, true);
|
||||||
setFeature(qglDynamicReflectionsEnabled, false);
|
setFeature(qglDynamicReflectionsEnabled, false);
|
||||||
setFeature(qglDynamicReflectionsMapSize, 512);
|
setFeature(qglDynamicReflectionsMapSize, 512);
|
||||||
mouse_first = mouseSelect_ = hoverHalo_ = selectionHalo_ = true;
|
mouse_first = mouseSelect_ = hoverHalo_ = selectionHalo_ = true;
|
||||||
@@ -213,7 +213,8 @@ void QGLView::paintGL() {
|
|||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
//glDisable(GL_CULL_FACE);
|
//glDisable(GL_CULL_FACE);
|
||||||
camera().apply(aspect);
|
camera().apply(aspect);
|
||||||
objects_.preparePos(camera());
|
//objects_.preparePos(camera());
|
||||||
|
start_rp.cam_offset_matrix = camera().offsetMatrix();
|
||||||
start_rp.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX);
|
start_rp.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX);
|
||||||
start_rp.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX);
|
start_rp.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX);
|
||||||
//objects_.buildTransform();
|
//objects_.buildTransform();
|
||||||
@@ -276,7 +277,8 @@ void QGLView::paintGL() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
camera().apply(aspect);
|
camera().apply(aspect);
|
||||||
objects_.preparePos(camera());
|
start_rp.cam_offset_matrix = camera().offsetMatrix();
|
||||||
|
//objects_.preparePos(camera());
|
||||||
|
|
||||||
static GLRendererBase * prev_rend = 0;
|
static GLRendererBase * prev_rend = 0;
|
||||||
if (prev_rend != renderer_) {
|
if (prev_rend != renderer_) {
|
||||||
@@ -422,7 +424,7 @@ void QGLView::renderSingleSelection(GLObjectBase & o) {
|
|||||||
o.loadTextures();
|
o.loadTextures();
|
||||||
}
|
}
|
||||||
if (!o.visible_ || !o.select_) return;
|
if (!o.visible_ || !o.select_) return;
|
||||||
QMatrix4x4 curview = start_rp.view_matrix * o.itransform_;
|
QMatrix4x4 curview = start_rp.view_matrix * start_rp.cam_offset_matrix * o.itransform_;
|
||||||
ids.insert(cid, &o);
|
ids.insert(cid, &o);
|
||||||
if (shaders_supported){
|
if (shaders_supported){
|
||||||
setUniformMatrices(shader_select, start_rp.proj_matrix, curview);
|
setUniformMatrices(shader_select, start_rp.proj_matrix, curview);
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ void RendererDeferredShading::renderScene() {
|
|||||||
QMatrix4x4 mview = rp.view_matrix;
|
QMatrix4x4 mview = rp.view_matrix;
|
||||||
QMatrix4x4 mviewi = rp.view_matrix_i;
|
QMatrix4x4 mviewi = rp.view_matrix_i;
|
||||||
QMatrix4x4 mviewproji = (mview * mproj).inverted();
|
QMatrix4x4 mviewproji = (mview * mproj).inverted();
|
||||||
|
QMatrix4x4 moffset = view.camera().offsetMatrix();
|
||||||
|
QMatrix4x4 moffseti = moffset.inverted();
|
||||||
rp.prev_proj_matrix = prev_proj;
|
rp.prev_proj_matrix = prev_proj;
|
||||||
rp.prev_view_matrix = prev_view;
|
rp.prev_view_matrix = prev_view;
|
||||||
QMatrix4x4 vc_proji;
|
QMatrix4x4 vc_proji;
|
||||||
@@ -133,7 +135,7 @@ void RendererDeferredShading::renderScene() {
|
|||||||
l->shadow_map.setWriteBuffer(0);
|
l->shadow_map.setWriteBuffer(0);
|
||||||
glClearFramebuffer();
|
glClearFramebuffer();
|
||||||
//glClear(GL_DEPTH_BUFFER_BIT);
|
//glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
renderShadow(l, shader_shadow, mviewi);
|
renderShadow(l, shader_shadow, moffseti*mviewi);
|
||||||
l->shadow_map.release();
|
l->shadow_map.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,6 +162,7 @@ void RendererDeferredShading::renderScene() {
|
|||||||
shader_ds_1->setUniformValue("mat_view", mview);
|
shader_ds_1->setUniformValue("mat_view", mview);
|
||||||
shader_ds_1->setUniformValue("mat_viewi", mviewi);
|
shader_ds_1->setUniformValue("mat_viewi", mviewi);
|
||||||
shader_ds_1->setUniformValue("mat_viewproji", mviewproji);
|
shader_ds_1->setUniformValue("mat_viewproji", mviewproji);
|
||||||
|
shader_ds_1->setUniformValue("shadow_on", view.isFeatureEnabled(QGLView::qglShadowsEnabled) ? 1 : 0);
|
||||||
shader_ds_1->setUniformValue("dt", QVector2D(1. / view.viewport()->width(), 1. / view.viewport()->height()));
|
shader_ds_1->setUniformValue("dt", QVector2D(1. / view.viewport()->width(), 1. / view.viewport()->height()));
|
||||||
rp.setUniform(shader_ds_1);
|
rp.setUniform(shader_ds_1);
|
||||||
fbo_g.bindColorTextures();
|
fbo_g.bindColorTextures();
|
||||||
@@ -181,7 +184,7 @@ void RendererDeferredShading::renderScene() {
|
|||||||
glActiveTextureChannel(6);
|
glActiveTextureChannel(6);
|
||||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||||
fbo_out.setWriteBuffer(wi);
|
fbo_out.setWriteBuffer(wi);
|
||||||
setupDSLights(l, mview);
|
setupDSLights(l, mview * moffset);
|
||||||
glDrawQuad(shader_ds_1, corner_dirs);
|
glDrawQuad(shader_ds_1, corner_dirs);
|
||||||
//break;
|
//break;
|
||||||
}
|
}
|
||||||
@@ -369,8 +372,13 @@ void RendererDeferredShading::setupDSLights(int pass, const QMatrix4x4 & view_ma
|
|||||||
lv << view.lights()[i];
|
lv << view.lights()[i];
|
||||||
glActiveTextureChannel(shadow_start + i - light_start);
|
glActiveTextureChannel(shadow_start + i - light_start);
|
||||||
glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.depthTexture());
|
glBindTexture(GL_TEXTURE_2D, lv.back()->shadow_map.depthTexture());
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
if (view.isFeatureEnabled(QGLView::qglShadowsSoftEnabled)) {
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
} else {
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
}
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE);
|
||||||
}
|
}
|
||||||
amb_light.setName("null");
|
amb_light.setName("null");
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ void RendererSimple::renderScene() {
|
|||||||
glDepthFunc(GL_EQUAL);
|
glDepthFunc(GL_EQUAL);
|
||||||
}
|
}
|
||||||
view.camera().apply(view.aspect);
|
view.camera().apply(view.aspect);
|
||||||
|
rp.cam_offset_matrix = view.camera().offsetMatrix();
|
||||||
rp.prepare();
|
rp.prepare();
|
||||||
setupLights(l, 8);
|
setupLights(l, 8);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ in vec4 view_pos;
|
|||||||
uniform vec3 ambient;
|
uniform vec3 ambient;
|
||||||
uniform sampler2D t0, t1, t2, t3, t4, t_pp;
|
uniform sampler2D t0, t1, t2, t3, t4, t_pp;
|
||||||
uniform sampler2D td;
|
uniform sampler2D td;
|
||||||
uniform int gid, lightsCount;
|
uniform int gid, lightsCount, shadow_on;
|
||||||
uniform float z_near, z_far;
|
uniform float z_near, z_far;
|
||||||
uniform bool firstPass;
|
uniform bool firstPass;
|
||||||
uniform vec2 dt;
|
uniform vec2 dt;
|
||||||
@@ -23,11 +23,7 @@ vec3 vds, vds2;
|
|||||||
float sh_pow, sh_mul, dist, NdotL, NdotH, spot, ldist, diff, sdist, shadow;
|
float sh_pow, sh_mul, dist, NdotL, NdotH, spot, ldist, diff, sdist, shadow;
|
||||||
|
|
||||||
float getShadow(int light, vec3 view_pos, vec3 dpos) {
|
float getShadow(int light, vec3 view_pos, vec3 dpos) {
|
||||||
//shp = mat_viewi * vec4(view_pos, 1);
|
|
||||||
//shp += vec4(dpos, 0);
|
|
||||||
|
|
||||||
shp = qgl_Light[light].shadowMatrix * vec4(view_pos, 1);
|
shp = qgl_Light[light].shadowMatrix * vec4(view_pos, 1);
|
||||||
//shp.xyz /= shp.w;
|
|
||||||
shp.z -= 0.1;
|
shp.z -= 0.1;
|
||||||
return textureProj(qgl_Light[light].shadow, shp);
|
return textureProj(qgl_Light[light].shadow, shp);
|
||||||
}
|
}
|
||||||
@@ -74,7 +70,7 @@ void calcLight(in int index, in vec3 n, in vec3 v, in vec4 v2) {
|
|||||||
getShadow(index, pos.xyz, vds + vds2 + vds2) +
|
getShadow(index, pos.xyz, vds + vds2 + vds2) +
|
||||||
getShadow(index, pos.xyz, - vds - vds2 - vds2) +
|
getShadow(index, pos.xyz, - vds - vds2 - vds2) +
|
||||||
getShadow(index, pos.xyz, - vds + vds2 + vds2)*/;
|
getShadow(index, pos.xyz, - vds + vds2 + vds2)*/;
|
||||||
spot *= shadow;// / 29.;
|
spot *= mix(1., shadow, shadow_on);// / 29.;
|
||||||
}
|
}
|
||||||
spot /= (qgl_Light[index].constantAttenuation + ldist * (qgl_Light[index].linearAttenuation + ldist * qgl_Light[index].quadraticAttenuation));
|
spot /= (qgl_Light[index].constantAttenuation + ldist * (qgl_Light[index].linearAttenuation + ldist * qgl_Light[index].quadraticAttenuation));
|
||||||
///li += spot * gl_LightSource[index].diffuse.rgb * light_diffuse(0, ldir, n);
|
///li += spot * gl_LightSource[index].diffuse.rgb * light_diffuse(0, ldir, n);
|
||||||
@@ -116,6 +112,7 @@ void main(void) {
|
|||||||
pos.xy *= v0.z;
|
pos.xy *= v0.z;
|
||||||
pos.z = posz;*/
|
pos.z = posz;*/
|
||||||
|
|
||||||
|
pos.w = 1;
|
||||||
pos.xyz = view_dir * v0.w;
|
pos.xyz = view_dir * v0.w;
|
||||||
pos.z = -pos.z;
|
pos.z = -pos.z;
|
||||||
|
|
||||||
@@ -137,7 +134,6 @@ void main(void) {
|
|||||||
calcLight(0, n, v, v2);
|
calcLight(0, n, v, v2);
|
||||||
|
|
||||||
qgl_FragData[0].rgb = li * dc + si * v2.rgb + v3.rgb + texelFetch(t_pp, tc, 0).rgb;
|
qgl_FragData[0].rgb = li * dc + si * v2.rgb + v3.rgb + texelFetch(t_pp, tc, 0).rgb;
|
||||||
qgl_FragData[0].rgb = vec3(abs(shp.xy/shp.w)/1,0);
|
|
||||||
//qgl_FragData[0].rgb = li + vec3(texelFetch(t_pp, tc, 0).xyz);
|
//qgl_FragData[0].rgb = li + vec3(texelFetch(t_pp, tc, 0).xyz);
|
||||||
//shd = shd - shp.w;
|
//shd = shd - shp.w;
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ vec3 Uncharted2Tonemap(vec3 x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
qgl_FragData[0].rgb = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
//qgl_FragData[0].rgb = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
||||||
return;
|
//return;
|
||||||
vec3 inColor = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
vec3 inColor = texelFetch(t0, ivec2(gl_FragCoord.xy), 0).rgb;
|
||||||
inColor *= exposure;
|
inColor *= exposure / 1.45;
|
||||||
float ExposureBias = 1;
|
float ExposureBias = 1.;
|
||||||
vec3 curr = Uncharted2Tonemap(ExposureBias*inColor);
|
vec3 curr = Uncharted2Tonemap(ExposureBias*inColor);
|
||||||
vec3 whiteScale = 1 / Uncharted2Tonemap(vec3(tW));
|
vec3 whiteScale = 1. / Uncharted2Tonemap(vec3(tW));
|
||||||
vec3 color = curr * whiteScale;
|
vec3 color = curr * whiteScale;
|
||||||
vec3 retColor = pow(color, vec3(1 / 1.2));
|
vec3 retColor = color;//pow(color, vec3(1 / 1));
|
||||||
qgl_FragData[0].rgb = retColor;
|
qgl_FragData[0].rgb = retColor;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
in float w;
|
in float w;
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
qgl_FragData[0].r = w;
|
//;qgl_FragData[0].r = w;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user