actionscript-3 - 在低级 AGAL 中编码时,是否需要为每个纹理创建一个新的 Program3D?

标签 actionscript-3 textures fragment-shader vertex-shader stage3d

例如...

如果我正在开发一个需要多个纹理的应用程序(基本上是唯一的 Sprite ),我是否需要调用 context3D.createProgram(); 并组装一个新的 Program3D(带有 VertexShaderAssemblerFragmentShaderAssembler)用于我希望在应用程序中使用的每个单独纹理?

Program3D 通常如何在引擎中工作?是一个程序运行整个事情,还是每个纹理模型使用一个程序 map

我是否正确地假设您只需要在初始化时间 (Event.ADDED_TO_STAGE) 期间创建 Program3D 一次,而不是在每个帧期间 (事件.ENTER_FRAME),对吗?

最佳答案

对于一个程序(着色器),您可以拥有多个纹理。通常,您为拥有的每个着色器编写一个程序。 例如,在我的游戏中,我有一个用于地形照明、纹理和着色的着色器(程序)。我有另一个用于水的着色器(程序)。

所以程序只制作一次,但我在绘制场景之前告诉 context3d 使用哪个程序。这样它将绘制我要使用当前程序绘制的任何内容。

使用示例:

context3d.setProgram(WaterShader);
water.drawTriangles();

context3d.setProgram(TerrainShader)
terrain.drawTriangles();

我首先绘制水,然后绘制地形,每个都使用不同的着色器。 我的 TerrainShader 有多个纹理,例如沙子、岩石和泥土纹理。着色器决定在给定时间使用哪个纹理。例如。如果顶点高度< 10,则使用沙子纹理。

因此,创建一次程序并在需要时使用它们。

我希望这能以正确的方式帮助您。

关于actionscript-3 - 在低级 AGAL 中编码时,是否需要为每个纹理创建一个新的 Program3D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829869/

相关文章:

flutter - 如何在 CameraX 中绑定(bind)预览和纹理

flash - 还有其他替代方法可以访问相机吗?

actionscript-3 - MovieClip 调整大小,但其子项的高度和宽度没有改变?

actionscript-3 - 私有(private)函数被继承

java - LWJGL 使用纹理时颜色困惑 + 经常禁用纹理时 FPS 较低

svg - 将纹理应用于 SVG 中的图像

ios - 使用 OpenGL ES 丢弃像素着色器计算的最有效方法

android - fragment 着色器的标准衍生品(dFdx、dFdy)在 Android 4.4 中无法正常运行

javascript - `precision mediump float` 是什么意思?

actionscript-3 - Adobe Air AS3,配置窗口,profiler 建议库代码