默认情况下,PhysX似乎将脚的“摩擦”设置为无穷大,因此用向下的力(如重力)来调用move
不会使您站在倾斜的表面上时滑落
那与我想要的完全相反。我知道PxControllerNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING
,但似乎并没有使用任何重力或加速度,而且我也没有使用内置的slopeLimit
值。还有setPreventVerticalSlidingAgainstCeiling()
,所以地板上不存在类似的东西似乎有些奇怪。
那么,有没有内置的方法可以消除这种人为摩擦,并允许以CCT可以沿着墙壁和天花板滑动的相同方式垂直滑动?如果没有,如何生成遵循表面法线的新的向下运动矢量?我对与数学有关的任何事情都非常恐惧,因此(psuedo-)代码示例将不胜感激。
答案 0 :(得分:0)
结果是我看不懂,而我的问题的答案恰好在SDK Guide中。
我只需要实现一个<ScrollViewer Height="500" x:Name="MyScrollViewer">
<Button Height = "2000">
<Button.ContextMenu>
<ContextMenu x:Name="MyContextMenu">
<MenuItem Header="Item1"></MenuItem>
<MenuItem Header="Item2"></MenuItem>
<MenuItem Header="Item3"></MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
</ScrollViewer>
,并使每个函数返回public MainWindow()
{
InitializeComponent();
this.MyContextMenu.MouseWheel += OnContextMenuMouseWheel;
}
private void OnContextMenuMouseWheel(object sender, MouseWheelEventArgs e)
{
var currentOffset = MyScrollViewer.VerticalOffset;
var newOffset = currentOffset - e.Delta;
MyScrollViewer.ScrollToVerticalOffset(newOffset);
e.Handled = true;
}
。
PxControllerBehaviorCallback
然后将PxControllerBehaviorFlag::eCCT_SLIDE
设置为我的 virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxShape& shape, const physx::PxActor& actor) {
return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
}
virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxController& controller) {
return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
}
virtual physx::PxControllerBehaviorFlags getBehaviorFlags(const physx::PxObstacle& obstacle) {
return physx::PxControllerBehaviorFlag::eCCT_SLIDE;
}
类的实例。