Actionscript 3 AGAL帮助:在2D纹理、2D渲染中,如何使用AGAL计算顶点相对于程序常量的x、y偏移量
我希望有人能解释一下我的问题: 我有一个64x64固定大小的纹理。uv和顶点也是固定的 现在我需要在2D舞台上移动它 当前我使用的方法是每次从该纹理绘制三角形时计算并上传一个新顶点 我发现VertexBuffer3D.uploadFromByteArray需要花费大量时间来处理 我相信在阿加尔一定有更聪明的方法来做到这一点 我可以在顶点着色的常量寄存器中传递x,y偏移,并在agal中计算顶点大小吗Actionscript 3 AGAL帮助:在2D纹理、2D渲染中,如何使用AGAL计算顶点相对于程序常量的x、y偏移量,actionscript-3,stage3d,agal,Actionscript 3,Stage3d,Agal,我希望有人能解释一下我的问题: 我有一个64x64固定大小的纹理。uv和顶点也是固定的 现在我需要在2D舞台上移动它 当前我使用的方法是每次从该纹理绘制三角形时计算并上传一个新顶点 我发现VertexBuffer3D.uploadFromByteArray需要花费大量时间来处理 我相信在阿加尔一定有更聪明的方法来做到这一点 我可以在顶点着色的常量寄存器中传递x,y偏移,并在agal中计算顶点大小吗 如果这是可能的,我该怎么做?将几何体上载一次,然后在顶点着色器中将每个顶点与模型视图透视矩阵相乘。
如果这是可能的,我该怎么做?将几何体上载一次,然后在顶点着色器中将每个顶点与模型视图透视矩阵相乘。该矩阵可以传递到常量寄存器中的顶点着色器(请注意,一个4x4矩阵需要4个常量寄存器)。如果MVP矩阵不足,您需要操纵各个顶点位置,则可以使用常量寄存器索引。但请注意,可以以这种方式处理的顶点数量是有限的,因为顶点着色器可用的常量寄存器数量是有限的(包括MVP矩阵在内的最多128个常量)
n0
,并且id存储在va1
寄存器的x
组件中。此外,由于AGAL没有与PixelBender的loadFloat
opcode等效的操作码,因此最好为每个顶点设置一些初始位置。将其存储在va0
中n0…(n0+m-1)
,其中m
是顶点数。可以使用Float2
数据类型将单个顶点的x和y位移存储在常量中。使用Float4
数据类型,可以为每个顶点存储两个额外的数字(可以是颜色/纹理偏移或smth其他)。也可以使用稍微复杂的着色器将两个后续顶点的x-y偏移存储在单个常量中mov vt1 vc[va1.x] // obtain the offset from constants using vertex id
add vt1 vt1 va0 // add the offset to the initial position of the vertex
m44 op vt1 vc0 // multiply with MVP (assuming that it is stored in vc0...vc3)
此方法适用于几种特定情况,但不适用于一般情况。请关闭此选项。有一个答案,这是一个有效的回答。@jordancpaul然而,我添加了另一种方法的示例,在某些情况下可能也很有用。