Actionscript 3 AS3阶段3D:如何使用整体alpha渲染所有三角形?

Actionscript 3 AS3阶段3D:如何使用整体alpha渲染所有三角形?,actionscript-3,alpha,alpha-transparency,stage3d,Actionscript 3,Alpha,Alpha Transparency,Stage3d,我正在处理一个2D AS3项目,其中不同的层通过Stage3D以单个drawTriangles()调用作为单个网格进行渲染。 (如果您熟悉BunnyMark GPUSprite mini渲染引擎,这将给您一个想法:) 我想画的是这些完整的“渲染层”中的一个,具有整体alpha透明度值,该值将应用于绘制的所有三角形,并添加到它们自己的alpha值中 IE我不想通过使用具有alpha透明度的纹理或通过单独设置每个三角形来更改alpha:我想要一个主开关,它会影响绘制的所有对象的alpha值?(计算上

我正在处理一个2D AS3项目,其中不同的层通过Stage3D以单个drawTriangles()调用作为单个网格进行渲染。 (如果您熟悉BunnyMark GPUSprite mini渲染引擎,这将给您一个想法:)

我想画的是这些完整的“渲染层”中的一个,具有整体alpha透明度值,该值将应用于绘制的所有三角形,并添加到它们自己的alpha值中

IE我不想通过使用具有alpha透明度的纹理或通过单独设置每个三角形来更改alpha:我想要一个主开关,它会影响绘制的所有对象的alpha值?(计算上便宜的东西)


这可能吗?也许通过着色器或setProgramConstantsFromVector命令?

好吧,你可以将你的层渲染成纹理,然后你可以将这个纹理和你想要的alpha放在舞台上,这样你的整个层都会有相同的alpha

您可以通过两种方式完成此操作,第一种方式是将其渲染为纹理,并使用Stage3D显示该纹理,然后创建一个调整alpha的着色器

第二种方法是将其渲染为位图数据,并在普通阶段显示。我将举一个这样的例子:

var bmd:BitmapData = new BitmapData(renderWidth, renderHeight, true, 0);
var bit:Bitmap = new Bitmap(bmd);
bit.alpha = 0.5;
addChild(bit);

//In your render loop at the beginning
context3D.renderToBitmapData(bmd);

感谢您的想法,但是,由于该层只是“渲染层”三明治中的“层”之一,可能我弄错了,但这种方法会打乱视觉顺序?不,因为在渲染时不会更改位图本身的位置和子索引,所以只会更改视觉结构下的位图数据。使用这种方法,您可以拥有任意数量的层,并根据需要渲染它们。除非对位图对象执行某些操作,否则它们不会改变位置,正如您所看到的,这里的情况并非如此,因为渲染例程只能访问BitmapData。