问题标签 [direct3d11]
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# - 在 Windows Store App 中使用 SharpDX 加载纹理
我已将我的 C# 游戏从 OpenTK (OpenGL) 转换为 SharpDX (DirectX),并在 Visual Studio 2010 中启动并运行它。我还在 Metro 的 Visual Studio 11 中启动并运行它,在 Windows 8 开发者预览版中。但是,Metro 构建仍然缺少纹理,所以我的多边形现在只是简单地着色。问题是用于加载图像的方法在 Metro DLL 中不存在。Windows Store App 中的 Texture2D 类(继承自 Resource 类)中都缺少这些方法:
有谁知道这些最终是否会在 Metro 中实施?或者有没有我可以使用的替代方法?请记住,在此之前我对 DirectX 或 SharpDX 一无所知,所以我仍然对这一切感到非常兴奋。
为 SharpDX 找到任何类型的帮助或信息并不容易,这是一种耻辱,因为它似乎是使用 C# 在 Metro 中的 3D 的一个很好的解决方案。
memory-management - Direct3D 11 中的 GetAvailableTextureMem 等效项
我正在寻找一种可能性来估计 Direct3D 中的可用纹理内存,就像可以使用 一样IDirect3DDevice9::GetAvailableTextureMem
,但到目前为止没有找到任何东西。有什么建议么?
directx - 采样 BC5_SNORM 纹理会产生不正确的值范围
我正在使用 Direct3d 11,我遇到了一些奇怪的事情。我已经拍摄了一张法线贴图并将其编码为 DDS 文件两次。一次使用R8G8B8A8_SNORM编码,一次使用BC5_SNORM。
接下来我使用D3DX11CreateShaderResourceViewFromFile和D3DX11GetImageInfoFromFile加载每个纹理。当我在像素着色器中对这些纹理进行采样时,我发现R8G8B8A8_SNORM纹理返回的值在 [-1,1] 范围内,这是我对 SNORM 纹理的期望。但是,BC5_SNORM纹理返回的值在 [0,1] 范围内,这对我来说没有任何意义。
我用我的调试器和 PIX 进行了三重检查。纹理的格式是正确的(BC5_*S*NORM),所以我不知道为什么它不返回有符号值。
viewport - RSSetViewports 在 Direct3D 11 中是异步调用还是同步调用?
我的应用程序必须处理超过 20 个视口,而只允许 16 个。值得庆幸的是,整个场景可以分成几个部分,这些部分不会从一个顶点“泄漏”到另一个顶点,每个部分的视口少于 10 个。
现在的问题是在渲染过程中更改视口数组是否好(尽管允许)。我的猜测是,只要它被称为 * RS *SetViewports 它应该是异步的,并且可以在渲染过程中安全地调用。但我找不到任何证据。
multithreading - 我应该如何处理 DXGI 中的多个交换链?
这里很混乱。是不能同时访问一个交换链,还是DXGI完全不是线程安全的?
如果我有 2 个交换链用于一张卡上的 2 个显示,那么交换它们的最佳方式是什么?我很难在多个交换链上找到任何资源。
c++ - 使用 DirectXMath 获得 2 点之间距离的最佳方法是什么
使用新的 XMVECTOR 和 XMFLOAT3 类获得两点之间距离的最佳方法是什么?我在 XMVector* 函数系列中找不到执行此操作的函数,因此我想出了以下内容:
这会比普通的 Vector3 类更快吗?只有 3 个浮点数用于 x、y、z,然后使用 sqrt,因为它使用了内在优化?即:
c++ - 如何以 SM5.0 方式渲染填充的 B-Spline?
如果我想为 GPU 提供一些等值线补丁,最后让它给我一些三角形图元。有没有一些实用的方法,或者我应该在哪里寻找它们?
似乎 Direct2D 使用 D3D9 函数。我想它可能会在 CPU 中进行镶嵌。我想知道是否有GPU方式。
directx - DirectX 11:同时使用多个适配器
我们需要从一台 pc 驱动 8 到 12 台显示器,所有显示器都渲染单个 3d 场景图的不同视图,因此必须使用多个显卡。我们目前在 dx9 上运行,因此正在寻求迁移到 dx11 以希望使这更容易。
初步调查似乎表明,显而易见的方法是行不通的——除非我们从单独的进程中驱动每张卡,否则性能很差。网络搜索一无所获。任何人都可以建议使用 dx11 从单个进程同时使用多张卡的最佳方法吗?
direct3d - 为什么我们仍然在 D3D11 等中使用固定函数混合操作?
我一直在试图理解为什么我们仍然在较新的 3D API(如 D3D11)中使用固定功能混合模式。在 D3D10 中,移除了固定功能 Alpha Clipping,以支持使用着色器。为什么,因为它在几乎任何情况下都是一种更强大的方法。
那么为什么我们不能计算或拥有混合操作(也就是我们当前正在渲染的 RenderTarget 中的纹理样本)?视频卡流水线中是否存在一些硬件设计问题使得这难以完成?
这很有用的原因是因为您可以做一些事情,例如使折射着色器运行得更快,因为您不必在每个折射对象叠加的两个渲染目标之间来回交换。例如用于操作系统或游戏 UI 的折射窗口系统。
哪里可能是提出这样一个想法的最佳地点,因为这不是一个讨论论坛,因为我希望在 D3D12 中看到这个?或者这在 D3D11 中已经可以实现了吗?
c++ - 开始 Direct3D,简单三角形不渲染
我一直在玩游戏制作一段时间,首先使用 SDL,然后使用 SFML。为我完成了基础工作真是太好了,但现在我想再迈出一步,学习如何从头开始制作图形。因此,我正在尝试学习 Direct3D 的基本原理,并且已经阅读了一些关于 D3D 11 的教程以开始使用。我只是想通过在深色背景上绘制一个白色三角形来获得绝对的基础知识......但我无法让它工作。
我使用的是 Visual Studio 2012 RC 和 Windows 8 SDK,所以这里有一些 C++11 语法,而且没有 D3DX。我已经成功地设置了窗口并且 Direct3D 的初始化似乎进行得很好。它运行主循环的渲染部分,因为它以我指定的颜色清除屏幕。但是,我的花哨的白色三角形不会出现。我已经多次检查了我的代码,由于缺乏经验,我无法判断它有什么问题。我已经剪掉了窗口初始化/d3d 关闭和其他不相关的部分,但我害怕剪掉太多,以防其中一些与我的问题有关,所以...... big-wall-of-code-warning .
我认为我已经完成了所有必需的步骤;我创建设备、设备上下文、交换链和渲染目标。然后我创建一个顶点着色器+输入布局和一个像素着色器。之后我创建一个顶点缓冲区,为我的三角形添加顶点并将原始拓扑设置为 TRIANGLELIST,这就是初始化。在我的主循环中,我将 D3D 指向我的顶点/像素着色器,并告诉它绘制我插入缓冲区的 3 个顶点。但是只显示调用 ClearRenderTargetView 的深蓝色背景;没有三角形。我是否错过了任何步骤,或者在途中做错了什么?
这是我拥有的代码(我承认在这个代码约定上有点松懈,所以在指针变量之前没有 p 等):
主循环:
Direct3D 初始化:
我的顶点类型:
我的顶点着色器:
我的像素着色器: