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

点击下载: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. Android安全问题 抢先拦截短信

    同上篇文章一样,这里只陈述结果,代码分析稍后给出 导读:本文叙述如何先于某些伪杀毒软件.病毒.常规软件获取到短信 众所周知,android系统在收到短信息的时候会发送广播,但是此广播是有序广播,也就是 ...

  2. mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法

    原因:没有使用管理员权限 解决方法:使用管理员权限打开cmd,然后运行mysqld -install,服务安装成功

  3. css揭秘之按钮的实现技巧

    <html> <title>css</title> <style> button{ padding: .3em .8em; border: 1px so ...

  4. JXL获取excel批注

    /** * Jxl.jar(2.6.12) * @author lmiky * @date 2011-11-26 */ public class JxlTest { /** * 测试获取批注 * @a ...

  5. Skyline学习教程

    转自:http://yunjinzh.blog.sohu.com/165279318.html 当初开设这个blog的初衷就是将PPT与专业技术进行结合 将专业技术的介绍更加艺术化 但是之前一直都没有 ...

  6. selenium Grid

    Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...

  7. 在 MacOS 上编译链接 OpenGL 程序

    几个星期以前开始折腾在我的MBA上写 OpenGL 小程序.我不太熟悉MacOS上的开发工具比如XCode,所以一开始的想法就是用vim来写程序,然后手工编译链接.网上查了一下,MacOS上的Open ...

  8. 【原】理解Storm拓扑的并行

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  9. jquery 日期控件

    控件官网: http://www.interidea.org/demo/icalendar.php#demohtml绑定控件 $("#startdate").icalendar({ ...

  10. Her and his blog

    Tonight, I read localhost8080 and some of her husband m67's blog. I found they are so geek and reall ...