是否可以定义';绘图面板';在opengl中直接绘制它们而不是窗口?
我想知道以下内容是否可以在OpenGL中轻松实现:是否可以定义';绘图面板';在opengl中直接绘制它们而不是窗口?,opengl,panel,Opengl,Panel,我想知道以下内容是否可以在OpenGL中轻松实现: 将窗口分为多个面板 使用标准化坐标(0-1)将每个面板放置到位,以便在重新调整窗口大小时,面板将保持在正确的位置 直接绘制到先前定义的其中一个面板中 结果应该类似于下图: 到目前为止,我一直在直接将对象绘制到窗口中,用每个面板的相应值偏移坐标。然而,这似乎不是正确的做事方式。非常感谢经验丰富的开发人员提供的任何建议和示例代码 编辑:到目前为止,我所读到的,使用glScissor或glViewport可能是实现我想要的两种方法,但是我不知道这两
glScissor
或glViewport
可能是实现我想要的两种方法,但是我不知道这两种方法的优缺点(非常欢迎您的见解!)。此外,我更愿意定义某种类型的面板
,返回它的句柄并直接绘制到其中。如果使用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);
}
}
这些窗口是以像素为单位的固定大小,还是希望它们随窗口一起调整大小?如果它们调整大小,你是想重新定位它们内部的东西,还是想让它们简单地拉伸?@Thomas主窗口以固定大小开始,但它是可重新调整大小的。每个面板都像
1/num_panels*100%
高~90%宽。如果主窗口调整大小,面板应保持其各自的百分比大小。谢谢代码。我不太理解“如果您想将绘图限制在其中一个面板(不使用局部坐标)”部分。你说的局部坐标是什么意思?理想情况下,对于每一个面板,我希望能够为需要绘制的对象传递绝对坐标(因此,每个面板基本上被视为一个新窗口),这将是我所考虑的相对(或局部)坐标。如果希望面板的角为例如(0,0),则使用glViewport()
。使用glScissor()
坐标仍将保持不变(您只需剪裁正在绘制的像素)。是否可以使用标准化坐标定义我的面板位置?似乎glViewport
需要绝对坐标。但是,如果我可以使用标准化坐标(0-1),那么面板将始终保持在原位,并随父窗口调整大小。可能吗?调整窗口大小时,您必须计算并更新要传递给glViewport()
的屏幕坐标。不要认为这里有使用标准化坐标的方法(仅用于参数;实际图形将使用您设置的任何坐标)。或者,可以将面板渲染为纹理,然后使用四边形将该纹理绘制到面板位置。