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

点击下载: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. font-size:100%和font-size:0

    h1,h2,h3,h4,h5,h6 {font-size:100%;} 正常情况下hx按照一定百分比增加字号,但是指定font-size:100%;就会继承body设置的字体大小 font-size: ...

  2. POJ2253——Frogger(Floyd变形)

    Frogger DescriptionFreddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fi ...

  3. 转:JavaScript中函数与对象的关系

    来自:http://www.nowamagic.net/javascript/js_RelationOfFunctionAndObject.php 在ajax兴起以前,很多人写JavaScript可以 ...

  4. 锋利的JQuery-Jquery中DOM操作

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. VC 设置 Stack Overflow

    C/C++ stack overflow, 怎样设置stack大小?解决方案 (1) vc6.0: project->setting->link->project options-& ...

  6. Java之获取系统属性

    import java.util.Enumeration; import java.util.Properties; public class Example609 { public static v ...

  7. Android开发之一些资源索引

    1.android标题栏(titlebar)显示进度条 protected void onCreate(Bundle savedInstanceState) { super.onCreate(save ...

  8. poj 3393 Lucky and Good Months by Gregorian Calendar(模拟)

    题目:http://poj.org/problem?id=3393一道题目挺长的模拟题,参考了网上大神的题解. #include <iostream> #include <cstdi ...

  9. ListView中使用type需要注意的东西 java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 addScrapView

    ListView中使用type需要注意的东西 在使用ListView时,如果使用了getItemViewType, 记得他的值一定要是从0开始计数的. 且要覆盖getViewTypeCount方法.并 ...

  10. 对 Azure 虚拟网络网关的改进

    YU-SHUN WANG Azure 网络高级项目经理 在 2014 年欧洲 TechEd 大会上,我们宣布了对Azure 虚拟网络网关的多项改进: 1.  高性能网关 SKU 2.  Azure 虚 ...