博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形
阅读量:6638 次
发布时间:2019-06-25

本文共 986 字,大约阅读时间需要 3 分钟。

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

 

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

 

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

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

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

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

显示列表的替换方法:

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

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

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

 

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

 

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

 

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

转载地址:http://lmivo.baihongyu.com/

你可能感兴趣的文章
教你搭建SpringSecurity3框架(附源码)
查看>>
golang sync.Pool包的使用和一些注意地方
查看>>
linux与python
查看>>
(二十)内部类详解(转)
查看>>
(十)会话跟踪技术之Session
查看>>
(七)Activiti之历史活动查询和历史任务查询和流程状态查询
查看>>
Elixir 简介
查看>>
操作MySQL数据库
查看>>
Tomcat性能参数设置
查看>>
HTTPS和HTTP的区别
查看>>
AlwaysOn 部分笔记及文档连接
查看>>
EasyUI刚加载时候Window窗体自动弹出的解决办法
查看>>
CH Round #53 -密室
查看>>
11. Container With Most Water
查看>>
题解 P1074 【靶形数独 】
查看>>
特征描述(ORB)
查看>>
PHP实现文件下载
查看>>
备份Sql Server中的某些表
查看>>
Windows桌面开发者的必备软件
查看>>
Android -- 是时候来了解一波EventBus了
查看>>