zoukankan      html  css  js  c++  java
  • 【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形

    前面几个星期抽空用Starling做了一个打飞机的小游戏(所以没有接着看书了),准备面试时用的,结果面试还是没过%>_<%...这个游戏打算过几天全部开源了

    那么接下来打算这周把《Stage3D初学者指南》全部看完,昨晚照着书上已经把一个可以用来展示的空间大战搞定了,效果如下:

    在我们的例子中,可以通过键盘控制飞船飞行,通过鼠标调整摄像机的角度,下面我们主要说一下核心的代码(源码中带有注释,可直接点开查看):

    Entity

    实体类是核心的渲染基类,我们可以通过继承该类来扩展我们的渲染实体,当然我们也可以使用实体类来作为某些不需要渲染的类的基类或实现类,比如摄像机;

    我们的实体类包含了3个主要的功能:

    1. 记录当前实体的位置、缩放和旋转等属性,同时内置当前实体的转换矩阵,同时提供较多的实用函数来方便操作转换矩阵(如向上移动等方法),我们如果存在不需要渲染的实体如摄像机时使用这个功能即可;
    2. 解析Obj模型文件为可以上传到GPU的数据,这是通过引入类ObjParser来实现的;
    3. 对当前的模型进行渲染,通过设置Context3D、Texture对象和渲染模式,在render方法中进行渲染,同时对渲染进行了类似Starling的批处理优化,如果状态没有改变就不会进行重新提交数据和设置渲染模式等操作,直接进行绘制,这个优化在Away3D中也有,是通用的3D优化方式;

    显示列表的替换方法:

    由于没有设计类似显示列表一样的树形结构,所以当需要进行组合时使用了另外一种方法。

    比如:我们的飞船尾部存在一个小火焰,Away3D的思路应该是创建一个ObjectContainer3D对象,将飞船和火焰添加到该容器中,飞行时操作这个容器,这样飞船和小火焰就都会移动;

    那我们没有显示列表该怎么办呢?作者使用了一个属性following来实现,具体的逻辑是设置了following的话渲染时会把following指向的实体对象的转换矩阵添加到当前对象中,这样就可以让小火焰跟着飞船了。

    GameInput

    用户输入控制类,这个就不多说了。

    GameTimer

    间隔一定时间的心跳回调类,这个也不多说了,直接看代码吧。

    SpaceWarTest

    文档类,包括嵌入资源,UI穿件,实体对象创建等方法,核心看看gameStep和renderScene这两个方法,需要注意的是我们的摄像机也是用的实体对象,同时天空对象也跟随了我们的飞船,所以是不会飞出天空这个包围盒的。

  • 相关阅读:
    HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树
    字典树 HDU 1075 What Are You Talking About
    字典树 HDU 1251 统计难题
    最小生成树prim算法 POJ2031
    POJ 1287 Networking 最小生成树
    次小生成树 POJ 2728
    最短路N题Tram SPFA
    poj2236 并查集
    POJ 1611并查集
    Number Sequence
  • 原文地址:https://www.cnblogs.com/hammerc/p/4178226.html
Copyright © 2011-2022 走看看