本文整理汇总了C++中Object3D::intersectLimitedTime方法的典型用法代码示例。如果您正苦于以下问题:C++ Object3D::intersectLimitedTime方法的具体用法?C++ Object3D::intersectLimitedTime怎么用?C++ Object3D::intersectLimitedTime使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Object3D
的用法示例。
在下文中一共展示了Object3D::intersectLimitedTime方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: intersectLocalLimitedTime
Intersection* CSGIntersect::intersectLocalLimitedTime(const Ray &shoot, DBL tmax) const {
assert(isclosed);
stat.eval();
CSGIntersectIntersection* i = 0;
// fill Array with initial values
for(unsigned int j=0; j<objects->listsize; j++) {
Object3D* current = static_cast<Object3D*>(objects->list[j]);
double t;
if ( (t=current->intersectBounding(shoot,tmax))!=INTERSECTION_TIME_EPSILON ) {
if (t > INTERSECTION_TIME_EPSILON) {
// boundingbox hit
if (i == 0) i = new CSGIntersectIntersection(this,shoot,tmax);
i->put(0,t,current);
continue;
}
} else {
// there is no boundingbox or we are inside
Intersection* ci = current->intersectLimitedTime(shoot,tmax);
if (ci) {
if (i == 0) i = new CSGIntersectIntersection(this,shoot,tmax);
i->put(ci,ci->currentTime(),current);
continue;
}
}
// no intersection with that object, test if we are inside
Vector3 testpoint = Vector3::add( shoot.getOrigin(), shoot.getDirection() );
if (static_cast<const Object3D*>(current)->isInsideAtBounded(testpoint)==false) {delete(i); return 0;}
}
if (i) {
// build up structure
if (i->init() == false) {delete(i); return 0;}
stat.success();
}
return i;
}