引入外部位图纹理

引入外部位图纹理

Corona 的工程师们最近做了一些很棒的事情,尤其是在图形引擎方面。其中一项是允许插件创建者和 Corona Enterprise 用户将纹理直接推送到 Corona 图形管道中的功能,从而有效地提供位图数据。生成的纹理的行为将类似于由 graphics.newTexture() 创建的纹理。

表面之下

通常使用 Corona 显示 API 时,图像会被加载,纹理在内存中创建,并通过图形处理单元 (GPU) 进行处理。一旦图像进入该领域,就很难进行像素级的操作——设置和获取单个像素信息是一项耗时的操作,这使得它对于大多数操作来说是不切实际的。

幸运的是,Corona 图形 API 集提供了从基于 C 的插件创建具有自定义数据的纹理的功能。生成的对象继承了 TextureResourceExternal 以及 TextureResource 的属性。一旦创建,这些对象将具有 filenamebaseDir 属性,这些属性可以在任何 display API 中使用或用于分配填充。

可能性?

一个可能利用这些功能的插件示例是加载 SVG(可缩放矢量图形)文件,在原生 C 端对其进行栅格化,并将结果推送到 Corona 以返回纹理对象的插件。然后,该纹理对象可用于创建典型的显示对象。

其他示例包括基于 ImageMagick 或其他 C 库的图像处理插件、自定义文本和字体渲染器,以及从不支持的格式导入图像——可能性是无限的!

进行测试!

为了演示这项技术,我们的工程师创建了一个非常简单的插件,名为 memoryBitmap。此插件在 Corona 市场中提供,它只有一个方法 memoryBitmap.newTexture()。这会创建一个指定尺寸的空白纹理,结果是一个新的 TextureResourceExternal 对象,其中包含两个附加方法::setPixel():getPixel()

直接“开箱即用”,此插件对于 Corona SDK 开发人员来说并不是特别有用,因为它无法访问您现有的图像。但是,它的 源代码 对于 Corona Enterprise 插件开发人员来说可能很有用,它可以用作 macOS、iOS、tvOS、Android 和 Windows 上支持的跨平台 Corona 插件的模板。

示例

我们制作了一个快速演示,使用此新插件的 :setPixel() 方法创建 Spirograph™ 风格的绘图。要进行测试,您需要在 Corona 市场中激活该插件,并将该插件添加到您的 build.settings 中。

memory-bitmap下面是创建纹理并通过设置像素来操作纹理的代码

在此示例中,memoryBitmap.newTexture() 函数返回一个空白的画布供您使用。本质上,您需要告知它对象的大小和颜色深度规则,然后就可以开始随意地操作像素。

结论

我们很高兴看到有进取心的 Corona 开发人员将使用 TextureResourceExternalmemoryBitmap 插件作为基础,来创造出惊人的功能。有什么好主意吗?请在 Corona 论坛 中加入我们吧!

标签
, ,
Rob Miracle
[email protected]

Rob 是 Corona Labs 的开发者关系经理。除了热衷于帮助其他开发者使用 Corona 制作出色的游戏之外,他还喜欢在空闲时间制作游戏。自 1979 年以来,Rob 一直在编写游戏代码,从个人计算机到大型机都有涉猎。他在游戏行业拥有超过 16 年的专业经验。

无评论

抱歉,评论表单目前已关闭。