bool Cube::samplePosition(PathSampleGenerator &sampler, PositionSample &sample) const { float u = sampler.next1D(); int dim = sampleFace(u); float s = (dim + 1) % 3; float t = (dim + 2) % 3; Vec2f xi = sampler.next2D(); Vec3f n(0.0f); n[dim] = u < 0.5f ? -1.0f : 1.0f; Vec3f p(0.0f); p[dim] = n[dim]*_scale[dim]; p[s] = (xi.x()*2.0f - 1.0f)*_scale[s]; p[t] = (xi.y()*2.0f - 1.0f)*_scale[t]; sample.p = _rot*p + _pos; sample.pdf = _invArea; sample.uv = xi; sample.weight = PI*_area*(*_emission)[sample.uv]; sample.Ng = _rot*n; return true; }
void CompliantPlannerDlg::boxSampling(double a, double b, double c, double res) { std::list<GraspPlanningState*> sampling; res = 30; sampleFace( vec3(0, 1,0), vec3(-1,0,0), vec3(0,0,1) , a, c, vec3(0,-b,0), res, &sampling); sampleFace( vec3(0,-1,0), vec3( 1,0,0), vec3(0,0,1) , a, c, vec3(0, b,0), res, &sampling); sampleFace( vec3(0,0, 1), vec3(0,1,0), vec3(-1,0,0) , b, a, vec3(0,0,-c), res, &sampling); sampleFace( vec3(0,0,-1), vec3(0,1,0), vec3( 1,0,0) , b, a, vec3(0,0, c), res, &sampling); sampleFace( vec3( 1,0,0), vec3(0, 1,0), vec3(0,0,1) , b, c, vec3(-a,0,0), res, &sampling); sampleFace( vec3(-1,0,0), vec3(0,-1,0), vec3(0,0,1) , b, c, vec3( a,0,0), res, &sampling); DBGA("Sampled " << sampling.size() << " states."); mNumCandidates = sampling.size(); mPlanner->setInput(sampling); }