XNA MathHelper. SmoothStep?Как это работает?

У меня есть автомобиль, и при ускорении я хочу, чтобы скорость увеличивалась "медленно"..

После рассмотрения нескольких сайтов я пришел к выводу, что метод SmoothStep мог использоваться, чтобы сделать это?

Я в значительной степени знаю, как переместить структуры и материал, таким образом, пример, где smoothstep используется для увеличивания значения в плавании или чем-то как этот, был бы чрезвычайно полезен!

Заранее спасибо :)

Я думаю, что грустно, что нет примеров для всех методов в библиотеке MSDN.

5
задан hippietrail 26 September 2019 в 08:41
поделиться

3 ответа

SmoothStep не поможет Вам здесь. SmoothStep является двумя функциями интерполяции значения. Это делает что-то подобное интерполяции пазухи. Это ускорится, медленно имеют резкую скорость приблизительно в x=0.5 и затем замедляются к прибытию (x=1.0).

Как следующее:

smoothstep_approx

Это приблизительно, реальная функция не имеют этих точных чисел.

Да Вы могли использовать x=0.. 0.5 для достижения эффекта Вы хотите, но с очень небольшим управлением ускоряющей кривой.

Если бы Вы хотите действительно ускорить автомобиль или какой-либо другой объект, Ваш лучший выбор состоял бы в том, чтобы отслеживать ускорение и скорость собой.

class Car : GameComponent
{
    public override void Update(GameTime time)
    {
         velocity += acceleration * time.ElapsedGameTime.TotalSeconds;
         position += velocity * time.ElapsedGameTime.TotalSeconds;
    }

    Vector3 position;
    Vector3 velocity;
    Vector3 acceleration;
}

положение, скорость и ускорение, являющееся Vector2 или Vector3 в зависимости от того, сколько использует размер Ваше игровое состояние. Кроме того, обратите внимание, что эта форма интеграции подвержена небольшим математическим ошибкам.

13
ответ дан 18 December 2019 в 08:31
поделиться

Очень полезный сайт я нашел тем временем. http://johnnygizmo.blogspot.com/2008/10/xna-series-basic-ai.html

0
ответ дан 18 December 2019 в 08:31
поделиться

Из этой документации похоже, что SmoothStep берет 3 аргумента - два значения, которые Вы хотите переместить между и сумма между ними, которая, вероятно, должна быть между 0 и 1.
Поэтому скажите, что у Вас есть плавание f, который увеличивает линейно от 0 до целевой скорости в течение времени. вместо того, чтобы использовать f непосредственно в качестве скорости, с помощью SmoothStep был бы похож на это:

float speed = MathHelper.SmoothStep(0, destSpeed, f/destSpeed);

Действительно удивительно, как плохо эта документация.

6
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: