4

以前はあなたと同じようにAS3で地図をプログラムしていましたが、その後、ピクセルベンダーをひざまずきました。それ以来、私はPixelBenderを使用して配列の並列計算を行っています。Stage3Dはこれに使用できますか?

計算にPixelBenderを使用する例:

http://wonderfl.net/c/eFp0/

私の目標は、のベクトルを取得し、のベクトルを[x1, y1, x2, y,2 , . . ., xn, yn]返すことです[f(x1), f(y1), f(x2), f(y2), . . . ,f(xn), f(yn)]。もっとのようにf(x1, y1).x , f(x1,y1).y。私はあなたが一般的な考えを理解していると確信しています。

私たちが通常マップと呼ぶもの。ここに徹底的な説明があります。

http://en.wikipedia.org/wiki/Map_%28higher-order_function%29

Pixel Benderを使用すると、10倍の速度ブーストでこれを達成できることに気づきました。Stage3Dで同じことをする方法はありますか?

4

1 に答える 1

2

C ++などの他の言語とは異なり、Adobe GraphicsAssemblyLanguageを使用してProgram3DShadersを超えてアセンブリ命令をGPUに送信する方法を認識していません。

プログラムバイトコードは、PixelBender3Dオフラインツールを使用して作成できます。動的に作成することもできます。AGALMiniAssemblerクラスは、AGALアセンブリ言語プログラムをAGALバイトコードにコンパイルするユーティリティクラスです。クラスはランタイムの一部ではありません。シェーダープログラムをアップロードすると、バイトコードは現在のデバイス(OpenGLやDirect3Dなど)のネイティブシェーダー言語にコンパイルされます。ランタイムは、アップロード時にバイトコードを検証します。

プログラムは、Context3D drawTriangles()メソッドが呼び出されるたびに実行されます。頂点プログラムは、描画される三角形のリスト内の頂点ごとに1回実行されます。フラグメントプログラムは、三角形のサーフェス上のピクセルごとに1回実行されます。

Pixel Benderで得られるパフォーマンスに近づかないで、ActionScriptワーカーを活用してファンクターを並列化できることに注意してください。

ワーカーオブジェクトは、Flashランタイムの仮想インスタンスであるワーカーを表します。各ワーカーインスタンスは、単一のワーカーのライフサイクルと共有データへのアクセスを制御および提供します。

複数のコード命令セットを同時に実行するこの機能は、並行性と呼ばれます。

Adobe Premium機能、Alchemy / FlasCC、XC API、Pixel Bender、ActionScriptが登場します。次は、急速に進歩するFlashプラットフォームにとってエキサイティングな時期です。

于 2012-10-26T02:49:31.457 に答える