管理HLSL效应
Managing HLSL effects
例如,我有World类。世界有模型集合:
class World
{
public:
map<string, Model*> Models;
};
模型将是应用程序中所有实体的抽象类,例如汽车、球、山或立方体。
问题是,管理这些模型效果的最佳实践是什么。比方说,我有4个效果文件:base1.fx、base2.fx、base3.fx、bas4.fx。它们每个都有类接口,可能绑定到模型(IBaseEffect1、IBaseEffect2、IBaseEffects 3、IBaseEffect4)。
现在,我是否应该考虑每个模型的独立性,并做一些类似的事情:
Cube1.Bind(IBaseEffect2);
Car.Bind(IBaseEffect3);
模型有能力管理效果,所以我会制作:
World::Render()
{
foreach model -> Render();
}
这是我的发动机的实际解决方案。
或者更好的办法是独立管理效果,并做一些类似的事情:
IBaseEffect1.SetAsActual();
foreach Model which should be considered for effect1 -> Render();
IBaseEffect2.SetAsActual();
foreach Model which should be considered for effect2 -> Render();
等等。。。
也许我的整个观点都是错误的,应该换一种方式吗?
我认为您应该同时使用这两种方法。即:
- 每个模型都有自己的效应边界:
model->Bind(effect);
- 您单独管理效果(出于效率原因):
- 根据模型使用的效果对其进行排序
- 对于每种效果:
- 设置效果
- 渲染与当前效果关联的所有模型
必须以固定顺序渲染的模型(例如透明对象)应以不同的方式处理,除非所有模型都具有相同的效果。
相关文章:
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 如何在Visual Studio 2017中启动HLSL调试器?
- 在 texture2D 中绘制线条和字符(DirectCompute HLSL 编程)
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- C 在指针阵列中删除第一个元素,以效应后来的元素
- 如何在 HLSL 中定义具有大维度的数组
- 是否有任何 DirectX 11 (HLSL 5.0) 等效于 DirectX 9 纹理"string function"语法?
- 如何创建QT标签悬停效应
- 我可以以某种方式将 HLSL 放入 .lib 中吗?
- DirectX Toolkit加载了带有自定义HLSL着色器"顶点"着色器输入签名的模型
- HLSL 代码未注册
- 如何在HLSL DirectX11 C++中使用Texture2DArray
- DirectX HLSL 着色器隐式截断矢量类型错误
- 我们如何从霍尔效应传感器获得树莓派的模拟输入
- 在 HLSL 中获取顶点的颜色
- 为结构体C++分配HLSL变量
- 复制阴极反向终端效应
- Direct X & HLSL - Normal ReComputing
- HLSL粒子系统将不显示
- 管理HLSL效应