git-svn-id: svn://db.shs.com.ru/libs@621 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user