利用Flash硬件加速

时间:2014-05-25 16:08:38

标签: actionscript-3 flash gpu hardware-acceleration stage3d

我的目标是通过生成大量3D立方体,旋转它们并阅读FPS来测试Flash 3D环境性能。

我知道我可以在3D空间中旋转2D对象。例如,我可以构建一个包含6个影片剪辑的立方体,旋转它们并相应地将它们组合在一起。然后我可以在随机的x,y,z位置(视口前面的预定义区域)生成大量这些立方体,旋转它们并读取fps。

但后来我读到了这个硬件加速,当它被激活/使用时我不清楚。必须满足某些条件。我知道用户必须允许它(右击 - >设置 - >启用硬件加速),或者如果它是通过对象标签嵌入的,则必须设置wmode = direct。

那是来自观众的一面,但来自开发者的是什么?

如果我在舞台上绘制一个简单的红色矩形,并且用户已启用硬件加速,那是否意味着图形信息将在GPU上呈现?

我正在阅读各种来源和“Adobe Flash 11 Stage3D游戏编程”一书,从我收集到的,为了在GPU上呈现图形信息,我必须在AS3中明确调用Stage3D类,然后我可以画出我的那里有2d / 3d对象。

这是什么 - 如果我希望我的应用程序以硬件加速模式运行(并且从查看者端启用),无论我的Flash文件中的内容是什么,它都会自动发生吗?或者我必须在那里添加Stage3D类。

谢谢。

将等待答案。

3 个答案:

答案 0 :(得分:1)

首先:不要在Flash中混淆2个不同的概念:

  • 一般硬件加速

这主要是为了在Flash Player 10中播放视频而引入的。我不确定它是否用于图形。它与直接在GPU上渲染3D图形无关。

  • GPU支持

使用Flash Player 11,Adobe引入了Stage3D。这是Flash可以使用GPU渲染图形的界面(如果可用)。在Windows上,它在Mac OpenGl上使用Direct3D。经典的Flash DisplayList Graphics API不支持此功能。你必须通过Stage3D Api,正如你提到的那本书所解释的那样。要在浏览器中使用GPU支持,嵌入标记需要将属性wmode设置为“direct”。直接使用Stage3D Api并不容易,你必须学习3D编程,着色器编程等的概念。有一些库可以帮助使用Stage3D。对于3D,有Away3D。如果你只需要支持gpu的2D图形,那么Starling现在是一个非常受欢迎的框架。

答案 1 :(得分:0)

这是一个将动画片段转换为位图的功能。我使用普通闪光来创建将在屏幕上显示的内容,然后将动画片段转换为位图并删除动画片段:

private function fConvertClip(pClip: MovieClip, pWidth: int, pHeight: int): Bitmap {
var bd: BitmapData = new BitmapData(pWidth, pHeight, true, 0x00000000);
bd.draw(pClip, null, null, null, null, true);       
aBitmaps.push(bd);
var bmp: Bitmap = new Bitmap(bd, "auto", false);
bmp.smoothing = true;
return bmp;

}

答案 2 :(得分:-1)

不要打开硬件加速设置。通常,您可以使用代码控制gpu上的内容。 Bitmapdata位于gpu上,因此您可以将屏幕上的所有内容转换为位图。

gotoandlearn.com上有很棒的教程视频。

您可以在普通闪光中创建任何内容 - 形状,渐变,阴影,动态文本,编程着色等 - 并在游戏运行时通过编程将其全部转换为位图。您不需要导入图像/ spritesheets /动画。让艺术家在向量中为您提供一切。因此,当用户想要更改汽车的颜色时,您只需转换代码,而不是以红色加载/导入汽车的位图。