移动+缩放单个OpenGL UI控件

时间:2011-02-16 08:14:13

标签: opengl-es opengl-es-2.0

我是OpenGL的新手,我刚读了一篇关于OpenGL 2.0的精彩教程。 我的目标是OpenGL ES 2.0。

我需要创建一个由控件组成的UI。控件可以在编辑模式下移动。 我认为为每个控件创建顶点并将它们上传到GPU,然后使用简单的顶点着色器将所有顶点映射到屏幕在移动和缩放单个部件(控件)时都有其局限性。 我在这儿吗?

我认为最好为每个控件创建统一的属性,例如宽度/高度/左/上/其他控制定义的属性,如滑块位置等等。然后将constrant顶点智能地映射到屏幕上聪明的着色器。 然后主机应用程序只需更新控件的统一属性,而不是每次都上传新的顶点集。

你推荐什么? 是否有关于此的示例或教程?

1 个答案:

答案 0 :(得分:1)

那么你的问题是,着色器只能在一个顶点上工作,除非它们是制服,否则无法访问其他顶点。这是几何着色器的一个很好的例子,你可以发送中心,它会产生你喜欢的一切......圆形,方框......除了方面或大小等其他很少的制服......

但是你也可以使用顶点着色器。您将创建自动顶点到中心。对于2x2平方顶点,就像:

1. -1, -1
2.  1, -1
3.  1,  1
4. -1,  1

然后,您可以移动此形状的中心并将其设置为缩放。如您所见,您只需缩放2D矢量,轻松完成任务,并将它们添加到中心位置。这样您就可以在正确的位置获得4个位置,并且可以绘制正方形。这样做的想法是你可以创建任何形状(不仅仅是宽度,高度,顶部,左边都可以使用的盒子),你可以将这些形状上传到纹理缓冲区。对于使用着色器绘图,您只需指定哪个形状,中心位置和大小是多少......我认为添加新内容会非常快速和容易。

是的,你是正确的映射一切,更新是非常缓慢的事情。我昨天实际上正在进行一些关于测绘的研究,事实证明它的性能非常糟糕。