问题标签 [direct3d9]

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 投票
1 回答
833 浏览

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

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

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

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

0 投票
3 回答
203 浏览

c++ - 针对 March09SDK 编译 DX 9.0c 应用程序 => 无法使用旧的 DX 9.0c DLL 运行 => 问题 :)

我无法从主题中做一个场景。

我安装了 DirectX 9 March 2009 SDK,即 9,“sub”-version c,但“sub-sub”-version 是 41,所以 libs (d3dx9.lib d3d9.lib) 将导出链接到 dxd3d_41.dll。

当我尝试在具有 DX9.0c 但从 2009 年 3 月起不可再分发的机器上运行我的应用程序时会发生什么现在很明显:),它失败了,因为它找不到 dxd3d_41.dll。

哪个是这个问题的标准解决方案?我应该如何编译我的应用程序以使所有具有 DX 9.0c 的机器都支持?这甚至可以实现吗?

谢谢

0 投票
3 回答
1345 浏览

c++ - Direct3D 纹理后处理/复制

所以我正在尝试实现一些 Direct3D 后处理,但在渲染纹理时遇到了问题。基本上,我的程序如下所示:

我遗漏了一些部分 b/c 有相当多的代码(我只是想理解一般的想法)。不幸的是,上面的结果是一个空白屏幕。这是我想要发生的事情:

  1. 将场景渲染为纹理 (HDR)
  2. 通过 Brightpass 着色器将该纹理渲染到第二个纹理
  3. 将第二个纹理渲染到可见的 LDR 表面

请注意,如果我将上面的最后一行从

然后一切正常。请注意,我已经尝试跳过 Brightpass 着色器并简单地传递像素,但这也不起作用。

0 投票
1 回答
295 浏览

3d - 在 3D 应用程序中绘制目标圆

我正在开发一个 3d 游戏,只是为了学习。

我有一个由高度图生成的 3d 世界,以及覆盖在该世界上的各种基于网格的对象。

我希望玩家能够瞄准我可以做的世界中的物体,但我想在目标物体所在的地形或物体上绘制一个瞄准圈。如果你玩过魔兽世界,你就会明白我的意思,当你瞄准某人时,它会在他们下方的地板上画一个红色圆圈。

但它会投射到他们站立的任何地方。这可能是地形 - 因此可能需要投影到具有不同坡度的不同网格多边形上,一个是圆的一部分,另一个是圆的一部分。或者可能需要投影到一个项目上。或者可能是一个部分和另一个部分。

任何想法如何有效地做到这一点?作弊和近似值也是受欢迎的,像往常一样在游戏中我正在寻找看起来有效而不是 100% 正确的东西。

如果这对任何解决方案都很重要,请使用 directx9 和着色器模型 2。

0 投票
1 回答
1600 浏览

c++ - 无法在 D3D9 中使用 SetTransform

什么可能会阻止 IDirect3DDevice9::SetTransform 工作?我查看了很多在 Direct3D9 中使用转换矩阵的教程,包括这里的这个。据我所知,他们都以同样的方式做事。

我正在尝试编写一些代码来翻译纹理多边形。我用一个用 D3DXMatrixTranslation 初始化的矩阵调用 SetTransform,它返回 S_OK。但是,绘制到屏幕上的实际多边形不会被转换。

0 投票
1 回答
282 浏览

windows-vista - 在 Vista 中关闭 Aero 的不良行为

我有一个 Directx9 应用程序,它需要在禁用 Aero 的机器上运行。该应用程序以窗口模式运行。首次创建窗口时,它在单个屏幕中看起来很好。当我以跨越连接到同一个图形适配器(和 GPU)的两个屏幕的方式移动窗口时,一个屏幕上的区域似乎反映了另一个屏幕上的区域。当我跨越连接到不同图形适配器的两个屏幕时,我没有问题。

任何标准的窗口应用程序都可以轻松复制这一点,例如 8 月 9 日 DirectX SDK 中的“教程 2:顶点”。

