zoukankan      html  css  js  c++  java
  • 新人补钙系列教程之:Molehill底层API中最重要的Context3D

    Context3D,是一个三维空间的处理环境,负责创建并处理三维对象的各个要素如顶点、片段、透视等等,并将处理的结果使用AGAL(Adobe图形汇编语言)上传给显卡进行运算,运算结果最终被回传给CPU添加到Flash Player的显示层,并呈现在舞台上。

    Context3D不能被构造函数实例化,而是可以通过stage中的一个新的成员Stage3D来访问(但这不说明只许可有唯一个Context3D

    1. stage3D.requestContext3D();
    复制代码

    <IGNORE_JS_OP style="WORD-WRAP: break-word; WHITE-SPACE: normal; TEXT-TRANSFORM: none; WORD-SPACING: 0px; COLOR: rgb(51,51,51); FONT: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; ORPHANS: 2; WIDOWS: 2; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke- 0px">11.jpg 

    使用 GPU 加速渲染资源,在渲染的过程中,首先需要把数据提前加载到显存。在 Alternativa 3D,这些数据资源就代表那些资源类对象。这些资源类对象可以分为两种:几何数据和纹理数据。所有 Stage3D 实例都有他们自己的 Context3D 实例—–管理显存块并且可以从 Context3D 里获取资源进行渲染。


    下面简单通过一段注了释的代码解一下其中的过程

    1. /**
    2.                          * 
    3.                          * 要使用GPU,需要提前加载资源到显存。为了做这一步,我们需要获取 Context3D
    4.                          * 当我们获取到Context3D后,我们就可以开始加载资源进显存并且渲染他们了。                         * 
    5.                          * 
    6.                          * 
    7.                          * Resource:GPU 数据基类。 
    8.                          * 
    9.                          * rootContainer.getResources:对象中可以上传到 GPU 的资源的集合
    10.                          * (true)可以获取子项的资源
    11.                          * 
    12.                          * 
    13.                          */
    14.                         
    15.                         stage3D = stage.stage3Ds[0];
    16.                         stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
    17.                         // 由stage3D请求一个Context3D对象()
    18.                         stage3D.requestContext3D();
    19.                 }
    20.                 
    21.                 private function onContextCreate(e:Event):void {
    22.                         
    23.                         for each (var resource:Resource in rootContainer.getResources(true)) {
    24.                                 
    25.                                 resource.upload(stage3D.context3D);                        
    26.                                     }
    27.                         }
    复制代码

    OK!再贴上葵花宝典(帮助文档)对Context3D的权威解释:




    渲染上下文包括一个绘图表面及其关联的资源和状态。在可能的情况下,渲染上下文使用硬件图形处理单元 (GPU)。否则,渲染上下文使用软件。(如果在某个平台上不支持通过 Context3D 呈现,则 Stage 对象的 stage3Ds 属性包含一个空列表。)尽管专为 3D 图形设计,但是呈现管道并不强制呈现必须是三维的。因此,您可以通过提供适当的顶点和像素片段程序来创建 2D 渲染器。在 3D 和 2D 这两种情况下,支持的几何基元只有三角形。

    通过调用 Stage3D 对象的 requestContext3D() 方法可以获取 Context3D 类的实例。每个页面只能存在有限数量的 Context3D 对象;Stage.stage3Ds 列表中的每个 Stage3D 只能有一个。当创建上下文时,Stage3D 对象会调度一个 context3DCreate 事件。渲染上下文可能会随时被损坏并重新创建,例如,当使用 GPU 的另一个应用程序获得焦点时。您的代码将会接收到多个 context3DCreate 事件。使用相关联 Stage3D 实例的 x 和 y 属性指定舞台上渲染区域的位置。


    下列限制适用于呈现:

    资源限制: 

    资源               允许的数量          总内存 
    Vertex buffers        4096                    256 MB 
    Index buffers         4096                    128 MB 
    Programs               4096                    16 MB 
    Textures                4096                    128 MB
    Cube textures       4096                    256 MB 

    AGAL 限制:每个程序 200 个 opcode。

    绘制调用限制:每个 present() 调用 32,768 个 drawTriangles() 调用。

    350 MB 是纹理的绝对限制,包括 mipmap 所需的纹理内存。但是,许多设备不支持这么多的纹理内存。为了最大限度地保证兼容性,请将使用的纹理内存限制为 128 MB 或更少。

    您无法使用 Context3D 构造函数创建 Context3D 对象。它是作为 Stage3D 实例的属性构建并提供的

  • 相关阅读:
    Redis实战之Redis + Jedis[转]
    FastDFS、nginx配置手记
    服务器后端开发系列——《实战FastDFS分布式文件系统》[转]
    FastDFS分布文件系统[转]
    在XMPP的JAVA开源实现Openfire中,增加LBS 附近的人功能
    FASTDFS 5X安装
    助力互联网创业融资
    lucene索引并搜索mysql数据库[转]
    ZooKeeper监控
    光驱在资源管理器显示黄色感叹号的解决方法BIOS内有 系统下没有
  • 原文地址:https://www.cnblogs.com/keng333/p/3170217.html
Copyright © 2011-2022 走看看