Android OpenGL和9patch绘图工具

Android OpenGL和9patch绘图工具,android,graphics,opengl-es,drawable,Android,Graphics,Opengl Es,Drawable,我正在用opengl在android上制作一个砖块破解游戏,我决定使用9patch drawables,例如砖块可以很容易地放大到更宽或更高。这可能吗 另外,我制作了图像,然后使用android工具文件夹中的draw9patch.exe制作图像。这是相当多的工作,现在它证明了它在每一面都增加了几个像素,所以图像不再是二的幂,它们必须是二的幂 那么,如何在openGL中使用九块补丁绘图 所以图像不再是二的幂,它们一定是 如果您使用OpenGL ES 2,则该限制已解除。纹理可以是任意大小 那么,如

我正在用opengl在android上制作一个砖块破解游戏,我决定使用9patch drawables,例如砖块可以很容易地放大到更宽或更高。这可能吗

另外,我制作了图像,然后使用android工具文件夹中的draw9patch.exe制作图像。这是相当多的工作,现在它证明了它在每一面都增加了几个像素,所以图像不再是二的幂,它们必须是二的幂

那么,如何在openGL中使用九块补丁绘图

所以图像不再是二的幂,它们一定是

如果您使用OpenGL ES 2,则该限制已解除。纹理可以是任意大小

那么,如何在openGL中使用九块补丁绘图


你没有。9-patches和Drawable用于常规Android视图类,而不是OpenGL。如果你想有类似的行为,你必须实现自己的OpenGL渲染逻辑,包括解析9-patch PNG。

看起来NinePatchDrawable对象不允许你访问底层位图,但我想你可以将它们绘制到画布上,然后从中读取生成的位图。这可能会解决你的两个问题的力量

然后可以使用读取填充区域,并将这些位置转换为0..1范围以用作纹理坐标

然后,在OpenGL中,您可以使用九个四边形的网格绘制纹理砖,如“#”符号。顶点的纹理坐标将是固定的,并对应于九个面片填充。位置坐标取决于块的缩放比例。您可以保持角四边形的大小相同,并根据需要缩放中心四边形。(剩余的四边形将根据需要沿一个维度进行缩放,以保持所有东西都连接在一起)


就我个人而言,我倾向于忘记Android nine补丁,而是采用砖艺术品的惯例,即(比如)中间50%的宽度和高度是可伸缩的,而周围25%的部分是不可伸缩的。不过,这取决于你要放弃多少工作。

我刚刚学习了1.0,不会突然学习2.0。我认为这并不能真正回答我关于9patch的问题。@user717572:我强烈建议你学习2,因为这样你就可以面向更广泛的受众。例如,WebGL基于ES-2。顺便说一句:我不确定ES-1,但我只是看了一下规格,据我所知,ES-1已经支持任意纹理大小。我不确定我是否理解最后一部分。你的意思是要创建类似于单独的图像,例如:brick_top、brick_middle、brick_left?不,它将与你的九个面片一样,只是如果你在所有纹理中都使它们相同,就不需要标记可拉伸区域。然后你可以把它们作为普通的位图绘制工具加载,这样你就可以更容易地访问底层的位图数据并对纹理坐标进行硬编码。如果是这样,那么是的,每个四边形将包含一个子图像,您只需拉伸您想要拉伸的子图像,并将九个四边形平铺在一起。