我想要的是能够通过带有图形的窗口而不是代码来更改变量的值。如果有几个固定值并且只能在它们之间进行选择,那也没关系。你能给我一些想法吗?
我在想这样的事情:|--|--|--|--|--|,其中每条垂直线代表一个值,当您单击该线时,该值会更改,但这有点困难我来实现这一点。任何更简单的想法
我想要的是能够通过带有图形的窗口而不是代码来更改变量的值。如果有几个固定值并且只能在它们之间进行选择,那也没关系。你能给我一些想法吗?
我在想这样的事情:|--|--|--|--|--|,其中每条垂直线代表一个值,当您单击该线时,该值会更改,但这有点困难我来实现这一点。任何更简单的想法
这是一个基于键盘的快速解决方案(我假设是 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);
不同的键盘输入可能是实现这一目标的最简单方法。只需使用 switch 语句来区分不同的可能性并将值存储在变量中。如果您需要从着色器访问它,请将该值用作统一值。
我建议使用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");