有什么方法可以让PhysX 4.1 CCT使用自定义重力向下倾斜?

时间:2019-12-13 14:45:56

标签: c++ game-physics physx

默认情况下,PhysX似乎将脚的“摩擦”设置为无穷大,因此用向下的力(如重力)来调用move不会使您站在倾斜的表面上时滑落

那与我想要的完全相反。我知道PxControllerNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING,但似乎并没有使用任何重力或加速度,而且我也没有使用内置的slopeLimit值。还有setPreventVerticalSlidingAgainstCeiling(),所以地板上不存在类似的东西似乎有些奇怪。

那么,有没有内置的方法可以消除这种人为摩擦,并允许以CCT可以沿着墙壁和天花板滑动的相同方式垂直滑动?如果没有,如何生成遵循表面法线的新的向下运动矢量?我对与数学有关的任何事情都非常恐惧,因此(psuedo-)代码示例将不胜感激。

1 个答案:

答案 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; } 类的实例。