我想知道在OpenGL中是否可以轻松实现以下内容:
结果应如下图所示:
到目前为止,我一直在将对象直接绘制到窗口中,使用每个面板的相应值来偏移坐标。然而,这并不是正确的做事方式。任何来自经验丰富的开发人员的建议和示例代码都非常感谢!
编辑:到目前为止,我使用glScissor
或glViewport
阅读的内容可能是实现我想要的两种方式,但我不知道是什么优点和缺点是走两条路(你的见解非常受欢迎!)。另外,我真的更喜欢定义某种panel
,返回它的句柄并只是绘制它。
答案 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);
}
}