relief map support, small refactoring, shadow bias now based on geometry normal
This commit is contained in:
@@ -30,7 +30,7 @@
|
||||
using namespace QGLEngineShaders;
|
||||
|
||||
|
||||
RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view, 6, true, GL_RGBA16F) {
|
||||
RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view, 7, true, GL_RGBA16F) {
|
||||
mat_sphere = Primitive::ellipsoid(16, 16);
|
||||
mat_camera = new Camera();
|
||||
mat_camera->setPos(QVector3D(2, 2, 2));
|
||||
@@ -38,6 +38,7 @@ RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view,
|
||||
mat_camera->setFOV(45.);
|
||||
mat_light = new Light();
|
||||
mat_light->setPos(QVector3D(50, 100, 25));
|
||||
mat_light->setCastShadows(false);
|
||||
last_thumb_material = 0;
|
||||
}
|
||||
|
||||
@@ -74,6 +75,8 @@ void RendererMaterial::renderMaterial(Material * m) {
|
||||
if (r->bindShader(role, &prog)) {
|
||||
r->setUniformMaps(prog);
|
||||
r->setUniformCamera(prog, mat_camera, true, fbo_mat_thumb.size());
|
||||
prog->setUniformValue("out_index_normal", Renderer::dbrNormalZ);
|
||||
prog->setUniformValue("out_index_metal", Renderer::dbrMetalRoughReflectFlags);
|
||||
// qDebug() << mat_camera->viewMatrix();
|
||||
r->textures_empty.bind(f, tarEmpty);
|
||||
r->textures_maps.bind(f, tarMaps);
|
||||
@@ -83,15 +86,18 @@ void RendererMaterial::renderMaterial(Material * m) {
|
||||
mat_sphere->loadObject(f, o);
|
||||
mat_sphere->draw(f, 1);
|
||||
}
|
||||
fbo_mat_thumb.bindColorTextures();
|
||||
fbo_mat_thumb.bindDepthTexture(5);
|
||||
fbo_mat_thumb.setWriteBuffer(5);
|
||||
fbo_mat_thumb.bindColorTextures({Renderer::dbrDiffuse,
|
||||
Renderer::dbrNormalZ,
|
||||
Renderer::dbrMetalRoughReflectFlags,
|
||||
Renderer::dbrEmission,
|
||||
Renderer::dbrSpeedBitangXY,
|
||||
Renderer::dbrGeoNormal});
|
||||
fbo_mat_thumb.setWriteBuffer(6);
|
||||
if (r->bindShader(Renderer::srLightOmniPass, &prog)) {
|
||||
r->setUniformCamera(prog, mat_camera, true, fbo_mat_thumb.size());
|
||||
r->setUniformViewCorners(prog, mat_camera, fbo_mat_thumb.size());
|
||||
for (int i = 0; i < 5; ++i)
|
||||
for (int i = 0; i <= 5; ++i)
|
||||
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
|
||||
prog->setUniformValue("tex_d", 5);
|
||||
prog->setUniformValue("lights_start", 0);
|
||||
prog->setUniformValue("lights_count", 1);
|
||||
QMap<int, QList<Light *>> mat_l;
|
||||
@@ -102,7 +108,7 @@ void RendererMaterial::renderMaterial(Material * m) {
|
||||
r->renderQuad(prog, r->quad, mat_camera);
|
||||
r->view->scene()->setLightsChanged();
|
||||
}
|
||||
fbo_mat_thumb.queryImage(5);
|
||||
fbo_mat_thumb.queryImage(6);
|
||||
fbo_mat_thumb.release();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user