2

我想要的是能够通过带有图形的窗口而不是代码来更改变量的值。如果有几个固定值并且只能在它们之间进行选择,那也没关系。你能给我一些想法吗?

我在想这样的事情:|--|--|--|--|--|,其中每条垂直线代表一个值,当您单击该线时,该值会更改,但这有点困难我来实现这一点。任何更简单的想法

4

3 回答 3

2

这是一个基于键盘的快速解决方案(我假设是 C++):

假设您的值都在一个名为的数组中values

const int NUM_VALUES = 5;
int values[NUM_VALUES];

跟踪所选值:

int selectionIndex = 0;

创建一个处理按键的函数:

void keyPressed (unsigned char key, int x, int y) { 
    if (key == GLUT_KEY_LEFT) {
        if(--selectionIndex < 0)
            selectionIndex = NUM_VALUES - 1;
    } 
    else if (key == GLUT_KEY_RIGHT) {
        if(++selectionIndex >= NUM_VALUES)
            selectionIndex = 0;
    }  
    else if (key == GLUT_KEY_UP) {
        values[selectionIndex]++;
    }  
    else if (key == GLUT_KEY_DOWN) {
        values[selectionIndex]--;
    }   
}

最后,在您的初始化中,链接keyPressedglutKeyboardFunc

glutKeyboardFunc(keyPressed); 
于 2013-01-30T18:59:33.977 回答
2

不同的键盘输入可能是实现这一目标的最简单方法。只需使用 switch 语句来区分不同的可能性并将值存储在变量中。如果您需要从着色器访问它,请将该值用作统一值。

于 2013-01-30T19:00:26.257 回答
0

我建议使用http://www.antisphere.com/Wiki/tools:anttweakbar - AntTweakBar,它是一个很棒且易于使用的 GUI 库。

基本上它会呈现一个窗口,您可以在其中轻松放置变量。

初始化它并简单地添加你的变量:

float myFloat = 0.0f;
TwAddVarRW(myBar, "myFloat", TW_TYPE_FLOAT, &myFloat, "min=-10.0 max=10.0 step=0.1");
于 2013-01-31T06:46:55.820 回答