OpenTK 识别 PS4v2 控制器(通过 USB)

Posted

技术标签:

【中文标题】OpenTK 识别 PS4v2 控制器(通过 USB)【英文标题】:OpenTK Identify PS4v2 Controller (via USB) 【发布时间】:2018-08-18 17:57:29 【问题描述】:

当我使用OpenTK.Input.GamePad.GetName(i) 在我的 OpenTK 应用程序中查询连接 PS4 v2 的控制器的名称时,我得到“未映射的控制器”,并且轴和按钮值到处都是。我想让我的应用程序同时适用于 Xbox 360/One 和 PS3/4 控制器,因此我需要一种方法来区分两者并在需要时应用映射。

首先,我认为 OpenTK 缺乏对此类控制器的支持,这就是为什么它将它报告为未映射的控制器(我实际上只是检查了 OpenTK 源代码,似乎为 PS4 控制器定义了一个特定的映射,我我很惊讶为什么它不起作用。可能是因为 v2 版本吗?)。所以我需要一种方法来判断我连接的控制器是否是 PS4 控制器,以便在其上应用自定义映射。

有没有办法获取 OpenTK 游戏手柄的真实设备名称,而不是通用的“未映射控制器”标题?

我正在使用 OpenTK 3.0.1。

【问题讨论】:

【参考方案1】:

OpenTK 是跨平台的,你能分享一下你在哪个操作系统上使用它吗?许多游戏手柄驱动程序逻辑是特定于平台的。如果您使用的是基于 Linux 的操作系统,那么在涉及游戏手柄兼容性问题时,内核版本也很重要。

看起来 OpenTK 可能正在使用 SDL2 进行游戏手柄输入。如果是这种情况,您需要检查它使用的是哪个版本的 SDL2,并可能使用新的游戏手柄信息更新 gamecontrollerdb.txt 配置文件:

https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt

Dualshock 4 游戏手柄很复杂,您需要多个条目才能正确支持其所有版本和模式,尤其是在 Linux 上。除了 V1/V2 的差异之外,还对 hid-sony Linux 驱动程序进行了更新,改变了设备向应用程序公开的方式。需要更新 SDL2 才能正确使用新映射。

【讨论】:

感谢您的回复。我使用的是 Windows x64 位。如何识别使用了 SDL? 尝试将 SDL_GAMECONTROLLERCONFIG 环境变量设置为已知有效的配置字符串(从 gamecontrollerdb.txt 文件中获取适当的配置字符串),看看是否能修复您的游戏手柄错误。在带有 DS4 V2 的 Windows 上,您应该使用这个:030000004c050000cc09000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0 .1,指南:b12,左肩:b4,左摇杆:b10,左触发:a3,左x:a0,左:a1,右肩:b5,右摇杆:b11,右触发:a4,右x:a2,右:a5,开始:b9 ,x:b0,y:b3,平台:Windows, 只是设置了这个变量并启动了应用程序,不固定:/

以上是关于OpenTK 识别 PS4v2 控制器(通过 USB)的主要内容,如果未能解决你的问题,请参考以下文章

SwapBuffers()无法识别

OpenTK (OpenGL) 正确使用 BufferData 和 BufferSubData

单个glControl上的多个纹理 - openTK

OpenTK - 累积缓冲区的可用性

在 openTK 中播放音频

OpenTK 按键?