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:
2023-05-25 15:50:07 +03:00
parent 85bc739987
commit dfc4c718e8
15 changed files with 180 additions and 56 deletions

View File

@@ -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");