我在窗口化的 OpenGL 应用程序中看到了同样的问题。

当 Windows 在启用 Aero 的情况下运行时,这不是问题,但我需要在禁用 Aero 的情况下运行应用程序。(Aero 在我的实际应用程序中引起其他问题,由于我在 GPU 中进行的处理,在不可预测的时间翻转它自己的后缓冲区,以我的渲染线程无法检测到的方式搞砸了我的显示平滑度。)

我正在运行带有 nVidia Quatro 4800 显卡的 Windows Vista Enterprise x64。

--而且,我刚刚注意到这只是在我使用旋转屏幕时出现的问题,在 nVidia 控制面板中旋转了 90 度。我想……就这样吧?当我使用旋转屏幕时,任何人都可以提出解决方案吗?

有任何想法吗?

0 投票
1 回答
797 浏览

windows - 如何在 Direct3D9 中呈现格式化文本?

我正在编写一个需要在 Direct3D9 中绘制大量文本的应用程序——几行,可能是几十行。文本可以被大量格式化(即不同的字体、样式、大小),并且可以包含来自不同字符集的 unicode 符号。最糟糕的是,它可以随时更改,所以它需要是动态的(渲染一次显示总是不行的)。

这样做有两个问题:首先,我可能需要对 D3DXCreateFont 进行大量调用,据说这些调用成本很高(我自己也不确定)。另一种方法是在绘制多部分线之前创建所有字体,然后在它们之间切换——这样更好吗?好吧,我也可以在画线时即时创建字体对象,将它们添加到某种字体对象缓存中,然后在尝试创建新对象之前查看缓存?您认为哪种方法最好?

第二个问题是 D3DXFont 似乎不理解下划线/删除线字体样式。尽管 D3DFONT 基于 LOGFONT,但它省略了这些字段(虽然支持斜体)。假设我真的需要下划线/删除线,我该怎么办?有没有办法强制 ID3DXFont 做下划线?我应该自己画那些线吗(我怎么做那么快)?或者也许我应该切换到在 HDC 上使用 GDI 绘图,然后将这些像素复制到纹理中——这会提供合理的性能吗?

0 投票
1 回答
6852 浏览

c++ - 在 Direct3D9 中启用抗锯齿(MultiSample 渲染目标)

我正在尝试在 D3D9 应用程序中启用 AA,但不确定如何正确设置曲面。到目前为止,我有:

初始化:

然后,对于每一帧:

但是,我的屏幕上什么也没有出现(全黑)。没有发生错误(我检查了所有 d3d 调用的返回值)。我究竟做错了什么?

0 投票
1 回答
1215 浏览

c++ - HLSL 和 ID3DXFont/ID3DXSprite

我从头开始,我的代码将能够显示一些文本的总数。我一直在添加对精灵的支持。我遇到的麻烦是它似乎无法识别我的 HLSL。我设置技术,开始它,开始传球,绘制精灵,冲洗它们,结束传球,技术。而 D3D 在 VS 输出中提出了这个小小的“使用 FF 到 PS 转换器”。VS 也一样。我不想用我的 HLSL 做任何高级的事情 - 只是使用它并更加熟悉它并确保我知道如何实现它。顺便说一句,那是 C++0x auto,所以是自动类型推导(因为我很懒)。

其中 RenderAndCleanUp 是一个简单的模板化函数,它循环遍历精灵,销毁那些需要的,并渲染其余部分,而 common->sprites 是所有精灵对象的简单向量。由于 DXTrace 永远不会关闭,我保证所有功能都不会失败。我还将控制面板设置为最大调试。

我检查了 D3DXHANDLE,它们都是非空的。它不报告任何编译错误,也不报告任何错误或警告。

这是着眼于 Direct3D9 的本机 C++。

0 投票
1 回答
575 浏览

graphics - D3D9 中对应的 CopyResource 方法

我知道使用 IDirect3D10::CopyResource(...) 接口在 D3D10 中复制顶点/索引缓冲区很容易。

如何在 D3D9 中做同样的工作?有没有类似的API?