问题标签 [direct3d]

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 投票
5 回答
3095 浏览

c++ - 图形分析

我有一个应用程序下降到 10fps 左右。我使用 xperf 对其进行了分析,结果显示我的应用程序只使用了 20% 的 CPU,而我的任何方法都没有使用超过预期的 20%。

这似乎表明 fps 的大幅下降是因为显卡无法跟上渲染帧的速度,导致我的程序在赶上时停止......

有什么方法可以分析显卡的功能并计算出我的程序告诉它做什么来减慢它的速度,以便我可以尝试提高帧速率?

0 投票
13 回答
10520 浏览

python - 是否有可能用纯 Python 编写像魔兽世界一样大的 3D 游戏?

是否有可能用纯 Python 编写像魔兽世界一样大的 3D 游戏?假设使用 DirectX/D3D 绑定或 OpenGL 绑定。

如果不是,那么在 Python 中做这样一个项目的最大障碍是什么?我知道游戏往往属于 C 和 C++ 领域,但有时人们会出于习惯而做事!

任何信息都有助于满足我的好奇心。

编辑:

GIL 会发布关于 3d 客户端性能的主要问题吗?使用 OpenGL 或 DirectX 绑定与本机使用库的一般性能损失是什么?

0 投票
3 回答
2228 浏览

c# - 构建 MVVM 3D 编辑器应用程序 -> 获取鼠标位置?

在我的 3d 编辑器应用程序中,我希望能够单击并移动场景的实体(网格、灯光、相机等)。为此,我想我需要获取相对于我的 Direct3d 视图的当前鼠标位置,并以某种方式将其提供给我的 ViewModel。考虑到我的应用程序是使用 MVVM 模式构建的,我该怎么做呢?

附加信息:Direct3d 渲染器来自 C++ DLL,我们使用 HwndHost 将其放置在我们的 WPF 应用程序中。它有一个 WndProc,我想我可以用它在那里处理鼠标消息,但如果可能的话,我宁愿避免它。

谢谢!

0 投票
3 回答
349 浏览

c++ - Direct3D9中如何实现独立渲染层?

我正在开发一个窗口化的 Direct3D 数据绘图应用程序,该应用程序需要在数据之上显示多个叠加层(类似于游戏中的 HUD)。由于可能需要绘制大量数据,并且并非每次都更改所有覆盖,因此我认为当显示中只有一个覆盖更改时重新绘制顶点不是一个好主意。

这让我想到了将叠加层的纹理和顶点渲染为具有透明背景的多个纹理,这些纹理可以在渲染循环中叠加并独立更新(类似于 Photoshop 中的图层)。

在我着手更改该程序的大部分内容以渲染纹理而不是表面之前,我只是想知道使用纹理是否是最好的方法。

0 投票
1 回答
833 浏览

direct3d - StretchRect 可以与 DF24 或 INTZ 表面一起使用吗?可以对 DF24 或 INTZ 进行多重采样吗?

您可以将 DF24 中的 StretchRect 延伸到另一个 DF24(特定于 ATI)吗?

您可以将 INTZ 中的 StretchRect 拉伸到另一个 INTZ(特定于 nVidia)吗?

您可以将 DF24 或 INTZ 创建为多重采样表面吗?

0 投票
3 回答
7465 浏览

graphics - OpenGL ES 或 Direct3D 中的表面究竟是什么?

我没有找到绘图表面概念的良好定义。什么属性与表面相关?在纯 OpenGL 的上下文中,没有表面,因为 OpenGL 没有窗口系统特定事物的概念。在 OpenGL ES 中,尽管您有 EGL API,它引入了绘图表面的概念,但没有正确定义它。您对绘图表面的简明定义是什么?

0 投票
1 回答
1470 浏览

c++ - C++ D3DX 字体和转换(需要 d3d9 和 d3d10 解决方案)

我想以一种考虑当前变换和类似设置的方式渲染字体,尤其是投影变换和视口。

我在想最好的方法是有一个屏幕外的表面来渲染文本,然后在我真正想要文本的地方渲染那个表面。

但是,我不确定该解决方案的许多方面。

  • 这是最好的方法吗?

  • 是否有更好的免费字体渲染器围绕该 id 花费我的时间来允许这样的事情。我看到很多人出于各种原因抱怨 d3dx 字体界面,但从来没有链接到更好的支持 unicode 的渲染器...?

  • 使用某些表面格式和/或表面尺寸有什么好处(例如,总是使用尽可能小的而不是一些标准的大尺寸,这需要额外的步骤来尝试确定尺寸......)

