本章会实现最核心的代码,所以涉及点会比较多,这里会发布一个版本,方便日后的回退查看。

点击下载:https://codeload.github.com/hammerc/hammerc-study-Stage3D/zip/v0.1

先看看Demo:

代码

代码

下面说一下一些比较关键的点:

事件播放处理:

DisplayObject2D类添加了一个内部方法dispatchEventOnChildren,核心实现在DisplayObjectContainer2D类中,该方法主要作用是使当前容器及递归容器中的所有显示对象都发送同一个事件。比如EnterFrameEvent的进入帧事件就是顶级stage调用了dispatchEventOnChildren方法,时所有子对象都可以抛出进入帧事件。

着色器创建:

着色器在框架启动时就会进行创建,创建代码放在Quad2D和Image2D的registerPrograms方法中(Starling高版本位置已经调整),根据参数的不同,会一口气创建多个着色器并进行缓存,使用时直接获取。

rotation:

和原生的属性不同,Starling使用的弧度。

KeyboardEvent:

Starling中只是简单的把该事件进行了一下转换,由starling.display.Stage抛出(子项不会抛出),所以我们山寨的版本里取消了这个事件。

viewPort:

viewPort属性比较简单,其x和y会被赋值到stage3D对象的x和y属性上,width和height属性用来设置后台缓冲区的尺寸,可以达到调整stage3D的位置和尺寸目的。

Quad2D与Image2D渲染

框架内部已经做过处理,所以render方法执行渲染时只需要进行之前笔记实现的渲染步骤即可,需要注意的是顶点、缓冲数据和纹理数据在创建或修改时就会实时的上传到显存,所以我们只要指定使用哪个数据即可,即数据的上传和销毁不在render方法中执行。

Texture2D简介:

Texture2D是纹理的抽象基类,但是提供了多个方便的静态创建方法用来创建纹理对象。ConcreteTexture2D是最简单的纹理类,SubTexture2D是可以基于其它纹理描述其中一个区域的子纹理类,RenderTexture2D类是可以把一个显示对象(straling.display包中的3D显示对象哦,2D的绘制当然用BitmapData就可以了)绘制为纹理来显示的动态纹理类。

需要注意的是纹理一旦创建就会提交到GPU,然后本地的BitmapData或ByteArray会被销毁,这会存在一个问题,如果显存数据丢失(比如最小化时)后,这些纹理就不能从内存中重新找回来了,关于这个问题得解决我们后期会谈到。

更具体的东西我们下一个笔记中会谈到。

尺寸计算:

尺寸计算是一个重点,我们会在下个笔记中详细的来完善和解说。

【Stage3D学习笔记续】山寨Starling(四):渲染代码实现及测试程序的更多相关文章

  1. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  2. 【Stage3D学习笔记续】山寨Starling(三):Starling核心渲染流程

    这篇文章我们剔除Starling的Touch事件体系和动画体系,专门来看看Starling中的渲染流程实现,以及其搭建的显示列表结构. 由于Starling是模仿Flash的原生显示列表,所以我们可以 ...

  3. 【Stage3D学习笔记续】山寨Starling(十二):总结和一些没提到的东西

    我们的山寨Starling到这里就告一段落了,不得不说这是一个非常优秀的2D框架,他的设计和架构为后来的许多框架都提供了很好的参考,比如现在正在崛起的Egret,我们的一番解读也只是窥见了Starli ...

  4. 【Stage3D学习笔记续】山寨Starling(十一):Touch事件体系

    我们的山寨Starling版本将会在这里停止更新了,主要还是由于时间比较有限,而且我们的山寨版本也很好的完成了他的任务“了解Starling的核心渲染”,接下来的Starling解析我们将会直接阅读S ...

  5. 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽

    还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...

  6. 【Stage3D学习笔记续】真正的3D世界(一):透视矩阵

    如果各位看官跟着我的学习笔记一路看过来的话,一定会吐槽我的,这都是什么3D啊?从头到尾整个都是在使用GPU绘制一堆2D图像而已,的确,之前我们一直使用正交矩阵利用GPU加速来实现2D世界的展示,算不上 ...

  7. 【Stage3D学习笔记续】山寨Starling(十):高效游戏设计、纹理集和ATF

    我发布了经过批处理优化的v0.3版,点击下载:https://github.com/hammerc/hammerc-study-Stage3D/archive/v0.3.zip 先看看我们批处理优化后 ...

  8. 【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法

    Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中, ...

  9. 【Stage3D学习笔记续】山寨Starling(七):一般优化方法简介及混合模式

    关于事件的优化: 遍历注册的事件由foreach改变为fori,在大量数据遍历时会有提升: 事件池优化: 所有的事件都使用一个对象池进行保存,而不是使用到时进行创建,使用EventDispatcher ...

随机推荐

  1. 算法Sedgewick第四版-第1章基础-001递归

    一. 方法可以调用自己(如果你对递归概念感到奇怪,请完成练习 1.1.16 到练习 1.1.22).例如,下面给出了 BinarySearch 的 rank() 方法的另一种实现.我们会经常使用递归, ...

  2. Android:实现退出确认对话框

    在Android平台上捕获Back键的事件,super.onBackPressed()是执行系统的默认动作,就是退出当前activity,我们要做的就是重写onBackPressed()函数, pub ...

  3. 无效的 URI: 未能分析证书颁发机构/主机

    出 现该错误的原因是URL中少了一个斜杠,正常的URL是“http:”后边有两个斜杠,而我在修改配置文件中的URL的IP地址部分时,不小心删掉了一个 斜杠,例如:http:/blog.csdn.net ...

  4. PHP操作FTP类 (上传下载移动创建等)

    使用PHP操作FTP-用法 Php代码 收藏代码 <? // 联接FTP服务器 $conn = ftp_connect(ftp.server.com); // 使用username和passwo ...

  5. unity3d游戏开发 —— 倒计时

    using UnityEngine;using System.Collections; public class CoolTime : MonoBehaviour { // Use this for ...

  6. C#中判断一个网址是否可以打开

    public static void GetPage(String url) { try { // Creates an HttpWebRequest for the specified URL. H ...

  7. C# List 使用方法 支持FrameWork2.0 环境

    List查找指定数据 var tmpBillInputCheckList = BillInputCheckList.FindAll(m => m.BillDetailGuid == tmpBil ...

  8. boostrap兼容ie及其案例

    多梦网络 wordpress主题 http://www.dmeng.net/

  9. 使用powerdesigner 画图的详细说明

    一.概念数据模型概述 数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求: 1)能够比较真实地模拟现实世界 2)容易为人所理解 3)便于计算机实现 概念数据模型也称信息模型,它以实体- ...

  10. Ejabberd源码解析前奏--调试

    一.日志文件 一个ejabberd节点写两个日志文件:    ejabberd.log ejabberd 服务日志, 由 ejabberd 节点汇报的消息erlang.log Erlang/OTP 系 ...