如何在C ++中的树数据结构中存储OpenGL基元?

时间:2010-10-04 01:07:12

标签: c++ opengl data-structures tree glut

我是OpenGL和C ++的新手。假设我从2D方块开始(在左侧),如下图所示。我想让它与glutKeyboardFunc()互动,所以当我按下一个数字时,新的方框将在相应的边缘旁边绘制。

alt text

图中最好的方法是拥有一个容纳所有框的树结构。但我不知道如何将基本原语保存到数据结构中,例如树。

我知道我只能拨打glutDisplayFunc(myDisplay)一次,剩下的应该由glutKeyboardFunc()

处理

任何帮助将不胜感激:)

更新:感谢您指出glutPostRedisplay(),但如果我想让该框可选并继续使用glutMouseFunc()跟踪当前选中的框,该怎么办?添加更多的框,我需要知道它创建了多少个子框,这样我可以在绘制新框时提供正确的位置。现在看来使用树数据结构更有意义吗?只是不确定如何将我需要的信息存储到树中。

1 个答案:

答案 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的第一个子节点的第二个子节点。我希望这对你有意义。