问题标签 [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 投票
2 回答
9064 浏览

c++ - 在 DirectX 中显示视频

在使用 XAudio2 和 Direct3D9/10 的应用程序中显示视频(带声音!)的最佳/最简单方法是什么?

至少它需要能够流式传输可能更大的视频,并注意窗口纵横比可能与视频不同的事实(例如通过添加信箱),尽管理想情况下我喜欢将视频嵌入到一个 3D 场景。

我当然可以想办法将每一帧加载到纹理中,丢弃/重新使用渲染后的纹理,并通过 XAudio2 单独播放音频,但是除了为至少一种格式编写加载器外,我还得处理使用诸如同步视频和音频组件之类的东西,因此希望有一个更简单的解决方案可用,甚至是一个具有合适许可证的现成免费解决方案(二进制形式的商业分发,在 LGPL 的情况下动态链接很好)。

0 投票
3 回答
4775 浏览

c++ - 在 direct3d 应用程序中呈现格式化文本

我需要渲染一些格式化的文本(颜色、不同的字体大小、下划线、粗体等),但是我不知道该怎么做。D3DXFont 只允许一次呈现单个字体/大小/粗细/颜色/等的文本,我看不到一种实用的方法来“组合”对 ID3DXFont::DrawText 的多次调用来做这些事情......

我环顾四周,似乎没有任何现有的库可以做这些事情,但我不知道如何实现这样的文本渲染器,我什至找不到任何关于这样的文本渲染如何工作的文档,仅渲染简单的固定宽度的 ASCII 位图字体,这可能是一种完全不同的方法,仅适用于渲染 Unicode 不重要的简单文本块。

如果没有能够执行此操作的 direct3d 字体渲染器,是否有任何其他渲染器(例如,用于在普通窗口中渲染富文本),并将这些渲染器渲染到 RAM 中的纹理,然后将其上传到视频卡以渲染到后台缓冲区产生合理的性能?

0 投票
1 回答
179 浏览

3d - 如何在 .x 文件中嵌入着色器信息

我正在使用directx9 编写一个小型图形程序,该程序从.x 文件中导入一些使用blender 创建的模型文件。到现在为止还挺好。

模型具有具有纹理的材料,获取纹理名称并正确渲染对象很简单,但是我想在某些材料上使用不同的效果(着色器)文件,但我找不到任何嵌入信息的方法关于在 .x 文件中的模型中使用什么着色器。

我的最佳想法是查看我的 d3d9 应用程序中的纹理文件名,并将纹理名称查找表硬编码为效果文件。但这似乎并不优雅,也意味着我最终会复制和重命名纹理,以便我可以将相同的纹理与不同的着色器一起使用。

我觉得我一定错过了一种更简单的方法来做到这一点,有什么建议吗?

0 投票
1 回答
1328 浏览

c++ - Direct3D9 渲染 D3DFMT_A8 纹理

我有一个使用 D3DFMT_A8 格式的纹理。我想把它渲染成白色(即 RGB 分量都是 255),并使用纹理数据进行 alpha 混合。

如果可能的话,我想在不必编写像素着色器的情况下执行此操作(如使用现有着色器而不进行更改,以及固定功能管道)。

我可以让 alpha 混合位像任何其他纹理一样工作,但是 RGB 分量都被视为黑色,而我需要将它们视为白色......

0 投票
2 回答
2447 浏览

direct3d - Best way to update a Direct3D Texture

I need to render some CPU generated images in Direct3D 9 and I'm not sure of the best way to get the texture data onto the graphics card as there seems to be a number of approaches.

My usage path goes along the following lines each frame

  1. Render a bunch of stuff with the textures
  2. Update a few parts of the texture (which may have been used by the previous renders)
  3. Render some more stuff with the texture
  4. Update another part of the texture
  5. and so on

Ive thought of a couple of ways to do this, however I'm not sure which one to go with. I considered benchmarking each method however I have no way to know if any results I get are representative of hardware in general, or only my hardware.

  • Which pool is best for a texture for this task?
  • Whats the best way to update this texture?
    1. Call LockRect and UnlockRect for each region I need to update
    2. Call LockRect and UnlockRect for the entire texture
    3. Call LockRect and UnlockRect for the entire texture with D3DLOCK_DISCARD and copy in a bitmap from RAM.
    4. Create a completely new texture each time I need to "update it"
    5. Use 1,2 or 3 to update a surface in D3DPOOL_SYSMEM, then UpdateSurface to update level 0 of my texture from this surface
    6. Same as 5 but specify RECT to cover the entire area I need
    7. Same as 5 but make multiple calls, one for each region I updated
    8. Probably yet another way to do this I haven't thought of yet...

It should be noted that the areas I'm updating are usually fairly small compared to the size of the entire texture, eg the texture may be 1024*1024 and I might want to update 5 or so 64*64 regions of it.

0 投票
2 回答
2532 浏览

directx - 检测全屏 Direct3D 应用程序

有没有办法通过 Direct3D API 检测以全屏模式运行的 Direct3D 应用程序?

SHQueryUserNotificationState可以指示此类应用程序,仅在 Vista 及更高版本上受支持。它也仅在 Explorer shell 运行时才有效。

0 投票
1 回答
4271 浏览

c++ - 纵横比 - 如何处理它们?(D3D 视口设置)

好吧——看来我的问题和我的头脑一样模糊。让我们再试一次。

在为 D3D 设备配置视口时,我有 3 个属性: - 设备运行的分辨率(全屏)。- 显示器的物理纵横比(分数和浮点数:1,例如 4:3 和 1.33)。- 源分辨率的纵横比(源分辨率本身有点没有意义,它告诉我们的只是渲染所需的纵横比和理想的运行分辨率)。

然后我们遇到这个:

现在只要 g_displayAspectRatio等于xRes/yRes 的比率(= 改编自设备分辨率),一切都很好,此代码将执行预期的操作。但是,一旦这两个值不再相关(例如,有人在 16:10 的屏幕上运行 4:3 分辨率,硬件拉伸),就需要另一个步骤来补偿,我很难弄清楚到底如何.

(而且 ps 我在原子类型上使用 C 风格的强制转换,忍受它:-))

0 投票
3 回答
2431 浏览

directx - SlimDX (DirectX10) - 如何更改纹理中的纹素?

我尝试更改已加载的纹理的纹素。

我的假设是使用 Texture2D::Map 和 UnMap 函数,但是当我更改给定 DataRectangle 的数据时没有任何变化。

我需要一个简单的例子,比如创建一个 128x128 的纹理,每边都有从黑色到白色的渐变。

谢谢

ps:Direct3D 10 C++ 示例也可能有所帮助,SlimDX 只是一个包装器,具有几乎完整的相同功能。

0 投票
2 回答
1290 浏览

wpf - WPF 窗口调整大小 - 无预览/显示橡皮筋

调整大小时,有没有办法强制 WPF 窗口使用橡皮筋(调整大小期间没有内容的实时预览)?

我意识到这通常是 Windows 上的用户偏好,但我的应用程序使用 D3D 窗口,并且在调整大小时会出现明显的闪烁(特别是从左上角向外)。

--

我应该提到我正在通过 SlimDX 使用 DX10。我还没有找到将 D3DImage 与 DX10 一起使用的方法。这可能吗?

0 投票
2 回答
5035 浏览

compiler-construction - HLSL 编译器错误?

这是我的像素着色器的一部分。为什么会出现编译器错误?我在ps_3_0. 没有mul()它编译的情况下编译它。