diff --git a/qglview/glrendererbase.cpp b/qglview/glrendererbase.cpp index 8eac634..6d8c0a1 100644 --- a/qglview/glrendererbase.cpp +++ b/qglview/glrendererbase.cpp @@ -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); diff --git a/qglview/shaders/dsl_pass_1.frag b/qglview/shaders/dsl_pass_1.frag index 4049c9b..8b5f3ce 100644 --- a/qglview/shaders/dsl_pass_1.frag +++ b/qglview/shaders/dsl_pass_1.frag @@ -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);