OpenGL - 以交互方式更改变量值的简便方法

时间:2013-01-30 18:22:01

标签: opengl

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

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

3 个答案:

答案 0 :(得分: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]--;
    }   
}

最后,在初始化过程中,将keyPressed链接到glutKeyboardFunc

glutKeyboardFunc(keyPressed); 

答案 1 :(得分:2)

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

答案 2 :(得分: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");