问题标签 [directx-10]

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

c++ - 管理 HLSL 效果

假设,对于这个例子,我有世界级。世界有模型集合:

模型将是应用程序中所有实体的抽象类,例如汽车、球、山或立方体。

问题是 - 管理该模型的效果的最佳实践是什么。假设我有 4 个效果文件:base1.fx、base2.fx、base3.fx、bas4.fx。它们每个都有类接口,可能绑定到模型(IBaseEffect1、IBaseEffect2、IBaseEffect3、IBaseEffect4)。

现在,我是否应该独立考虑每个模型,并执行以下操作:

模型有能力管理效果的地方,所以我会:

这是我的引擎的实际解决方案。

或者更好的是独立管理效果,并执行以下操作:

ETC...

也许我的整个观点都是错误的,应该换个方式吗?

0 投票
0 回答
401 浏览

directx-10 - 深度模板和阴影资源为空

在花了大约 3 天的时间试图让阴影贴图工作后,我在将阴影贴图传递给着色器时遇到了一些麻烦。

首先我初始化深度模板和资源视图,然后我绘制(我相信)到深度模板。我发现的问题是深度模板从来没有与之关联的任何数据。

Pix 在资源视图或深度模板中没有显示任何数据,我无法将深度模板的图像保存到文件中(我来自非阴影深度模板)。我可以调用 DrawSceneShadow() 并将其渲染到渲染目标并得到我想要的。

感谢您提供任何帮助。

初始化

渲染场景

0 投票
1 回答
1406 浏览

directx - 创建具有 CPU 写访问权限的 Texture2D 数组

我正在尝试创建一个具有 CPU 写访问权限的 Texture2D 数组。详细来说,我使用的代码如下所示:

但是,这会因 E_INVALIDARG 而失败。创建具有相同尺寸(即 32x32x2)和参数的 3D 纹理效果很好,但在这种情况下并不需要。有谁知道为什么这个设置无效?

0 投票
3 回答
8873 浏览

directx - 使用 DXUT 的 DirectX 示例无法创建 Direct3D 设备(仅限调试)

我在这里遇到了一个很奇怪的问题,我正在尝试从 DirectX 示例浏览器运行 DXUT DirectX 10/11 教程。它们构建良好,但不能在调试模式下运行,因为这会触发错误警告“无法创建 Direct3D 设备”。这很奇怪,因为我可以在发布模式下运行它们。然而,最奇怪的是它们过去常常在调试模式下运行,我发誓我在它运行的那天我什么也没做,而第二天它没有。一位朋友也有同样的问题,大约在同一时间发生。

有没有人遇到过这个问题并知道解决方案,或者可能知道为什么它会发生超出显而易见的事情,如果你没有选择的话,我有一个支持 DirectX 11 的卡。

谢谢。

0 投票
2 回答
2233 浏览

vector - 围绕特定点旋转 D3DXVECTOR3

这可能是一件非常简单的事情,但我对直接 x 的了解并没有达到我想要达到的水平。

目前我正在尝试创建一种在地形上移动的车辆。我试图通过在车辆周围创建一个正方形(4 个 D3DXVECTOR3 点)来使车辆识别地形,每个点都检测地形的高度并相应地调整车辆。

车辆是从 Microsoft 示例代码派生的简单对象。它有一个世界矩阵、坐标、旋转等。

我想要实现的是使这些点与车辆一起移动,当它移动时它们可以检测到高度的差异。这需要我在每次车辆移动时更新点,但我无法终生弄清楚如何让它们正确旋转。

所以总而言之,我正在寻找一种简单的方法来围绕原点(我的车辆坐标)旋转矢量。

这些点位于车轮附近,因此如果它起作用,无论车辆 y 轴旋转如何,它们都会留在那里。

这是我试过的:

这导致该点疯狂地旋转失控并离开地图。

BoxPoint 是指我试图旋转的向量。Vehicle当然是旋转的原点RotationY是它旋转的量。

这是这个正方形中 4 个向量中的 1 个的代码,但我假设一旦我得到 1 个,其余的只是复制粘贴。

无论我尝试什么,在完全离开地图的情况下,该点要么不动,要么失控。

这是我的对象类的片段

我在想有可能使用 D3DXVec3TransformCoord 来做到这一点

0 投票
0 回答
1574 浏览

c++ - 在 Alt 选项卡上最小化 DirectX 10 窗口

我一直在尝试让我的 DirectX 10 应用程序正确处理全屏的 alt 选项卡。当我从全屏切换选项卡时,应用程序会自动进入窗口模式。

我尝试听 WM_ACTIVATEAPP 手动最小化和最大化程序。它可以工作,但它破坏了程序中已经工作的其他功能(在全屏和窗口之间切换)。从 alt 选项卡恢复后,我第一次尝试退出全屏,黑屏闪烁并保持全屏,第二次触发 WM_ACTIVATEAPP 导致整个程序最小化而不是正确进入窗口模式.

下面是我正在使用的代码:

在 WM_SIZE 上:

在 WM_ACTIVATEAPP 上:

在切换窗口模式请求时:

调整大小缓冲区:

如何最小化窗口并仍然保持使用 DirectX 10 在窗口和全屏之间切换的能力?

0 投票
1 回答
637 浏览

c++ - NULL指针,以为是初始化了

