void AmbientOcclusion::set_n_samples(unsigned n)
{
- if(n<1 || n>32)
+ if(n<1 || n>128)
throw out_of_range("AmbientOcclusion::set_n_samples");
- Vector3 sample_points[32];
+ vector<Vector3> sample_points(n);
for(unsigned i=0; i<n; ++i)
{
- float z = static_cast<float>(i)/n;
- float r = sqrt(1.0f-z*z);
+ float r = static_cast<float>(i)/n;
+ float z = sqrt(1.0f-r*r);
float d = radical_inverse(i);
Geometry::Angle<float> a = Geometry::Angle<float>::from_turns(d);
sample_points[i] = Vector3(cos(a)*r, sin(a)*r, z)*(0.1f+0.9f*d*d);
quad.draw(renderer);
}
+void AmbientOcclusion::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+ occlude_target.set_debug_name(name+" [RT]");
+ shdata.set_debug_name(name+" [UBO]");
+#else
+ (void)name;
+#endif
+}
+
AmbientOcclusion::Template::Template():
n_samples(16),