Skip to content

TSdlHapticDirection

Structure that represents a haptic direction.

This is the direction where the force comes from, instead of the direction in which the force is exerted.

Directions can be specified by:

  • TSdlHapticDirectionKind.Polar : Specified by polar coordinates.
  • TSdlHapticDirectionKind.Cartesian: Specified by cartesian coordinates.
  • TSdlHapticDirectionKind.Spherical: Specified by spherical coordinates.

Cardinal directions of the haptic device are relative to the positioning of the device. North is considered to be away from the user.

The following diagram represents the cardinal directions:

                .--.
                |__| .-------.
                |=.| |.-----.|
                |--| ||     ||
                |  | |'-----'|
                |__|~')_____('
                  [ COMPUTER ]

                    North (0,-1)
                        ^
                        |
                        |
  (-1,0)  West ˂----[ HAPTIC ]----˃ East (1,0)
                        |
                        |
                        v
                     South (0,1)

                     [ USER ]
                       \|||/
                       (o o)
                 ---ooO-(_)-Ooo---

If type is TSdlHapticDirectionKind.Polar, direction is encoded by hundredths of a degree starting north and turning clockwise. TSdlHapticDirectionKind.Polar only uses the first Dir property. The cardinal directions would be:

  • North: 0 (0 degrees)
  • East : 9000 (90 degrees)
  • South: 18000 (180 degrees)
  • West : 27000 (270 degrees)

If type is TSdlHapticDirectionKind.Cartesian, direction is encoded by three positions (X axis, Y axis and Z axis (with 3 axes)). TSdlHapticDirectionKind.Cartesian uses the first three Dir properties. The cardinal directions would be:

  • North: 0,-1, 0
  • East : 1, 0, 0
  • South: 0, 1, 0
  • West : -1, 0, 0

The Z axis represents the height of the effect if supported, otherwise it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can use any multiple you want, only the direction matters.

If type is TSdlHapticDirectionKind.Spherical, direction is encoded by two rotations. The first two Dir properties are used. The Dir properties are as follows (all values are in hundredths of degrees):

  • Degrees from (1, 0) rotated towards (0, 1).
  • Degrees towards (0, 0, 1) (device needs at least 3 axes).

Example of force coming from the south with all encodings (force coming from the south means the user will have to pull the stick to counteract):

  var Direction: TSdlHapticDirection;

  // Cartesian directions
  Direction.Kind := TSdlHapticDirectionKind.Cartesian; // Using cartesian direction encoding.
  Direction.Dir[0] := 0; // X position
  Direction.Dir[1] := 1; // Y position
  // Assuming the device has 2 axes, we don't need to specify third parameter.

  // Polar directions
  Direction.Kind := TSdlHapticDirectionKind.Polar; // We'll be using polar direction encoding.
  Direction.Dir[0] := 18000; // Polar only uses first parameter

  // Spherical coordinates
  Direction.Kind := TSdlHapticDirectionKind.Spherical; // Spherical encoding
  Direction.Dir[0] := 9000; // Since we only have two axes we don't need more parameters.

Definition

Unit: Neslib.Sdl3.Haptic

type TSdlHapticDirection = record ... end;

See Also

Properties

Name Description
Dir The encoded direction.
Kind The type of encoding.

Property Descriptions

Dir

The encoded direction.

property Dir[const AIndex: Integer]: Integer read GetDir write SetDir

Type: Integer


Kind

The type of encoding.

property Kind: TSdlHapticDirectionKind read GetKind write SetKind

Type: TSdlHapticDirectionKind