我明白了

它指向:

在“atlcomcli.h”中

据我了解,这意味着我忘记在某处初始化指针,但它们似乎都已初始化。

当我使用普通指针而不是“CComPtr”时,它会在 D3DFont.cpp 中的“D3DFont::Draw”中的“font->DrawTextA”处引发“访问冲突读取位置”

以及我对上述功能的使用:

我能错过什么?


'D3DX10CreateFontIndirect' throws 0x8876086C 找不到是什么意思,但是有些google线程是和d3dDevice有关的,所以我猜想一定和它有关。当我有更多信息时会更新。

0 投票
2 回答
2768 浏览

c++ - 在 DirectX 10 中渲染精灵的最有效方法是什么?

我目前正在尝试在 DirectX 10 中显示 2D 精灵的各种方法。我首先使用该ID3DX10Sprite界面在一次调用中批量绘制我的精灵。然而,最终,我想要更多地控制我的精灵是如何渲染的,所以我决定研究基于四边形的精灵渲染(即每个精灵都由一个应用了纹理的四边形表示)。

我一开始很简单:我创建了一个由 4 个顶点组成的单个顶点缓冲区,在绘制精灵之前应用了一次。然后我循环遍历我的精灵,设置适当的属性以传递给着色器,并为每个精灵进行绘制调用,如下所示d3dDevice->Draw( 4, 0);:虽然它有效,但每个精灵的绘制调用都困扰着我,所以我寻找了一种更有效的方法。

在搜索之后,我了解了对象实例化,并决定尝试一下。一切都很顺利,直到我尝试实现精灵最重要的部分——纹理。简而言之,虽然我有一个纹理数组(在我的着色器顶部声明Texture2D textures[10];),可以使用文字/常量作为索引在我的像素着色器中成功采样,但我无法弄清楚如何控制哪些纹理应用于哪个通过纹理索引的实例。

我的想法是为每个实例传递一个纹理索引,然后可以使用该索引对像素着色器中数组中的适当纹理进行采样。但是,在进行了更多搜索之后,我找不到如何完成它的示例(并且发现很多事情表明如果不迁移到 DirectX 11 就无法完成)。

这是否是说在 DirectX 10 中通过对象实例化成功渲染精灵的唯一方法是基于纹理批量渲染它们?因此,例如,如果我的场景由 100 个具有 20 个不同纹理的精灵组成(每个纹理由 5 个精灵引用),那么将需要 20 次单独的绘制调用来显示场景,而我一次只发送 5 个精灵。

最后,我比较茫然。我做了很多搜索,似乎得到了相互矛盾的信息。例如,在这篇文章的第 6 段中,它指出:

使用 DirectX 10,可以将数组中的不同纹理应用于同一对象的不同实例,从而使它们看起来不同

此外,在白皮书的第 3 页,它提到了以下选项:

从纹理数组中读取每个实例的自定义纹理

但是,我似乎找不到一个具体的例子来说明如何设置着色器以使用每个实例的纹理索引来访问纹理数组。

最后,中心问题是:使用 DirectX 10 渲染精灵最有效的方法是什么?

如果答案是实例化,那么是否可以控制将哪个纹理应用于着色器中的每个特定实例 - 从而只需一个绘图调用就可以发送更大批量的精灵及其适当的纹理索引?还是我必须满足于一次只实例化具有相同纹理的精灵?

如果答案是返回到使用提供的 DX10 Sprite 界面,那么我有没有办法更好地控制它的渲染方式?

作为旁注,我还研究了使用几何着色器来创建实际的四边形,所以我只需要传递一系列点而不是管理顶点和实例缓冲区。尽管如此,除非有一种方法可以控制将哪些纹理应用于生成的四边形,否则我将回到仅通过纹理对精灵进行批处理。

0 投票
1 回答
1713 浏览

directx - 使用结构化缓冲区的 Direct3D 10 硬件实例化

我正在尝试使用结构化缓冲区为每个实例数据实现 Direct3D 10+ 的硬件实例化,但我以前没有使用过它们。

我了解在将每个顶点和每个实例数据组合到顶点着色器中的单个结构时如何实现实例化 - 即将两个顶点缓冲区绑定到输入汇编器并调用 DrawIndexedInstanced 函数。

任何人都可以告诉我在使用带硬件实例的结构化缓冲区时绑定输入汇编程序和进行绘图调用等的过程吗?我似乎在任何地方都找不到一个很好的例子。

据我了解,结构化缓冲区绑定为 ShaderResourceViews,这是正确的吗?

0 投票
0 回答
593 浏览

directx - DirectX CreateGeometryShader 因 E_INVALIDARG 而失败

我在使用着色器模型 4.0 (gs_4_0) 编译的 DirectX 应用程序中使用几何着色器。着色器在我的带有 DirectX 11 卡的开发 PC 上正常工作,但在两台带有 DirectX 10.1 卡的客户端 PC 上失败。应用程序在使用已编译的字节码调用 CreateGeometryShader 时失败,返回结果为 E_INVALIDARG。

我假设客户端 PC 显卡或驱动程序不支持我在几何着色器中使用的某些功能。

客户端机器没有安装 DirectX SDK,所以我无法获得更详细的错误消息。

我该如何进一步调查这个问题?是否有我可以解决此问题的可能原因列表?