需要帮助结合gScaled if语句

时间:2016-05-20 03:54:59

标签: c++ opengl

我正在创建一个缩放功能,到目前为止它可以工作,但现在我遇到了一个新问题,我使用大量的if语句来改变gScaled。我希望尽可能少地将这些if语句组合起来,以便以后更容易向缩放添加较小的增量,而无需在另外100个if语句中写入。

代码:

if(zoom == 1){
        glScaled( 1.1, 1.1, 1.1);
    }
    if(zoom == 2){
        glScaled( 1.2, 1.2, 1.2);
    }
    if(zoom == 3){
        glScaled( 1.3, 1.3, 1.3);
    }
    if(zoom == 4){
        glScaled( 1.4, 1.4, 1.4);
    }
    if(zoom == 5){
        glScaled( 1.5, 1.5, 1.5);
    }
    if(zoom == 6){
        glScaled( 1.6, 1.6, 1.6);
    }
    if(zoom == 7){
        glScaled( 1.7, 1.7, 1.7);
    }
    if(zoom == 8){
        glScaled( 1.8, 1.8, 1.8);
    }
    if(zoom == 9){
        glScaled( 1.9, 1.9, 1.9);
    }
    if(zoom == 10){
        glScaled( 2.0, 2.0, 2.0);
    }
    if(zoom == -1){
        glScaled( 0.9, 0.9, 0.9);
    }
    if(zoom == -2){
        glScaled( 0.8, 0.8, 0.8);
    }
    if(zoom == -3){
        glScaled( 0.7, 0.7, 0.7);
    }
    if(zoom == -4){
        glScaled( 0.7, 0.7, 0.7);
    }
    if(zoom == -5){
        glScaled( 0.6, 0.6, 0.6);
    }
    if(zoom == -6){
        glScaled( 0.5, 0.5, 0.5);
    }
    if(zoom == -7){
        glScaled( 0.4, 0.4, 0.4);
    }
    if(zoom == -8){
        glScaled( 0.3, 0.3, 0.3);
    }
    if(zoom == -9){
        glScaled( 0.2, 0.2, 0.2);
    }
    if(zoom == -10){
        glScaled( 0.1, 0.1, 0.1);
    }

我尝试用我自己的替换双打(IE gScaled(x,y,z);)然后添加到那些(x + = 0.1; y + = 0.1; z + = 0.1;)这样做工作,但我无法弄清楚如何让它停止。

1 个答案:

答案 0 :(得分:4)

呃,为什么不简单地计算呢?

double const f_zoom = 1.0 + 0.1 * zoom;
glScaled(f_zoom, f_zoom, f_zoom);

除了避免大量重复代码之外,它还可以防止您在代码中遇到的错误:

/* ... */
if(zoom == -3){
    glScaled( 0.7, 0.7, 0.7);
}
if(zoom == -4){
    glScaled( 0.7, 0.7, 0.7);
}
/* ... */
你看到了吗?对于-3和-4,缩放因子编码为0.7。那肯定不是你想要的。