0 投票
5 回答
2802 浏览

.net - 寻找比 GDI 更快的解决方案来渲染动态数据图

我已经使用 C++/CLI 编写了一个简单的基于 GDI 的数据绘图仪,但它并不是特别快(一些基本的分析表明这是渲染到屏幕的问题)。

有什么方法可以为 UserControl 启用硬件加速,或者是否有用于 direct3D 的 .net 接口?...或者我可以考虑其他一些选择。

我们正在使用托管代码,因此如果可能的话,该解决方案确实需要与 CLI 兼容。

[编辑]如果有帮助,我正在使用每个 2x2 像素的矩形条(128 个数据点)Graphics::FillRectangle- 也许有更好的方法?

0 投票
3 回答
5901 浏览

directx - D3D9 中的抗锯齿/多重采样

我正在用 D3D9 编写一个 3d 建模应用程序,我想让它尽可能广泛兼容。这意味着使用很少的硬件相关功能,即多重采样。然而,虽然实时渲染不需要完美无缺,但我确实需要提供漂亮的屏幕截图,如果没有多重采样,看起来很混叠而且很差。

为了生成我的屏幕截图,我在内存中创建了一个临时表面,将场景渲染一次,然后将其保存到文件中。我首先想到的如何实现抗锯齿捕获是创建我的屏幕外模板表面作为多重采样,但当然 DX 不允许这样做,因为设备本身已使用 D3DMULTISAMPLE_NONE 进行了初始化。

首先,这是我如何创建屏幕截图的示例。我知道只保存已经渲染的帧的后缓冲区会更简单,但是我需要能够保存与实际渲染窗口不同尺寸的图像——这就是我这样做的原因。为简洁起见,此处省略了错误检查、恢复状态和释放资源的代码。m_d3ddev 是我的 LPDIRECT3DDEVICE9。

您可以看到对 CreateDepthStencilSurface() 的调用,这是我希望可以用 ie 替换 pp.MultiSampleType 的地方D3DMULTISAMPLE_4_SAMPLES,但这不起作用。

我的下一个想法是创建一个完全不同的 LPDIRECT3DDEVICE9 作为D3DDEVTYPE_REF,它始终支持D3DMULTISAMPLE_4_SAMPLES(无论视频卡如何)。但是,我的所有资源(网格、纹理)都已加载到我的 HAL 设备 m_d3ddev 中,因此我无法使用它们在 REF 设备下渲染场景。请注意,资源可以在 Direct3d9ex (Vista) 下的设备之间共享,但我正在使用 XP。由于有相当多的资源,重新加载所有内容以呈现这一帧,然后卸载它们,对于我的应用程序来说时间效率太低了。

我查看了用于在捕获后对图像进行抗锯齿的其他选项(即 3x3 模糊滤镜),但它们都产生了非常糟糕的结果,所以我真的很想尝试在 D3D 中获得一个抗锯齿场景,如果可能的话......

任何智慧或指示将不胜感激......

谢谢!

0 投票
1 回答
209 浏览

com - ID3DX10Mesh 和 ID3DXMesh Guids 完全相同

我正在与 Direct3D 进行 C# 互操作(我知道 SlimDX 和 XNA,所以我们不要讨论它的优点),我正在调用 D3DX10CreateMesh,并将其传递给我的 ID3DX10Mesh 接口。我收到一条错误消息,提示“不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE))”。D3DX10CreateMesh 调用是在我尝试创建 10 网格以将 9 网格复制到其中时(成功加载 x 文件后)。我查看了 ID3DX10Mesh 的 C# 定义,它遵循与我定义的所有其他工作接口相同的结构。

但后来我注意到了一些事情。9 和 10 网格的Guid完全相同(4020E5C2-1403-4929-883F-E2E849FAC195)。我已经仔细检查了 d3dx9mesh 和 d3dx10mesh 标题,就是这种情况。9 网格接口工作,但 10 不工作(这可能取决于实例化顺序)我个人不理解这一点,因为这意味着即使在 C/C++ 应用程序中你也不能同时使用两个网格,但我们知道你能行。我已经看到它在 NVUT SDK 中完成了。我只能认为运行时可调用包装器被 Guid 弄糊涂了?

为什么网格向导相同,C/C++ 应用程序如何避免冲突?