Nie ma znormalizowanego sposobu.
Różne urządzenia mają różne możliwości i ograniczenia dudnienia.
Zdecydowana większość urządzeń nie obsługuje rzeczywistego „sprzężenia zwrotnego siły” (np. Kierownica, która po uderzeniu w krawężnik / dziurę pozwala programatorowi przesunąć się z powrotem pod określonym kątem), ale po prostu huknie w niekontrolowanym / arbitralnym kierunku.
Dlatego większość funkcji Force Feedback wspomnianych w MSDN / DirectX i innych interfejsach API nigdy tak naprawdę nie pojawiła się w praktyce na rynku użytkowników ani nie ma tak słabych i / lub nieprzenośnych implementacji „inteligentnych” elementów sterujących (obwiednia, powtórzenie itp.), Jak być tak bezużytecznym, że w praktyce programiści często zmuszeni są po prostu używać kontrolek ON / OFF bezpośrednio z własną implementacją efektu.
Bardziej zaawansowane urządzenia, które umożliwiają sprzężenie zwrotne siły kontrolowane serwomechanizmem, wymagają niestandardowych interfejsów API, ponieważ ogólne interfejsy API wejściowe nie obsługują niezbędnych parametrów (dokładne kąty, dokładne siły, ograniczenia itp.).
Dodanie do mieszanki nowych technologii, takich jak rękawiczki VR, sprawia, że tych ogólnych interfejsów API brakuje jeszcze bardziej.
Najczęściej stosuje się dwa silniki prądu stałego o niesymetrycznym obciążeniu, każdy z nich jest cięższy niż drugi i nie ma precyzyjnej kontroli prędkości.
Przynajmniej masz nad nimi kontrolę nad włączaniem / wyłączaniem i możesz wykonywać ograniczoną kontrolę mocy PWM, ale nie dokładną kontrolę prędkości. Nie wiesz, jaka będzie prędkość i wynikająca z niej wibracja. Różne sterowniki mają różne silniki i ciężary, które będą pracować z różnymi prędkościami dla tego samego ustawienia.
Silniki muszą najpierw się zakręcić i wymagają pełnej mocy przez pewien czas, a następnie można ustawić PWM na niższe ustawienie. Opóźnienie rozruchu znacznie ogranicza czas reakcji.
Kontrolery są często aktualizowane raz na ramkę, co daje częstotliwość aktualizacji od około 20 Hz do 100 Hz. Ogranicza to rozdzielczość sterowania PWM, ponieważ nie chcesz, aby silniki zgasły przy najniższym ustawieniu. I nie wiesz, jak niskie mogą być silniki silników użytkownika końcowego przed przeciągnięciem (zatrzymaniem), więc potrzebujesz dobrego marginesu bezpieczeństwa.
Niektóre wymagania systemowe nakładają dalsze ograniczenia na to, co możesz z nimi zrobić.
Urządzenia mobilne zwykle mają tylko 1 silnik wibracyjny, a PWM może nie być możliwe z powodu niskiej bezwładności od wielkości ciężaru i powolnej aktualizacji. System może filtrować go dalej, aby zapobiec nadużyciom, a może nawet uszkodzeniom (limity tranzystorów sterownika mocy i skoki indukcyjne) lub po prostu bardzo powolny podsystem GPIO.
Na urządzeniach mobilnych możesz być ograniczony lub chcieć ograniczyć się do „wibracji przez około X * 50 milisekund” bez PWM.
Niektóre nowsze urządzenia i kontrolery mają elektromagnes napędzany jak głośnik przez falę audio o niskiej częstotliwości próbkowania. Dają ci większą kontrolę, ale są całkowicie różne od bardziej popularnych kontrolerów.
Z powodu wszystkich tych różnic może chcesz abstrakcyjnego systemu wibracji odgrywają ograniczoną liczbę wysokiej klasy efektów makro z nazwy w shoot-and-forget sposób: PlayVibration(player, "Got Loot");
, PlayVibration(player, "Heavy Fall");
, StopAllVibrationFor(player);
, ...
Następnie będziesz musiał stworzyć efekty wibracji niskiego poziomu i kod kontroli wibracji dostosowany indywidualnie do każdej platformy .
Nawet w przypadku gry muzycznej wymagającej jednorazowego użycia PlayVibration
dla każdego uderzenia łatwiej jest zarządzać i kontrolować, biorąc pod uwagę wstrzymywanie gry i problemy z ponowną synchronizacją niedoszłego generatora efektów okresowych.
Chociaż urządzenia z rzeczywistym dudnieniem napędzanym elektrozaworem można traktować jak urządzenie audio i używać interfejsów API audio ze względu na problemy z baterią, może to być niezgodne z przepisami systemu, jeśli elektromagnes jest stale zasilany / aktywny . „Poziom mocy 0” może nie być taki sam jak „Elektrozawór wyłączony”, więc nawet wtedy wymagana jest specjalna ostrożność.