gpt4 book ai didi

c++ - 在 Direct3D11 中模拟 Direct3D9 固定功能管道

转载 作者:行者123 更新时间:2023-11-30 02:34:53 25 4
gpt4 key购买 nike

我们的软件目前使用 Direct3D9 中的固定功能管道,为我们的用户提供一种易于编写脚本的方式,将灯光和对象转换到一个简单的场景中。我们允许平行光、点光和聚光灯。我试图将我们转移到 Direct3D11,但我希望它尽可能接近 Direct3D9 固定功能管道作为基准。我们可以稍后添加诸如逐像素照明之类的东西。我是着色器编码的新手,尽管我多年来一直在使用 C++,但我还是觉得自己不适应。我想知道是否有支持 DX11 的着色器可以完美模拟 DX9 固定功能管道提供的照明。我在 FixedFuncEMUFX11 中看到了旧的点光源仿真示例,我将尝试使用它作为基础,但我只知道我没有尽可能高效地执行此操作,而且正确的聚光灯模拟的数学超出了我的范围。是否有任何开源软件可以模拟固定功能管道,或者包含 DirectX11/10 的定向、点和聚光灯实现?我认为我只需要 .fx 或 .hlsl 文件。即使它达到 8 个光源的顶峰,也没有问题。

我目前使用 DirectXTK 作为正确 DirectX11 编程的指南,但如果有更好的编码标准,我很乐意看到行业标准 DirectX11 渲染引擎编程方法的示例。感谢您提供任何建议。

最佳答案

对于 Direct3D 11 的基本渲染,DirectX Tool Kit内置着色器基于 XNA Game Studio 4它提供了一组很好的基本功能,包括定向照明和逐像素照明。它们旨在与所有 Direct3D Feature Level 一起使用硬件,因此他们不会实现诸如聚光灯之类的东西,而这些东西可以用更现代的硬件轻松完成。

FixedFuncEMU11 示例是旧版 DirectX SDK 的 FixedFuncEMU Direct3D 10 示例的 Direct3D 11 端口。着色器对于理解各种 Direct3D 9 特定的固定功能管道很有用,但不包括“标准”内容,例如在 HLSL 中实现标准照明模型。另请注意,此示例使用 Effects system for Direct3D 11它有own issues .尽管如此,它还是很有用的:

  • 固定功能转换管道
  • 固定功能照明管道
  • 阿尔法测试
  • 用户剪辑平面
  • 像素雾
  • Gouraud 和 Flat 阴影模式
  • 投影纹理查找 (texldp)
  • 多纹理
  • D3DFILL_POINT 填充模式
  • 屏幕空间 UI 渲染

您可能想尝试一些旧的 Direct3D 9 时代对 HLSL 着色器编程的介绍。虽然不是 100% 兼容 Direct3D 11,但它们非常接近并且 HLSL 本身基本相同。我找到了 this article例如。

还有许多优秀的 Direct3D 11 书籍,所有这些书籍都涵盖了 HLSL 着色器,因为 Direct3D 11 中没有固定功能的管道。参见 Book Recommendations了解一些细节和注释,因为其中一些书籍是在 DirectX SDK 停用之前编写的。特别是,您应该查看 Varcholik 的 Real-Time 3D Rendering with DirectX and HLSL,因为它主要侧重于 HLSL 创作。

关于c++ - 在 Direct3D11 中模拟 Direct3D9 固定功能管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com