问题标签 [directxtk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
60 浏览

audio - DirectXTK make_unique(标志)失败

我正准备用我的游戏引擎发布我的第一个小游戏。但是,通过让一些人对其进行测试,我们发现我的一位测试人员调用获取指向 AudioEngine 接口的指针失败。

该呼叫在我的台式机和笔记本电脑上都可以正常工作,并且在测试仪 2 的计算机上也可以正常工作。但是,测试人员 1 的计算机将无法成功调用。

“失败”是指它抛出一个异常,我正在使用 try/catch 块处理该异常。异常的“什么”只是告诉我“AudioEngine”所以没有帮助。他有一台高度定制的计算机,它使用两个未链接的显卡并处理单独的任务。他使用我在桌面上设置的相同虚拟音频电缆(用于分隔语音源以便于视频编辑:流媒体/游戏录制)。

如果有人知道可能导致此调用失败的任何线索,我们将不胜感激。如果您需要任何其他信息,请告诉我。初始化代码如下:

更新:一整天都在尝试东西,到目前为止没有运气。-让 Tester 下载 2010 年 6 月的 DirectX DLL 并安装它们并重新启动计算机。-让他们更新所有驱动程序。- 让他们检查他们的系统文件夹(所有 XAudio2_#.dll 文件都存在)。- 他们有 Windows 10

0 投票
1 回答
112 浏览

c++ - DirectXTK 在“SetWindow(HWND hwnd)”的“鼠标”中没有成员

我试图使用 DirectXTK 在我的游戏引擎中实现鼠标和键盘支持。键盘非常简单,但我在实现适当的鼠标支持时遇到了问题。我正在关注这个在我的引擎中实现鼠标。Microsoft wiki 上的这篇文章说,在我能够将鼠标模式从绝对更改为相对之前,我已经调用了 SetWindow。这听起来很容易,但是当我尝试这样做时:

我收到一个错误:

看起来此方法在 Mouse 类中不存在。这很奇怪,因为如果我用设置窗口删除这一行,它会编译,但由于 Mouse 类中的这个断言,我会在运行时失败:

所以需要设置窗口,但是当这个功能不存在时,我该怎么做呢?更糟糕的是来自wiki的文章并不旧,它是从2019年4月18日开始的。有人遇到过这个问题吗?我怎样才能解决这个问题?

0 投票
1 回答
186 浏览

c++ - 将 PrimitiveBatch::DrawIndexed 与 ID3D11DeviceContext::DrawIndexed 一起使用?

我正在创建一个游戏引擎,并且我想要绘制线框形状以进行调试(碰撞器、触发器、光线投射等)。我以前使用带有线框光栅化器状态的网格,但现在我想使用它们的 PrimitiveBatch 类将系统迁移到DirectXTK 的示例,以便我可以绘制光线。

但是,当我调用批处理的 DrawIndexed() 方法时遇到了一个问题,在该方法中,我绘制该框架的所有内容,包括来自 ID3D11DeviceContext 的 DrawIndexed() 的对象,都变成了线框。

这是场景应该看起来的样子。

这是激活调试图后的样子。

我的调试绘图方法:

可以将案例 0 中的 DrawShape() 调用注释掉以消除问题。我的正常渲染是基本的网格前向渲染,对每个对象调用 context->DrawIndexed() 并在绘制所有内容(包括调试形状)后调用 swapChain->Present(0,0)。我尝试将调试图移到交换链之后,但这并没有解决它。

DrawShape() 只是将世界矩阵发送到使用原始批处理(来自 DirectXTK wiki)绘制立方体的函数:

我也尝试在调试绘图完成后重置状态无济于事。有没有人有任何想法?

0 投票
1 回答
437 浏览

c++ - VS 2019 中未显示 Direct3D Win32 游戏模板

我正在尝试将 directx TK 与 Visual Studio 一起使用。在wiki中,显示模板选项“Direct3D Win32 Game”;但是,这在我的模板中不可用。我认为我已经安装了所有必需的工作负载。

0 投票
1 回答
145 浏览

c++ - 通过 DirectX12 工具包进行挑选

我在尝试用鼠标点击 3d 对象时遇到问题。对于交叉点检查,我使用光线投射。我找到的代码,为我的解决方案移植:

准确采摘

如何创建球体

我如何调用 raycaster

单击没有任何反应,但是如果我垂直于 XOY 旋转相机,有时在球体附近单击,会出现消息框。


更新

MessageBox 在相机角度上独立出现,并且似乎它正确地检测到交叉点,但相对于窗口中心是镜像的。例如,如果球体在(0, window.bottom-20)某个点,那么如果我单击该(0, 20)点,我将获得 MessageBox。

如果拾取射线的方向计算错误,如果它是为左手系统编写的,而我使用右手系统怎么办?

0 投票
1 回答
370 浏览

c++ - 通过 DirectX12 工具包绘制球体

尝试绘制球体时遇到三个问题:

  1. 球体在某些角度出现故障: 在此处输入图像描述
  2. 不知道如何将颜色应用于球体
  3. 无法同时绘制两个球体 - 仅显示一个。

代码。使成为:

我如何创建形状效果

d3dsphere是一个D3DSphere类对象;构造函数和Draw方法

如果我认为球体半径(以及我场景中的所有内容)非常小(~10^-6),也许会很有用

由于我不知道的原因,Microsoft DirectX12 Tool Kit wiki 页面中的示例代码与我通过 NuGet 包安装的头文件不兼容 - 我有不同的构造函数,方法中的参数不同。我认为问题在于我使用的是 Visual Studio 15,但微软建议至少使用 17 个(有两种不同的 DirectX12TK NuGet 包——一种用于 VS15,一种用于 VS17 及更高版本)。真奇怪。


通过更改渲染代码解决了第三个问题:

我使用的 DirectX12TK NuGet 包版本是2019.12.17.1

0 投票
1 回答
330 浏览

c++ - D3D11 中的锁定矩形

我正在尝试从在线教程中实现像素完美碰撞检测算法,但它是使用 d3d9 编写的。我正在 d3d11 中编写我的游戏,所以我想知道转换它的最佳方法。原始代码使用锁定的矩形,经过研究,我发现不在 D3D11 中。顺便说一句,我使用的是 DirectX TK,所以我必须将 ShaderResourceView 转换为纹理。这是原始代码:

0 投票
1 回答
74 浏览

c++ - 使用一侧带有动态纹理的 DirectXTK 创建 3d 卡片

我正在尝试创建一个纸牌游戏。我想要一副卡片,卡片的背面是固定纹理但正面是动态的,即它上面有一些文本字段以及一张图片。我创建了一个大小为 3x2x0.16 的盒子来代表我的卡片。我可以加载固定纹理,但我在网上找不到任何代码示例,这些示例向我展示了如何在盒子的一侧加载固定纹理,在另一侧加载动态纹理。谁能指点我一些例子。我主要使用 DirectXTK,但也可以从任何 DirectX 代码中理解它。
DirectX11 是我正在使用的 DirectX 版本。

任何关于如何做到这一点的建议也将受到欢迎。

谢谢

0 投票
1 回答
211 浏览

c++ - 收集项目中所有 DLL 的更有效方法

我想将一个可执行文件导出给其他人,他们可以通过点击来玩游戏,但是当我点击可执行文件时它会立即关闭。我认为它错过了一些能够运行的 DLL 文件。所以我检查了构建日志。

.......等等。

只有一种方法可以手动复制上述所有文件吗?

项目链接

0 投票
0 回答
100 浏览

c++ - Xbox-ATG-Samples (DirectXTK) SimpleTrianglePC 在这种情况下会导致 100% 的 GPU 使用率

我正在追踪性能瓶颈。为了缩小原因,我使用Xbox ATG 示例存储库中的 SimpleTrianglePC 示例创建了一个测试。

我只做了一些更改:我改为Draw渲染DrawInstanced多个三角形,并修改了顶点着色器以根据 SV_InstanceID 稍微改变每个三角形的位置和颜色。总共渲染了 265 个三角形,但我的 GPU 在此过程中达到了 100%:

GPU 100%

这是输出。请注意,我将三角形的形状更改为直角三角形。顶部三角形为黑色:

结果

这个问题似乎与所有三角形都在彼此之上的事实有关。如果三角形在不重叠的情况下渲染,则不会发生此问题。我已经对数千个三角形进行了测试,正如预期的那样,没有问题。

为了解决这个问题,我尝试了 DirectXTK 中的各种CommonState 。例如,我将混合状态设置为 Opaque(),将深度模板状态设置为 DepthNone(),将光栅化状态设置为 CullNone()。没有区别。

如果有人想知道:我使用的是硬件设备,而不是 WARP 设备。我的 GPU 很弱(华硕 EAH 5450),但这不是问题;我确实在这台机器上玩游戏。它不应该超过 265 个三角形。

这是修改后的顶点着色器。假定默认窗口大小为 1280 x 720:

这是我对 SimpleTrianglePC.cpp 所做的两个更改。首先,创建顶点缓冲区:

二、绘制命令:

正如我之前提到的,我创建了这个测试,因为当有许多重叠的原语时,我的原始代码会变慢。这种放缓是不可避免的吗?我应该怎么做才能避免这种情况?提前致谢。

编辑:

这是 GPU 使用细节的屏幕截图:

细节

编辑2:

Visual Studio 的 GPU 使用工具似乎错误地报告了此图形驱动程序支持的功能级别。调用D3D11CreateDevice返回功能级别 11.0。Dxdiag 证实了这一点:

DxDiag 信息

我分析了一个框架,看看我是否可以获得任何额外的信息。看来 DrawInstance 需要 22 毫秒才能完成:

框架分析

编辑3:

过去几天我一直在测试,但我没有看到对这种行为的很好解释。有没有人看到示例代码/我的更改有问题,或者我应该将其归结为有问题/性能不佳的显卡?