gpt4 book ai didi

c++ - 管理 HLSL 效果

转载 作者:行者123 更新时间:2023-11-30 04:20:57 26 4
gpt4 key购买 nike

假设,对于这个例子,我拥有世界等级。 World 有 Models 的集合:

class World
{
public:
map<string, Model*> Models;
};

模型将是应用程序中所有实体的抽象类,例如汽车、球、山或立方体。

问题是 - 管理该模型效果的最佳实践是什么。比方说,我有 4 个效果文件:base1.fx、base2.fx、base3.fx、bas4.fx。它们每个都有类接口(interface),可能绑定(bind)到模型(IBaseEffect1、IBaseEffect2、IBaseEffect3、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();

等...

也许我的整个观点是错误的,应该换一种方式?

最佳答案

我认为您应该使用这两种方法。即:

  1. 每个模型都有自己的效果绑定(bind):model->Bind(effect);
  2. 您单独管理效果(出于效率原因):
    1. 按模型使用的效果对模型进行排序
    2. 对于每个效果:
      • 设置效果
      • 渲染与当前效果关联的所有模型

必须以固定顺序渲染的模型(例如透明对象)应该以不同的方式处理,除非它们都具有相同的效果。

关于c++ - 管理 HLSL 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925688/

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