git-svn-id: svn://db.shs.com.ru/libs@67 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
BIN
qglview/data/room.dae.qgl
Normal file
BIN
qglview/data/room.dae.qgl
Normal file
Binary file not shown.
@@ -69,15 +69,15 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow()
|
||||
groupMotionBlur->setChecked(view->isFeatureEnabled(QGLView::qglMotionBlurEnabled));
|
||||
groupReflections->setChecked(view->isFeatureEnabled(QGLView::qglDynamicReflectionsEnabled));
|
||||
checkSoftShadows->setChecked(view->isFeatureEnabled(QGLView::qglShadowsSoftEnabled));
|
||||
spinAccom->setValue(view->isFeatureEnabled(QGLView::qglEyeAccomodationTime));
|
||||
spinAccomMS->setValue(view->isFeatureEnabled(QGLView::qglEyeAccomodationMaxSpeed));
|
||||
spinCubemapSize->setValue(view->isFeatureEnabled(QGLView::qglDynamicReflectionsMapSize));
|
||||
spinShadowmapSize->setValue(view->isFeatureEnabled(QGLView::qglShadowsMapSize));
|
||||
spinMotionBlurFactor->setValue(view->isFeatureEnabled(QGLView::qglMotionBlurFactor));
|
||||
spinMotionBlurSteps->setValue(view->isFeatureEnabled(QGLView::qglMotionBlurSteps));
|
||||
spinBloomFactor->setValue(view->isFeatureEnabled(QGLView::qglBloomFactor));
|
||||
spinBloomRadius->setValue(view->isFeatureEnabled(QGLView::qglBloomRadius));
|
||||
spinBloomThreshold->setValue(view->isFeatureEnabled(QGLView::qglBloomThreshold));
|
||||
spinAccom->setValue(view->feature(QGLView::qglEyeAccomodationTime).toDouble());
|
||||
spinAccomMS->setValue(view->feature(QGLView::qglEyeAccomodationMaxSpeed).toDouble());
|
||||
spinCubemapSize->setValue(view->feature(QGLView::qglDynamicReflectionsMapSize).toInt());
|
||||
spinShadowmapSize->setValue(view->feature(QGLView::qglShadowsMapSize).toInt());
|
||||
spinMotionBlurFactor->setValue(view->feature(QGLView::qglMotionBlurFactor).toDouble());
|
||||
spinMotionBlurSteps->setValue(view->feature(QGLView::qglMotionBlurSteps).toInt());
|
||||
spinBloomFactor->setValue(view->feature(QGLView::qglBloomFactor).toDouble());
|
||||
spinBloomRadius->setValue(view->feature(QGLView::qglBloomRadius).toInt());
|
||||
spinBloomThreshold->setValue(view->feature(QGLView::qglBloomThreshold).toDouble());
|
||||
|
||||
axis = new GLObjectBase();
|
||||
GLObjectBase * obj;
|
||||
@@ -93,9 +93,9 @@ MainWindow::MainWindow(QWidget * parent): QMainWindow(parent), Ui::MainWindow()
|
||||
axis->addChild(obj);
|
||||
view->addObject(axis);
|
||||
|
||||
cam_light = new Light(view->camera().pos());
|
||||
cam_light = new Light();
|
||||
cam_light->intensity = 0.5;
|
||||
cam_light->setName("camera");
|
||||
cam_light->setName("Camera_Light");
|
||||
view->camera().addChild(cam_light);
|
||||
view->start(-1);
|
||||
startTimer(1000/60);
|
||||
@@ -121,7 +121,7 @@ void MainWindow::changeEvent(QEvent * e) {
|
||||
|
||||
void MainWindow::timerEvent(QTimerEvent * ) {
|
||||
//static double t = 0.;
|
||||
cam_light->setVisible(checkCameraLight->isChecked());
|
||||
cam_light->intensity = checkCameraLight->isChecked() ? 0.5 : 0.;
|
||||
//((RendererSimple*)(view->renderer()))->mpos = view->mapFromGlobal(QCursor::pos());
|
||||
statusBar()->showMessage(QString("FPS: %1").arg(QString::number(view->currentFPS(), 'f', 2)));
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>128.000000000000000</double>
|
||||
<double>2048.000000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>8.000000000000000</double>
|
||||
|
||||
@@ -83,6 +83,8 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
|
||||
sel_brush = QBrush(QColor(170, 100, 255, 120));
|
||||
camera().setAim(QVector3D(0,0,5.5));
|
||||
camera().setPos(QVector3D(10, 5, 5.5));
|
||||
camera().setName("Camera");
|
||||
addObject(camera());
|
||||
emit cameraPosChanged(camera().pos());
|
||||
//camera().aim_ = camera().pos_;
|
||||
ktm_.restart();
|
||||
@@ -150,21 +152,11 @@ void QGLView::initializeGL() {
|
||||
currentQGLView = (QGLWidget * )viewport();
|
||||
currentGLTextureManager = &textures_manager;
|
||||
currentCamera = &camera();
|
||||
//glEnable(GL_POLYGON_SMOOTH);
|
||||
glEnable(GL_TEXTURE_MAX_ANISOTROPY_EXT);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
//glEnable(GL_TEXTURE_2D);
|
||||
//glEnable(GL_TEXTURE_CUBE_MAP);
|
||||
glEnableDepth();
|
||||
glEnable(GL_CULL_FACE);
|
||||
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glEnableClientState(GL_NORMAL_ARRAY);
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
|
||||
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
|
||||
|
||||
glActiveTextureChannel(3);
|
||||
glEnable(GL_TEXTURE_GEN_S);
|
||||
glEnable(GL_TEXTURE_GEN_T);
|
||||
@@ -176,13 +168,8 @@ void QGLView::initializeGL() {
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
|
||||
glActiveTextureChannel(0);
|
||||
//glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NONE);
|
||||
//glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NONE);
|
||||
|
||||
//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glColorMaterial(GL_FRONT, GL_DIFFUSE);
|
||||
|
||||
@@ -277,9 +264,9 @@ void QGLView::paintGL() {
|
||||
}
|
||||
fbo_selection.release();
|
||||
glEnableDepth();
|
||||
glEnableClientState(GL_NORMAL_ARRAY);
|
||||
/*glEnableClientState(GL_NORMAL_ARRAY);
|
||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);
|
||||
glEnableClientState(GL_COLOR_ARRAY);*/
|
||||
}
|
||||
|
||||
camera().apply(aspect);
|
||||
|
||||
@@ -157,7 +157,7 @@ public:
|
||||
int objectsCount(bool all = false) {if (!all) return objects_.childCount(); int cnt = 0; objectsCountInternal(&cnt, &objects_); return cnt;}
|
||||
void removeObject(GLObjectBase * o, bool inChildren = true) {if (inChildren) removeObjectInternal(o, &objects_); else objects_.removeChild(o);}
|
||||
void removeObject(GLObjectBase & o, bool inChildren = true) {removeObject(&o, inChildren);}
|
||||
void clearObjects(bool deleteAll = false) {objects_.clearChildren(deleteAll); sel_obj = hov_obj = 0;}
|
||||
void clearObjects(bool deleteAll = false) {objects_.clearChildren(deleteAll); addObject(camera()); sel_obj = hov_obj = 0;}
|
||||
QList<GLObjectBase * > objects(bool all = false) {return objects_.children(all);}
|
||||
|
||||
int lightsCount() const {return lights_.size();}
|
||||
|
||||
@@ -31,7 +31,8 @@ fbo_g(5, true, GL_RGBA16F), fbo_out(3, false, GL_RGB16F), fbo_hsmall(1, false, G
|
||||
<< ShaderPair("bloom_pass_1", &shader_bloom_1)
|
||||
<< ShaderPair("fbo_add", &shader_fbo_add)
|
||||
<< ShaderPair("motion_blur", &shader_motion_blur)
|
||||
<< ShaderPair("shadow", &shader_shadow);
|
||||
<< ShaderPair("shadow", &shader_shadow)
|
||||
<< ShaderPair("ssr", &shader_ssr);
|
||||
for (int i = 0; i < shaders.size(); ++i)
|
||||
*(shaders[i].second) = 0;
|
||||
lights_per_pass = 8;
|
||||
@@ -194,6 +195,27 @@ void RendererDeferredShading::renderScene() {
|
||||
glActiveTextureChannel(0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||
|
||||
if (view.isFeatureEnabled(QGLView::qglDynamicReflectionsEnabled)) {
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
glActiveTextureChannel(1);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(0));
|
||||
glActiveTextureChannel(2);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_g.colorTexture(1));
|
||||
shader_ssr->bind();
|
||||
shader_ssr->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
shader_ssr->setUniformValue("dt", QVector2D(1. / fbo_out.width(), 1. / fbo_out.height()));
|
||||
shader_ssr->setUniformValue("t0", 1);
|
||||
shader_ssr->setUniformValue("t1", 2);
|
||||
shader_ssr->setUniformValue("ts", 0);
|
||||
//shader_ssr->setUniformValue("ts", 1);
|
||||
shader_ssr->setUniformValue("factor", GLfloat(view.feature(QGLView::qglMotionBlurFactor).toDouble()));
|
||||
shader_ssr->setUniformValue("steps", view.feature(QGLView::qglMotionBlurSteps).toInt());
|
||||
glDrawQuad(shader_ssr);
|
||||
glActiveTextureChannel(0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(wi));
|
||||
piSwap<int>(wi, ri);
|
||||
}
|
||||
|
||||
if (view.isFeatureEnabled(QGLView::qglEyeAccomodationEnabled)) {
|
||||
fbo_hsmall.bind();
|
||||
fbo_hsmall.setWriteBuffer(0);
|
||||
@@ -256,7 +278,8 @@ void RendererDeferredShading::renderScene() {
|
||||
fbo_out.setWriteBuffer(2);
|
||||
fbo_out.setReadBuffer(ri);
|
||||
glBlitFramebuffer(0, 0, fbo_out.width(), fbo_out.height(), 0, 0, fbo_out.width(), fbo_out.height(), GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
|
||||
QTime tm;
|
||||
tm.restart();
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
shader_bloom_0->bind();
|
||||
shader_bloom_0->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
@@ -284,7 +307,7 @@ void RendererDeferredShading::renderScene() {
|
||||
piSwap<int>(wi, ri);
|
||||
crad *= 2;
|
||||
}
|
||||
|
||||
qDebug() << tm.elapsed();
|
||||
fbo_out.setWriteBuffer(wi);
|
||||
glActiveTextureChannel(0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_out.colorTexture(ri));
|
||||
@@ -345,11 +368,6 @@ void RendererDeferredShading::reloadShaders() {
|
||||
|
||||
|
||||
void RendererDeferredShading::setupShadersTextures(GLObjectBase & object, GLRendererBase::RenderingParameters & rp) {
|
||||
shader_ds_0->setUniformValue("has_diffuse", object.material().map_diffuse.bitmap_id != 0);
|
||||
shader_ds_0->setUniformValue("has_bump", object.material().map_normal.bitmap_id != 0);
|
||||
shader_ds_0->setUniformValue("has_height", object.material().map_relief.bitmap_id != 0);
|
||||
shader_ds_0->setUniformValue("bump_scale", object.material().map_normal.color_amount);
|
||||
shader_ds_0->setUniformValue("height_scale", object.material().map_relief.color_amount);
|
||||
glActiveTextureChannel(6);
|
||||
glBindTexture(GL_TEXTURE_2D, white_image_id);
|
||||
glActiveTextureChannel(7);
|
||||
|
||||
@@ -47,7 +47,7 @@ private:
|
||||
GLFramebuffer fbo_g, fbo_out, fbo_hsmall;
|
||||
QGLShaderProgram * shader_fxaa, * shader_ds_0, * shader_ds_1, * shader_hdr, * shader_small;
|
||||
QGLShaderProgram * shader_bloom_0, * shader_bloom_1, * shader_motion_blur, * shader_fbo_add;
|
||||
QGLShaderProgram * shader_shadow;
|
||||
QGLShaderProgram * shader_shadow, * shader_ssr;
|
||||
QVector<ShaderPair> shaders;
|
||||
|
||||
QMatrix4x4 prev_view, prev_proj;
|
||||
|
||||
@@ -50,8 +50,8 @@ void main(void) {
|
||||
vec3 speed = pos.xyz/pos.w - ppos.xyz/ppos.w;
|
||||
//speed /= abs(pos.z);
|
||||
|
||||
gl_FragDepth = logz;
|
||||
qgl_FragData[0] = vec4(dc.rgb, pos.z);
|
||||
//gl_FragDepth = logz;
|
||||
qgl_FragData[0] = vec4(dc.rgb, pos.w);
|
||||
qgl_FragData[1] = vec4(n.xyz / 2. + vec3(0.5), specularity);
|
||||
qgl_FragData[2] = vec4(spec.rgb, hei);
|
||||
qgl_FragData[3] = vec4(self.rgb, bn.x);
|
||||
|
||||
@@ -134,7 +134,7 @@ void main(void) {
|
||||
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 = vec3(vds2.x*1);
|
||||
//qgl_FragData[0].rgb = vec3(abs((v0.w)/50));
|
||||
//qgl_FragData[0].rgb = li + vec3(texelFetch(t_pp, tc, 0).xyz);
|
||||
//shd = shd - shp.w;
|
||||
|
||||
|
||||
17
qglview/shaders/ssr.frag
Normal file
17
qglview/shaders/ssr.frag
Normal file
@@ -0,0 +1,17 @@
|
||||
#version 150
|
||||
|
||||
uniform sampler2D t0, t1, ts;
|
||||
uniform float z_near, z_far;
|
||||
|
||||
void main(void) {
|
||||
ivec2 tc = ivec2(gl_FragCoord.xy);
|
||||
vec2 sp = qgl_FragTexture.xy;
|
||||
vec4 v0 = texelFetch(t0, tc, 0), v1 = texelFetch(t1, tc, 0), vs = texelFetch(ts, tc, 0);
|
||||
vec3 dc = v0.rgb, n = v1.xyz * 2. - vec3(1.);
|
||||
vec3 vd = vec3(0, 0, 1);
|
||||
vec3 rn = reflect(vd, n);
|
||||
float coeff = clamp(dot(vd, rn), 0, 1);
|
||||
vec3 rvs = texture(ts, sp - rn.xy/v0.w).rgb;
|
||||
qgl_FragData[0].rgb = mix(vs.rgb, rvs, coeff);
|
||||
//qgl_FragData[0].rgb = vec3(v0.w/10);
|
||||
}
|
||||
6
qglview/shaders/ssr.vert
Normal file
6
qglview/shaders/ssr.vert
Normal file
@@ -0,0 +1,6 @@
|
||||
#version 150
|
||||
|
||||
void main(void) {
|
||||
qgl_FragTexture = qgl_Texture;
|
||||
gl_Position = qgl_ftransform();
|
||||
}
|
||||
Reference in New Issue
Block a user