问题标签 [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.
c++ - 在 DirectX 中显示视频
在使用 XAudio2 和 Direct3D9/10 的应用程序中显示视频(带声音!)的最佳/最简单方法是什么?
至少它需要能够流式传输可能更大的视频,并注意窗口纵横比可能与视频不同的事实(例如通过添加信箱),尽管理想情况下我喜欢将视频嵌入到一个 3D 场景。
我当然可以想办法将每一帧加载到纹理中,丢弃/重新使用渲染后的纹理,并通过 XAudio2 单独播放音频,但是除了为至少一种格式编写加载器外,我还得处理使用诸如同步视频和音频组件之类的东西,因此希望有一个更简单的解决方案可用,甚至是一个具有合适许可证的现成免费解决方案(二进制形式的商业分发,在 LGPL 的情况下动态链接很好)。
c++ - 在 direct3d 应用程序中呈现格式化文本
我需要渲染一些格式化的文本(颜色、不同的字体大小、下划线、粗体等),但是我不知道该怎么做。D3DXFont 只允许一次呈现单个字体/大小/粗细/颜色/等的文本,我看不到一种实用的方法来“组合”对 ID3DXFont::DrawText 的多次调用来做这些事情......
我环顾四周,似乎没有任何现有的库可以做这些事情,但我不知道如何实现这样的文本渲染器,我什至找不到任何关于这样的文本渲染如何工作的文档,仅渲染简单的固定宽度的 ASCII 位图字体,这可能是一种完全不同的方法,仅适用于渲染 Unicode 不重要的简单文本块。
如果没有能够执行此操作的 direct3d 字体渲染器,是否有任何其他渲染器(例如,用于在普通窗口中渲染富文本),并将这些渲染器渲染到 RAM 中的纹理,然后将其上传到视频卡以渲染到后台缓冲区产生合理的性能?
3d - 如何在 .x 文件中嵌入着色器信息
我正在使用directx9 编写一个小型图形程序,该程序从.x 文件中导入一些使用blender 创建的模型文件。到现在为止还挺好。
模型具有具有纹理的材料,获取纹理名称并正确渲染对象很简单,但是我想在某些材料上使用不同的效果(着色器)文件,但我找不到任何嵌入信息的方法关于在 .x 文件中的模型中使用什么着色器。
我的最佳想法是查看我的 d3d9 应用程序中的纹理文件名,并将纹理名称查找表硬编码为效果文件。但这似乎并不优雅,也意味着我最终会复制和重命名纹理,以便我可以将相同的纹理与不同的着色器一起使用。
我觉得我一定错过了一种更简单的方法来做到这一点,有什么建议吗?
c++ - Direct3D9 渲染 D3DFMT_A8 纹理
我有一个使用 D3DFMT_A8 格式的纹理。我想把它渲染成白色(即 RGB 分量都是 255),并使用纹理数据进行 alpha 混合。
如果可能的话,我想在不必编写像素着色器的情况下执行此操作(如使用现有着色器而不进行更改,以及固定功能管道)。
我可以让 alpha 混合位像任何其他纹理一样工作,但是 RGB 分量都被视为黑色,而我需要将它们视为白色......
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
- Render a bunch of stuff with the textures
- Update a few parts of the texture (which may have been used by the previous renders)
- Render some more stuff with the texture
- Update another part of the texture
- 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?
- Call LockRect and UnlockRect for each region I need to update
- Call LockRect and UnlockRect for the entire texture
- Call LockRect and UnlockRect for the entire texture with D3DLOCK_DISCARD and copy in a bitmap from RAM.
- Create a completely new texture each time I need to "update it"
- Use 1,2 or 3 to update a surface in D3DPOOL_SYSMEM, then UpdateSurface to update level 0 of my texture from this surface
- Same as 5 but specify RECT to cover the entire area I need
- Same as 5 but make multiple calls, one for each region I updated
- 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.
directx - 检测全屏 Direct3D 应用程序
有没有办法通过 Direct3D API 检测以全屏模式运行的 Direct3D 应用程序?
SHQueryUserNotificationState可以指示此类应用程序,仅在 Vista 及更高版本上受支持。它也仅在 Explorer shell 运行时才有效。
c++ - 纵横比 - 如何处理它们?(D3D 视口设置)
好吧——看来我的问题和我的头脑一样模糊。让我们再试一次。
在为 D3D 设备配置视口时,我有 3 个属性: - 设备运行的分辨率(全屏)。- 显示器的物理纵横比(分数和浮点数:1,例如 4:3 和 1.33)。- 源分辨率的纵横比(源分辨率本身有点没有意义,它告诉我们的只是渲染所需的纵横比和理想的运行分辨率)。
然后我们遇到这个:
现在只要 g_displayAspectRatio等于xRes/yRes 的比率(= 改编自设备分辨率),一切都很好,此代码将执行预期的操作。但是,一旦这两个值不再相关(例如,有人在 16:10 的屏幕上运行 4:3 分辨率,硬件拉伸),就需要另一个步骤来补偿,我很难弄清楚到底如何.
(而且 ps 我在原子类型上使用 C 风格的强制转换,忍受它:-))
directx - SlimDX (DirectX10) - 如何更改纹理中的纹素?
我尝试更改已加载的纹理的纹素。
我的假设是使用 Texture2D::Map 和 UnMap 函数,但是当我更改给定 DataRectangle 的数据时没有任何变化。
我需要一个简单的例子,比如创建一个 128x128 的纹理,每边都有从黑色到白色的渐变。
谢谢
ps:Direct3D 10 C++ 示例也可能有所帮助,SlimDX 只是一个包装器,具有几乎完整的相同功能。
wpf - WPF 窗口调整大小 - 无预览/显示橡皮筋
调整大小时,有没有办法强制 WPF 窗口使用橡皮筋(调整大小期间没有内容的实时预览)?
我意识到这通常是 Windows 上的用户偏好,但我的应用程序使用 D3D 窗口,并且在调整大小时会出现明显的闪烁(特别是从左上角向外)。
--
我应该提到我正在通过 SlimDX 使用 DX10。我还没有找到将 D3DImage 与 DX10 一起使用的方法。这可能吗?
compiler-construction - HLSL 编译器错误?
这是我的像素着色器的一部分。为什么会出现编译器错误?我在ps_3_0.
没有mul()
它编译的情况下编译它。