问题标签 [directx-9]

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 回答
675 浏览

directx - DirectX 中的 3D 和 2D 显示

我想在我的 3D 场景上渲染一些精灵,但是当我启用 D3D 精灵时,我的 3D 场景消失了,我只能看到那些精灵。

设置:

渲染:

渲染功能:

0 投票
1 回答
271 浏览

directx-9 - 在 2d 纹理上调用 tex3D 是否合法?

在 Direct3D9 中,如果我在 HLSL 程序中使用 tex3D,在具有 2D 纹理绑定的采样器上会发生什么?这是合法操作,还是未定义?

0 投票
1 回答
5949 浏览

directx - SlimDX/DirectX9/C# - 如何访问纹理中的像素数据

这是我在 StackOverflow 上的第一个问题,万岁!老实说,我每天都使用 StackOverflow 来解决我的工作和个人编程之谜。99,9% 的时间我实际上也在这里找到了我需要的答案,这太棒了!

我目前的问题实际上让我有点难过,因为我似乎找不到任何真正有效的东西。我已经阅读了 GameDev.net 上的几篇文章,并在网上找到了其他资源,但无法整理出来。

我正在将我为 XNA 编写的小型 2D 引擎移植到 SlimDX(目前只是 DirectX9),这是一个很好的举措,因为我在短短几天内了解了更多关于 DirectX 内部工作的知识,而不是我在与 XNA 合作六个月。我完成了大部分基本渲染功能,并且实际上设法用大量附加功能重新创建了 XNA SpriteBatch(我在 XNA 中真的错过了这些功能)。

我试图开始工作的最后一件事是从给定纹理中提取源矩形并将其用于平铺。原因:不平铺时,您可以随意使用 UV 来获得要显示的源(例如:0.3;0.3 到 0.5;0.5),但是在平铺时,您需要 UV 来平铺(0;0 到 2;2意味着平铺图像两次),因此需要一个剪切纹理。

长话短说,我尝试使用以下内容:

我尝试了不同的像素,但似乎都给出了虚假数据。例如,我实际上尝试使用我当前的头像来查看我从 DataRectangle 获得的缓冲区是否与图像中的实际像素匹配,但没有运气(甚至检查了格式是否正确,它是正确的)。

我究竟做错了什么?有更好的方法吗?或者我的 UV 故事是错误的,它是否可以比在平铺之前切割源矩形更简单?

感谢您的时间,

伦纳德·方泰因

更新#1

我实际上设法使用以下字节数组的转换将像素数据导出到位图:

所以数据似乎并不像我想象的那么虚假。然而,我的下一个问题是抓取源矩形中指定的像素并将它们复制到新纹理中。我要剪切的图像是 150x150,但由于某种原因,它被拉伸为 256x256 图像(2 的幂),但是当实际尝试访问超过 150x150 的像素时,它会引发 OutOfBounds 异常。此外,当我实际尝试创建第二个大小为 256x256 的空白纹理时,无论我在其中放入什么,结果都是完全黑色的。

这是我当前的代码:

所以我的新(附加)问题是:如何将像素从一个纹理移动到另一个较小的纹理,包括 Alpha 通道?当我的原始纹理为 150x150 时,为什么 SurfaceDescription 会报告 256x256?

0 投票
1 回答
1046 浏览

c++ - DirectX 多个 DLL 版本?

我看到 DirectX 9 有多个 DLL 版本,比如

  • d3d9.dll
  • d3d9_25.dll
  • d3d9_42.dll
  • d3d9_43.dll

我想知道有什么区别,以及如何检测到它?我一直在使用GetModuleHandle("d3d9.dll");,但如果应用程序有d3d9_43.dll,那么我的代码不会检测到应用程序正在使用 DirectX,对吗?如果不对所有 DLL 版本进行硬编码,我将如何检测它?

0 投票
1 回答
1455 浏览

c++ - Directx9绘制模型的方法

我想知道除了经典之外是否还有其他方法

用于在屏幕上绘制模型。

0 投票
1 回答
13592 浏览

visual-studio-2010 - 致命错误 LNK1104:无法打开文件 'd3dc9.lib'

我目前正在阅读一本游戏编程书,并试图编译一些 directx9 代码

我有最新的 DirectX11 SDK 并且代码有这些代码行

但我得到 LINK:致命错误 LNK1104:无法打开文件 'd3dc9.lib'

我不知道如何设置它来找到这个文件,虽然事实上我不明白为什么它要求它,因为它不在 DirectX 11 SDK 的 Lib 文件中,也不是我问的为了。

0 投票
2 回答
4495 浏览

direct3d - 如何使用“WaitForVBlank”在 Direct3d9 中获取 VSYNC 中断

我是 Direct3D9 的新手,正在尝试一些东西。我希望在“IDirect3DDevice9Ex”设备上使用“WaitForVSync”。但是,我不知道如何使用它并获得 VSYNC 中断。我在 MSDN 和任何代码片段上都找不到太多帮助。任何帮助,将不胜感激。

谢谢,莫茨

0 投票
2 回答
850 浏览

c++ - 需要确定一个矩阵来对齐两个三角形

我需要确定一个矩阵,该矩阵表示在 3D 中对齐两个已知全等三角形所需的变换。我之前尝试过询问是否采用不同的方法,但我遇到了很多障碍,所以我现在正在考虑尝试不同的想法。

有没有人能指导我如何创建一个矩阵来表示将三角形 ( ) 移动到与另一个 ( )原点DEF相同的位置和方向所需的平移和旋转?ABCA

0 投票
1 回答
472 浏览

visual-studio-2010 - 在 DirectX10 中绘制 IDirect3DSurface9

我使用过 DirectX 9 相当多,最近才切换到 DirectX 10。我注意到很多 9 的设备方法已经丢失或被更改。例如,在 DX9 中,StretchRect 方法用于在屏幕上绘制表面。

我的问题是:我有一个需要在屏幕上绘制的 IDirect3DSurface9,但我使用的是 DirectX 10。10 的图形设备可以做到这一点吗?还是我需要获得 9 的图形设备并用那个来做?甚至可以同时拥有 IDirect3D9Device 和 IDirect3D10Device 吗?

0 投票
1 回答
319 浏览

directx - 在 DirectX 9.0 的后台模式下加载资源

我用 DirectX9.0 制作了一个 3D 游戏。

我想通过使用线程在后台模式下加载资源。

这是我的代码。

----------------Attakc.h---------------

----------------Attakc.cpp---------------

...

……

然后,当我运行这个项目时,出现 E_OUTOFMEMORY 错误。(D3DXCreateTextureFromFile)

我认为它属于线程的同步。

我没有使用线程加载资源的经验。

请帮我。