本文整理汇总了C++中Box3f::intersects方法的典型用法代码示例。如果您正苦于以下问题:C++ Box3f::intersects方法的具体用法?C++ Box3f::intersects怎么用?C++ Box3f::intersects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Box3f
的用法示例。
在下文中一共展示了Box3f::intersects方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: trackDrag
void ViewportGadget::trackDrag( const DragDropEvent &event )
{
// early out if tracking is off for any reason.
if( !getDragTracking() || !getCameraEditable() )
{
m_dragTrackingIdleConnection.disconnect();
return;
}
// we automatically scroll to track drags when the mouse is
// near the edge of our viewport. figure out an inset box within
// which we _don't_ perform tracking - if the mouse leaves this then
// we'll track it.
const V2i viewport = getViewport();
const float borderWidth = std::min( std::min( viewport.x, viewport.y ) / 8.0f, 60.0f );
const Box3f viewportBox(
V3f( borderWidth, borderWidth, -1000.0f ),
V3f( viewport.x - borderWidth, viewport.y - borderWidth, 1000.0f )
);
// figure out the offset, if any, of the mouse outside this central box.
V2f offset( 0.0f );
if( !viewportBox.intersects( event.line.p0 ) )
{
const V3f offset3 = event.line.p0 - closestPointOnBox( event.line.p0, viewportBox );
offset = V2f( offset3.x, offset3.y );
}
const float offsetLength = clamp( offset.length(), 0.0f, borderWidth );
// update our tracking threshold. the mouse has to go past this offset before
// tracking starts. this allows us to avoid tracking too early when a drag is
// started inside the tracking area, but the user is dragging back into the
// center of frame.
m_dragTrackingThreshold = std::min( offsetLength, m_dragTrackingThreshold );
// figure out our drag velocity. we ramp up the speed of the scrolling from 0
// to a maximum at the edge of the viewport, and clamp it so it doesn't get any
// faster outside of the viewport. although getting even faster when the mouse
// is outside the viewport might be nice, it results in an inconsistent
// experience where a viewport edge is at the edge of the screen and the mouse
// can't go any further.
m_dragTrackingVelocity = -offset.normalized() * borderWidth * lerpfactor( offsetLength, m_dragTrackingThreshold, borderWidth );
// we don't actually do the scrolling in this function - instead we ensure that
// trackDragIdle will be called to apply the scrolling on idle events.
// this allows the scrolling to happen even when the mouse isn't moving.
if( m_dragTrackingVelocity.length() > 0.0001 )
{
m_dragTrackingEvent = event;
if( !m_dragTrackingIdleConnection.connected() )
{
m_dragTrackingTime = currentTime();
m_dragTrackingIdleConnection = idleSignal().connect( boost::bind( &ViewportGadget::trackDragIdle, this ) );
}
}
else
{
m_dragTrackingIdleConnection.disconnect();
}
}