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

点击下载: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. 174. Dungeon Game

    题目: The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dung ...

  2. SRM588

    250: 有n首歌每首歌有duration和tone,连续唱m首歌会消耗每首歌的duration以及相邻两首歌的tone的差的绝对值的和,给个T,问说在T时间内最对能唱多少歌. 将歌按tone排序后发 ...

  3. laravel Authentication and Security

    Creating the user modelFirst of all, we need to define the model that is going to be used to represe ...

  4. xml--通过jdom解析及生产XML

    JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序.它的设计包含 Java 语言的语法乃至语义. JAXP (用于 XML 语法分析的 Java API)包含了三个软 ...

  5. 使用Mysql命令一次性备份多个数据库(所有数据库)

    通过CMD命令窗口 1.找到Mysql的安装目录\mysql\BIN目录 2. 输入mysqldump --all-databases -h127.0.0.1 -uroot -p123456 > ...

  6. VS2005下开发PPC2003和WM50编译器一些设置

    1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...

  7. CentOS5.5上安装git

    1.尝试用yum安装git失败 [root@localhost usr]# yum install gitLoaded plugins: fastestmirrorLoading mirror spe ...

  8. Android开发之在子线程中使用Toast

    在子线程中使用Toast的时候,出现Force close. 错误提示:Can't create handler inside thread that has not called Looper.pr ...

  9. 8款必备的免费移动Web开发框架(HTML5/JS)

    标签:JavaScript HTML5 移动开发 Web开发 jQuery 应用程序框架 插件 概述:随着智能手机和平板电脑的普及,移动开发逐渐成为众多开发者追逐的潮流.拥有一款优秀的移动Web开发框 ...

  10. urllib

    urllib Python 标准库 urllib2 的使用细节 python 2.x 3.x from urllib import request with request.urlopen('http ...