Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 选项排列及其处理方法_Algorithm_Rendering_Data Representation - Fatal编程技术网

Algorithm 选项排列及其处理方法

Algorithm 选项排列及其处理方法,algorithm,rendering,data-representation,Algorithm,Rendering,Data Representation,我发现自己有一个问题,似乎找不出一个好办法来处理它 基本上我有4个选项,对于所有的选项排列,我有一个集合,我想把它们分类。比如: bool A, B, C, D 可分为: Map A, AB, AC, AD, ABC, ABD, ABCD... 所以AB=BA,所以不是所有排列,而是每个组合的表示 那么为什么我需要这个映射呢 基本上,A、B、C和D是延迟渲染器中的GBuffer通道,我想告诉着色器要使用哪些缓冲区。绑定着色器渲染目标非常昂贵,这就是为什么我也希望将排列作为单独的集合。所以

我发现自己有一个问题,似乎找不出一个好办法来处理它

基本上我有4个选项,对于所有的选项排列,我有一个集合,我想把它们分类。比如:

 bool A, B, C, D
可分为:

 Map A, AB, AC, AD, ABC, ABD, ABCD...
所以AB=BA,所以不是所有排列,而是每个组合的表示

那么为什么我需要这个映射呢

基本上,A、B、C和D是延迟渲染器中的GBuffer通道,我想告诉着色器要使用哪些缓冲区。绑定着色器渲染目标非常昂贵,这就是为什么我也希望将排列作为单独的集合。所以我可以为每个排列做一个绑定

所以,问题是

我现在所做的将选项分类的工作是,我只需如下检查:

if (A) {
    if (B) {
        if (C) {
            if (D) {
                return ABCD;
            } else {
                return ABC;
            }
        } else {
            if (D) {
                return ABD;
bind buffer for A
for each (a in A) {draw a}

bind buffer for AB
for each (ab in AB) {draw b}
等等

我觉得首先,至少要知道所有排列都是以正确的方式处理的,这是很棘手的,更不用说如果我想再使用一次缓冲区,会发生什么情况(我不知道为什么,但这并不是那么牵强,可能不是gbuffer中的另一次,但可能是其他选择)

关键是它会增长很多

我想,我的选择是不将排列存储在不同的集合中,但是,我必须对每个集合进行缓冲区重新绑定(最坏的情况)。我也不是在做这样的事情:

if (A) {
    if (B) {
        if (C) {
            if (D) {
                return ABCD;
            } else {
                return ABC;
            }
        } else {
            if (D) {
                return ABD;
bind buffer for A
for each (a in A) {draw a}

bind buffer for AB
for each (ab in AB) {draw b}
以此类推,如果我不将它们存储在不同的集合中,我会将其转换为:

for each (b in buffers) {
    bind buffer according to b
    draw b
}
也就是说,大量的重新绑定,价格昂贵且不是真正的选项

我希望现在还不太清楚,我的推理也很容易理解。所以我想找出一个更好的方法来处理这个问题,但仍然尽可能少地进行重新绑定,如果我重新考虑如何表示排列或类似的东西,也许有一些方法我没有考虑过。但我想我不妨在这里问一下,希望有人对这个问题领域有一些好的想法


谢谢你的阅读

如果您只需要k元素的所有可能组合,请查看1到2^k-1的二进制表示。例如,0001、0010、0011、0100,…,设置位表示inclusion.ahh,这不是一个坏主意。因为OR组合将映射到buffertype而不使用conversionstep,所以会更容易。这些是组合,而不是置换。如果您只需要k元素的所有可能组合,请查看1到2^k-1的二进制表示形式。例如,0001、0010、0011、0100,…,设置位表示inclusion.ahh,这不是一个坏主意。会更容易,因为OR组合将映射到buffertype而无需conversionstep。这些是组合,而不是置换。