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

This commit is contained in:
2019-10-15 22:22:04 +00:00
parent f376c7e77e
commit 58d504dfb2
2 changed files with 25 additions and 24 deletions

View File

@@ -234,7 +234,7 @@ void GLRendererBase::renderShadow(Light * l, QOpenGLShaderProgram * prog, QMatri
Camera cam;
QVector3D wp = l->worldPos();
cam.setPos(wp);
cam.setAim(wp + (/*l->worldTransform() */ QVector4D(l->direction)).toVector3D());
cam.setAim(wp + (l->worldTransform() * QVector4D(l->direction)).toVector3D());
cam.setDepthStart(view.camera()->depthStart());
cam.setDepthEnd(view.camera()->depthEnd());
cam.setFOV(l->angle_end);

View File

@@ -41,35 +41,36 @@ void calcLight(in int index, in vec3 n, in vec3 v, in vec4 v2) {
float scos = max(dot(-ldir, qgl_Light[index].direction.xyz), 0.);
spot *= scos * step(qgl_Light[index].endAngleCos, scos);
spot *= smoothstep(qgl_Light[index].endAngleCos, qgl_Light[index].startAngleCos, scos);
//lwdir = /*mat3(mat_viewi) * */qgl_Light[index].direction.xyz;
//lwdir = mat3(mat_viewi) * qgl_Light[index].direction.xyz;
//bn = normalize(cross(lwdir, vec3(1, 0, 0)));
//bn2 = normalize(cross(lwdir, bn));
float ds = ldist/200.;//max(abs(sdist) / 5000, 0.02);
//spot *= clamp(1. - sdist, 0, 1);
vds = ds * bn.xyz;
vds2 = ds * bn2.xyz;
float shadow = getShadow(index, pos.xyz, vec3(0)) * 3. +
getShadow(index, pos.xyz, vds ) * 2. +
getShadow(index, pos.xyz, - vds ) * 2. +
getShadow(index, pos.xyz, - vds2 ) * 2. +
getShadow(index, pos.xyz, + vds2 ) * 2. +
getShadow(index, pos.xyz, vds - vds2 ) * 1.5 +
getShadow(index, pos.xyz, vds + vds2 ) * 1.5 +
getShadow(index, pos.xyz, - vds - vds2 ) * 1.5 +
getShadow(index, pos.xyz, - vds + vds2 ) * 1.5 +
getShadow(index, pos.xyz, vds + vds ) +
getShadow(index, pos.xyz, - vds - vds ) +
getShadow(index, pos.xyz, - vds2 - vds2) +
getShadow(index, pos.xyz, + vds2 + vds2) +
getShadow(index, pos.xyz, vds + vds - vds2 ) +
getShadow(index, pos.xyz, - vds - vds - vds2 ) +
getShadow(index, pos.xyz, vds + vds + vds2 ) +
getShadow(index, pos.xyz, - vds - vds + vds2 ) +
getShadow(index, pos.xyz, vds - vds2 - vds2) +
getShadow(index, pos.xyz, vds + vds2 + vds2) +
getShadow(index, pos.xyz, - vds - vds2 - vds2) +
getShadow(index, pos.xyz, - vds + vds2 + vds2);
spot *= mix(1., shadow / 29., shadow_on);
float shadow = getShadow(index, pos.xyz, vec3(0)) * 3.;
shadow += getShadow(index, pos.xyz, vds ) * 2.;
shadow += getShadow(index, pos.xyz, - vds ) * 2.;
shadow += getShadow(index, pos.xyz, - vds2 ) * 2.;
shadow += getShadow(index, pos.xyz, + vds2 ) * 2.;
/*shadow += getShadow(index, pos.xyz, vds - vds2 ) * 1.5;
shadow += getShadow(index, pos.xyz, vds + vds2 ) * 1.5;
shadow += getShadow(index, pos.xyz, - vds - vds2 ) * 1.5;
shadow += getShadow(index, pos.xyz, - vds + vds2 ) * 1.5;
shadow += getShadow(index, pos.xyz, vds + vds );
shadow += getShadow(index, pos.xyz, - vds - vds );
shadow += getShadow(index, pos.xyz, - vds2 - vds2);
shadow += getShadow(index, pos.xyz, + vds2 + vds2);
shadow += getShadow(index, pos.xyz, vds + vds - vds2 );
shadow += getShadow(index, pos.xyz, - vds - vds - vds2 );
shadow += getShadow(index, pos.xyz, vds + vds + vds2 );
shadow += getShadow(index, pos.xyz, - vds - vds + vds2 );
shadow += getShadow(index, pos.xyz, vds - vds2 - vds2);
shadow += getShadow(index, pos.xyz, vds + vds2 + vds2);
shadow += getShadow(index, pos.xyz, - vds - vds2 - vds2);
shadow += getShadow(index, pos.xyz, - vds + vds2 + vds2);*/
//shadow += shadow += getShadow(index, pos.xyz, vds+vds2)*10;
spot *= mix(1., shadow / 11., shadow_on);
}
spot /= (qgl_Light[index].constantAttenuation + ldist * (qgl_Light[index].linearAttenuation + ldist * qgl_Light[index].quadraticAttenuation));
///li += spot * gl_LightSource[index].diffuse.rgb * light_diffuse(0, ldir, n);