version 1.2.1
spot light without shadows and with texture fix mesh information points width and points-only meshes support
This commit is contained in:
@@ -304,6 +304,24 @@ void Renderer::fillObjectsBuffer(const ObjectBaseList & ol, RenderPass pass) {
|
||||
}
|
||||
|
||||
|
||||
void Renderer::setConeShadowMatrix() {
|
||||
auto cone_ll = cur_lights.value(Light::Cone);
|
||||
for (int i = 0; i < cone_ll.size(); ++i) {
|
||||
Light * l = cone_ll[i];
|
||||
QMatrix4x4 pm = glMatrixPerspective(l->angle_end, 1., 0.1), om, vm;
|
||||
om.translate(-l->worldAim());
|
||||
vm.translate(0., 0., -l->distance());
|
||||
// vm.rotate(-roll_, 0., 0., 1.);
|
||||
QMatrix4x4 pmat = l->worldTransform();
|
||||
pmat(0, 3) = pmat(1, 3) = pmat(2, 3) = 0.;
|
||||
vm *= pmat.inverted();
|
||||
auto vpm = pm * (vm * om);
|
||||
l->view_proj_matrix = vpm;
|
||||
l->shadow_matrix = mat_norm_to_tex_coord * vpm * mat_camera_fullview_inv;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Renderer::renderObjects(Scene & scene, RenderPass pass) {
|
||||
QOpenGLExtraFunctions * f = view;
|
||||
QMapIterator<Mesh *, ObjectBaseList> it(scene.geometries_used[pass]);
|
||||
@@ -403,20 +421,11 @@ void Renderer::renderConeShadows() {
|
||||
}
|
||||
depth_maps_cone.resize(f, view->shadow_map_size, cone_ll.size());
|
||||
for (int i = 0; i < cone_ll.size(); ++i) {
|
||||
Light * l = cone_ll[i];
|
||||
QMatrix4x4 pm = glMatrixPerspective(l->angle_end, 1., 0.1), om, vm;
|
||||
om.translate(-l->worldAim());
|
||||
vm.translate(0., 0., -l->distance());
|
||||
// vm.rotate(-roll_, 0., 0., 1.);
|
||||
QMatrix4x4 pmat = l->worldTransform();
|
||||
pmat(0, 3) = pmat(1, 3) = pmat(2, 3) = 0.;
|
||||
vm *= pmat.inverted();
|
||||
auto vpm = pm * (vm * om);
|
||||
Light * l = cone_ll[i];
|
||||
if (l->isCastShadows()) {
|
||||
prog->setUniformValue("qgl_ViewProjMatrix", vpm);
|
||||
prog->setUniformValue("qgl_ViewProjMatrix", l->view_proj_matrix);
|
||||
renderConeShadow(i, l);
|
||||
}
|
||||
l->shadow_matrix = mat_norm_to_tex_coord * vpm * mat_camera_fullview_inv;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -533,6 +542,9 @@ void Renderer::renderScene() {
|
||||
}
|
||||
phase.end();
|
||||
|
||||
/// setup cone lights matrices
|
||||
setConeShadowMatrix();
|
||||
|
||||
if (view->shadows()) {
|
||||
/// cone shadows and shadow matrix
|
||||
phase.begin("shadows cone");
|
||||
|
||||
Reference in New Issue
Block a user