是否可以在opengl中定义'plot panels'并直接绘制到它们而不是窗口?

时间:2012-03-18 09:38:52

标签: opengl panel

我想知道在OpenGL中是否可以轻松实现以下内容:

  1. 将窗口划分为多个面板
  2. 使用标准化坐标(0-1)将每个面板放置到位,这样如果窗口重新调整大小,面板将保持在正确的位置
  3. 直接绘制到之前定义的面板之一
  4. 结果应如下图所示:

    到目前为止,我一直在将对象直接绘制到窗口中,使用每个面板的相应值来偏移坐标。然而,这并不是正确的做事方式。任何来自经验丰富的开发人员的建议和示例代码都非常感谢!

    编辑:到目前为止,我使用glScissorglViewport阅读的内容可能是实现我想要的两种方式,但我不知道是什么优点和缺点是走两条路(你的见解非常受欢迎!)。另外,我真的更喜欢定义某种panel,返回它的句柄并只是绘制它。

1 个答案:

答案 0 :(得分:2)

如果您使用glScissor(),则只需定义剪裁矩形(即绘制的位置)。这可能是您需要的一切。 使用glViewport(),您基本上可以在幕后调用glScissor(),也可以更改坐标映射到屏幕空间的方式。

如果要限制绘图到其中一个面板(不使用本地坐标),请使用glScissor()。否则,请使用glViewport()

至于小组,我可能会使用一些抽象基类:

class Panel {
    // ...
    virtual void OnDraw(void) = 0;

    void Draw(void) {
        glViewport(x, y, w, h);
        OnDraw();
        glViewport(0, 0, parent_w, parent_h);
    }
}