0

Stage3D 是否支持这些类?或者是否存在等效或类似的类?

flash.display.BitmapData;
flash.display.GraphicsSolidFill;
flash.display.GraphicsStroke;
flash.display.GraphicsPath;
flash.display.IGraphicsData;
flash.display.Shape;
flash.filters.BlurFilter;
flash.geom.ColorTransform;
4

1 回答 1

10

Stage3D 是一个完全不同的、相当低级的野兽。你列出的那些类都与传统的 Flash DisplayList 有关,它是一个 CPU 驱动的渲染引擎,所以不,它们本身不存在。但除此之外还有很多:

如果您使用的是原始 Stage3D API(此处的示例教程),那么它感觉非常像 OpenGL 编程。您正在将顶点缓冲区、索引缓冲区和纹理加载到 GPU 中,并使用称为 AGAL 的汇编语言定义顶点和片段着色器程序。所有这些都为您提供了一个可能非常快的跨平台硬件加速应用程序,但它与传统的 Flash DisplayList 有很大不同。你能得到渐变、过滤器和矢量形状吗?当然,但可能使用自定义着色器等,而不是使用这些类。

在某些应用程序中,将传统的 DisplayList 用于 Stage3D 硬件加速背景之上的交互式 UI 控件是有意义的。DisplayList 位于 Stage3D 平面的顶部,因此这是完全可能的。

但是,如果您对这种低级 3D 编程不感兴趣,您可以选择在框架之上进行构建。有许多 Stage3D 框架——一些用于创建 3D 应用程序,另一些用于 2D(但使用底层 3D 加速来提高速度)。Adobe 在此处列出了这些框架。

例如,Starling是一个 Stage3D 框架,旨在模仿传统的 Flash DisplayList,因此它可以让您接近您上面提到的一些类 - 查看他们的演示API 文档以了解详细信息。

Flash 启用的另一种技术是 blitting,它可以动态生成用于 3D 加速的位图。您可以将您喜欢的任何 Flash 显示对象(形状、绘制的渐变、带有过滤器等)绘制到位图(又名 blit)中,然后将这些位图推送到 3D 加速框架中。您可以单独对单个对象进行 blit,或使用此技术将整个舞台 blit 成一个全屏纹理。但是您必须小心将新纹理上传到 GPU 的频率和数量,因为这会显着影响性能。事实上,GPU 编程中一个重要的性能考虑因素是将多个位图批处理成单个纹理的能力。

因此,在考虑从传统的 DisplayList 过渡到 Stage3D 时,需要考虑许多方面。希望这可以帮助。:)

于 2012-04-27T19:08:30.083 回答