【问题标题】:Combine shaders with directx 11将着色器与 directx 11 结合使用
【发布时间】:2013-11-19 00:40:34
【问题描述】:

有没有办法组合着色器?

假设我想要 4 个模型:

  • 仅渲染纹理。
  • 具有纹理和基本光效的产品。
  • 使用骨骼动画渲染。
  • 使用骨骼动画和基本灯光效果渲染。

我知道这样做的唯一方法是创建 4 个像素和顶点着色器文件。但是我是否还有 5 个想要添加的效果,我必须创建更多文件,如果我想添加越来越多的效果?我怀疑对于每种效果,我必须为每种可能性再创建一个文件。我知道对于灯光我可以直接在其他文件中设置它,当我不想使用灯光时,我将它设置为 1.0f,这样颜色就不会改变。但是如果我想要更多的效果,我的着色器中会有 20 个变量,如果我不使用它们不是没用吗?还有其他方法吗?

在此先感谢,我试图尽可能地理解,对不起我的英语。

【问题讨论】:

    标签: c++ directx hlsl


    【解决方案1】:

    以下是一些想法:

    • 将常用功能移动到单独的文件中,并使用#include 在着色器之间传播。
    • 使用#ifdef 进行条件编译。通行证通过/Dfxc.exeD3D_SHADER_MACROD3DCompile 的标志定义。您可以将所有内容组合到一个着色器中,然后将其编译成许多不同的二进制文件。
    • 使用一些效果框架(默认 DirectX 之一,谷歌搜索或自己制作):着色器不需要单独的文件,所有文件都放在一个文件中,就像状态一样。
    • 保持原样:HLSL 很复杂,任何更多的复杂情况都可能导致无法维护的混乱。

    希望对你有帮助!

    【讨论】:

    • 是的。幸运的是我真的不需要一些着色器,我只是想知道常见的方法是什么,但是在阅读了你的帖子和下面的链接之后,我想没有常见的方法(blogs.msdn.com/b/shawnhar/archive/2009/08/17/…)。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多