我是OpenGL和C ++的新手。假设我从2D方块开始(在左侧),如下图所示。我想让它与glutKeyboardFunc()
互动,所以当我按下一个数字时,新的方框将在相应的边缘旁边绘制。
图中最好的方法是拥有一个容纳所有框的树结构。但我不知道如何将基本原语保存到数据结构中,例如树。
我知道我只能拨打glutDisplayFunc(myDisplay)
一次,剩下的应该由glutKeyboardFunc()
任何帮助将不胜感激:)
更新:感谢您指出glutPostRedisplay()
,但如果我想让该框可选并继续使用glutMouseFunc()
跟踪当前选中的框,该怎么办?添加更多的框,我需要知道它创建了多少个子框,这样我可以在绘制新框时提供正确的位置。现在看来使用树数据结构更有意义吗?只是不确定如何将我需要的信息存储到树中。
答案 0 :(得分:1)
如果我理解您的问题,您可以创建一个代表该框的类,例如:
class Box {
public:
void Move(int newx, int newy) {
x = newx;
y = newy;
}
void Resize(int newx, int newy) {
w = newx;
h = newy;
}
int getX() { return x; }
int getY() { return y; }
int getW() { return w; }
int getH() { return h; }
private:
int x, y, w, h;
};
然后,您可以使用全局向量来保存所有框:
#include <vector>
vector<Box> box;
然后您可以添加如下框:
Box newbox;
newbox.Move(40,50);
newbox.Resize(10,10);
box.push_back(newbox);
移动现有的一个:
box[3].Move(70,20);
对不起,我不能完全回答你的问题,但我希望你知道如何完成你的项目。
编辑:要实现树结构,可以将这些变量添加到Box类中:
private:
Box* parent;
vector<Box*> child;
这将允许您跟踪树结构。然后做类似的事情:
myBox->getChild(0)->getChild(1)
将检索myBox的第一个子节点的第二个子节点。我希望这对你有意义。