保姆级教程:从Anaconda到实盘,手把手教你用Python在掘金量化上跑通第一个策略
2026/6/9 2:34:58
在C#代码中更新输入布局后,需确保HLSL着色器代码与之匹配。创建输入布局时,它会与顶点着色器的输入签名匹配。输入签名中缺失的语义会被忽略,但顶点着色器输入签名中定义的语义必须在输入布局中定义,否则会出现“参数错误”的错误信息。
另外,常量缓冲区的数据应按更新频率分组。由于视图/投影矩阵每帧只更新一次,可将其存储在每帧常量缓冲区中,世界矩阵仍放在每个对象的常量缓冲区,最终的世界/视图/投影矩阵在顶点着色器中计算,如float4x4 wvp = mul(World, ViewProjection);,这样能减少每个对象发送到常量缓冲区的数据量。
为了实现材质和光照操作,需要更新顶点和像素着色器结构以及常量缓冲区。具体步骤如下:
- 扩展每个对象的常量缓冲区,支持将法向量和位置转换到世界空间。
- 添加每帧常量缓冲区,包含相机位置和光照配置。
- 改变顶点着色器输入结构,接受法向量和UV坐标;更新像素着色器输入结构,接收转换到世界空间的法向量、世界空间位置和UV坐标。
- 由于着色器变得复杂,将其拆分为多个文件,使用HLSL的#include指令。实现一个简单的着色器,将深度输出到红色通道,以演示代码复用。