问题标签 [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.
audio - DirectXTK make_unique(标志)失败
我正准备用我的游戏引擎发布我的第一个小游戏。但是,通过让一些人对其进行测试,我们发现我的一位测试人员调用获取指向 AudioEngine 接口的指针失败。
该呼叫在我的台式机和笔记本电脑上都可以正常工作,并且在测试仪 2 的计算机上也可以正常工作。但是,测试人员 1 的计算机将无法成功调用。
“失败”是指它抛出一个异常,我正在使用 try/catch 块处理该异常。异常的“什么”只是告诉我“AudioEngine”所以没有帮助。他有一台高度定制的计算机,它使用两个未链接的显卡并处理单独的任务。他使用我在桌面上设置的相同虚拟音频电缆(用于分隔语音源以便于视频编辑:流媒体/游戏录制)。
如果有人知道可能导致此调用失败的任何线索,我们将不胜感激。如果您需要任何其他信息,请告诉我。初始化代码如下:
更新:一整天都在尝试东西,到目前为止没有运气。-让 Tester 下载 2010 年 6 月的 DirectX DLL 并安装它们并重新启动计算机。-让他们更新所有驱动程序。- 让他们检查他们的系统文件夹(所有 XAudio2_#.dll 文件都存在)。- 他们有 Windows 10
c++ - DirectXTK 在“SetWindow(HWND hwnd)”的“鼠标”中没有成员
我试图使用 DirectXTK 在我的游戏引擎中实现鼠标和键盘支持。键盘非常简单,但我在实现适当的鼠标支持时遇到了问题。我正在关注这个在我的引擎中实现鼠标。Microsoft wiki 上的这篇文章说,在我能够将鼠标模式从绝对更改为相对之前,我已经调用了 SetWindow。这听起来很容易,但是当我尝试这样做时:
我收到一个错误:
看起来此方法在 Mouse 类中不存在。这很奇怪,因为如果我用设置窗口删除这一行,它会编译,但由于 Mouse 类中的这个断言,我会在运行时失败:
所以需要设置窗口,但是当这个功能不存在时,我该怎么做呢?更糟糕的是来自wiki的文章并不旧,它是从2019年4月18日开始的。有人遇到过这个问题吗?我怎样才能解决这个问题?
c++ - 将 PrimitiveBatch::DrawIndexed 与 ID3D11DeviceContext::DrawIndexed 一起使用?
我正在创建一个游戏引擎,并且我想要绘制线框形状以进行调试(碰撞器、触发器、光线投射等)。我以前使用带有线框光栅化器状态的网格,但现在我想使用它们的 PrimitiveBatch 类将系统迁移到DirectXTK 的示例,以便我可以绘制光线。
但是,当我调用批处理的 DrawIndexed() 方法时遇到了一个问题,在该方法中,我绘制该框架的所有内容,包括来自 ID3D11DeviceContext 的 DrawIndexed() 的对象,都变成了线框。
我的调试绘图方法:
可以将案例 0 中的 DrawShape() 调用注释掉以消除问题。我的正常渲染是基本的网格前向渲染,对每个对象调用 context->DrawIndexed() 并在绘制所有内容(包括调试形状)后调用 swapChain->Present(0,0)。我尝试将调试图移到交换链之后,但这并没有解决它。
DrawShape() 只是将世界矩阵发送到使用原始批处理(来自 DirectXTK wiki)绘制立方体的函数:
我也尝试在调试绘图完成后重置状态无济于事。有没有人有任何想法?
c++ - VS 2019 中未显示 Direct3D Win32 游戏模板
我正在尝试将 directx TK 与 Visual Studio 一起使用。在wiki中,显示模板选项“Direct3D Win32 Game”;但是,这在我的模板中不可用。我认为我已经安装了所有必需的工作负载。
c++ - 通过 DirectX12 工具包进行挑选
我在尝试用鼠标点击 3d 对象时遇到问题。对于交叉点检查,我使用光线投射。我找到的代码,为我的解决方案移植:
准确采摘
如何创建球体
我如何调用 raycaster
单击没有任何反应,但是如果我垂直于 XOY 旋转相机,有时在球体附近单击,会出现消息框。
更新
MessageBox 在相机角度上独立出现,并且似乎它正确地检测到交叉点,但相对于窗口中心是镜像的。例如,如果球体在(0, window.bottom-20)
某个点,那么如果我单击该(0, 20)
点,我将获得 MessageBox。
如果拾取射线的方向计算错误,如果它是为左手系统编写的,而我使用右手系统怎么办?
c++ - 通过 DirectX12 工具包绘制球体
尝试绘制球体时遇到三个问题:
代码。使成为:
我如何创建形状效果
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
c++ - D3D11 中的锁定矩形
我正在尝试从在线教程中实现像素完美碰撞检测算法,但它是使用 d3d9 编写的。我正在 d3d11 中编写我的游戏,所以我想知道转换它的最佳方法。原始代码使用锁定的矩形,经过研究,我发现不在 D3D11 中。顺便说一句,我使用的是 DirectX TK,所以我必须将 ShaderResourceView 转换为纹理。这是原始代码:
c++ - 使用一侧带有动态纹理的 DirectXTK 创建 3d 卡片
我正在尝试创建一个纸牌游戏。我想要一副卡片,卡片的背面是固定纹理但正面是动态的,即它上面有一些文本字段以及一张图片。我创建了一个大小为 3x2x0.16 的盒子来代表我的卡片。我可以加载固定纹理,但我在网上找不到任何代码示例,这些示例向我展示了如何在盒子的一侧加载固定纹理,在另一侧加载动态纹理。谁能指点我一些例子。我主要使用 DirectXTK,但也可以从任何 DirectX 代码中理解它。
DirectX11 是我正在使用的 DirectX 版本。
任何关于如何做到这一点的建议也将受到欢迎。
谢谢
c++ - 收集项目中所有 DLL 的更有效方法
我想将一个可执行文件导出给其他人,他们可以通过点击来玩游戏,但是当我点击可执行文件时它会立即关闭。我认为它错过了一些能够运行的 DLL 文件。所以我检查了构建日志。
.......等等。
只有一种方法可以手动复制上述所有文件吗?
c++ - Xbox-ATG-Samples (DirectXTK) SimpleTrianglePC 在这种情况下会导致 100% 的 GPU 使用率
我正在追踪性能瓶颈。为了缩小原因,我使用Xbox ATG 示例存储库中的 SimpleTrianglePC 示例创建了一个测试。
我只做了一些更改:我改为Draw
渲染DrawInstanced
多个三角形,并修改了顶点着色器以根据 SV_InstanceID 稍微改变每个三角形的位置和颜色。总共渲染了 265 个三角形,但我的 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 证实了这一点:
我分析了一个框架,看看我是否可以获得任何额外的信息。看来 DrawInstance 需要 22 毫秒才能完成:
编辑3:
过去几天我一直在测试,但我没有看到对这种行为的很好解释。有没有人看到示例代码/我的更改有问题,或者我应该将其归结为有问题/性能不佳的显卡?