git-svn-id: svn://db.shs.com.ru/libs@52 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2015-11-30 20:53:22 +00:00
parent fc0b593329
commit 36ba0a0ba7
12 changed files with 143 additions and 94 deletions

View File

@@ -229,6 +229,38 @@ void GLRendererBase::renderSingleObject(GLObjectBase & o, RenderingParameters &
}
void GLRendererBase::renderShadow(Light * l) {
Camera cam;
QVector3D wp = l->worldPos();
cam.setPos(wp);
cam.setAim(wp + (l->worldTransform() * QVector4D(l->direction, 0).toVector3D()));
cam.apply(1.);
RenderingParameters rpl;
rpl.pass = GLObjectBase::Solid;
rpl.shaders = 0;
rpl.textures = rpl.light = rpl.fog = false;
rpl.view_matrix = getGLMatrix(GL_MODELVIEW_MATRIX);
rpl.proj_matrix = getGLMatrix(GL_PROJECTION_MATRIX);
//glPushMatrix();
renderSingleShadow(view.objects_, rpl);
//glPopMatrix();
}
void GLRendererBase::renderSingleShadow(GLObjectBase & o, RenderingParameters & rpl) {
if (!o.isInit())
o.init();
if (!o.visible_) return;
setGLMatrix(rpl.view_matrix * o.itransform_);
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_);
glPointSize(o.line_width > 0. ? o.line_width : view.lineWidth_);
o.draw(0, true);
foreach (GLObjectBase * i, o.children_)
renderSingleShadow(*i, rpl);
}
void GLRendererBase::RenderingParameters::prepare() {