Oop 从Cinder中的另一个类绘制到画布

Oop 从Cinder中的另一个类绘制到画布,oop,opengl,cinder,Oop,Opengl,Cinder,是否有一种方法可以使用libcinder绘制,而不必将所有代码放在main类的draw()方法上。我正在开发一个大的应用程序,把所有东西都塞进一个文件是不方便的 这是该想法的一个例子: class MyApp : public AppBasic { public: void setup (); void update (); void draw (); private: vector<MyObject> myObjects; }; MyApp

是否有一种方法可以使用libcinder绘制,而不必将所有代码放在main类的draw()方法上。我正在开发一个大的应用程序,把所有东西都塞进一个文件是不方便的

这是该想法的一个例子:

class MyApp : public AppBasic {
  public:
    void setup ();
    void update ();
    void draw ();
  private:
    vector<MyObject> myObjects;
};

MyApp::draw () {
  for (int i = 0; i < myObjects.size(); ++i) {
    myObjects[i].render ();
  }
}

CINDER_APP_BASIC (MyApp, RendererGL)

/* ------------------ */

class MyObject {

  public:
    void render ();

};

void MyObject::render () {
  Rectf rect (0, 0, 20, 20);
  gl::drawSolidRoundedRect(rect, 15.0);
}
MyApp类:公共AppBasic{ 公众: 无效设置(); 无效更新(); 无效提款(); 私人: 向量肌对象; }; MyApp::draw(){ 对于(int i=0;i是的,有办法。实际上,有几种方法

  • 至少使用以下方法创建一个类:
    void setup()
    void update()
    void draw()
    。然后,您可以在主应用程序中创建此类的实例,将它们存储在成员变量或
    std::vector
    中。然后分别从主应用程序的
    设置
    更新
    绘制
    方法中调用这些方法
  • 使用Cinder的事件系统连接到其
    更新
    绘制
    事件。请参阅ListenerBasic示例:。有关所有可用事件的列表,请参阅:
  • 编写或使用场景图系统来处理绘制所有对象。它将以正确的顺序调用每个对象的
    draw()
    方法,可以将对象放在其他对象的顶部,可以检测光标下的对象,等等。众所周知的场景图是,但它与Cinder不兼容。在我的一个示例中可以找到一个非常基本的场景图:
  • -保罗