当前位置: 首页 > news >正文

Simple2D-20(重构)

  为什么重构 Simple2D


 

  开始的时候打算使用几周的时间来实现 Simple2D 的,主要是实现一些简单的 2D 渲染功能。但是编写的过程中不满于它只能实现简单的功能,后来添加了诸如Alpha测试、深度测试、裁剪测试、模板测试、混合等功能,为了实现这些实现了一个 Pass 类。

  除了这些,我还希望能够在 Simple2D 中使用 Shader,于是又实现了 Shader 类。对于顶点数据,使用时分配内存,结束后释放内存,为了减小开销而使用了内存分配器 BlockAllocator。

  最终的渲染操作在 Renderer 中完成,所采用的方法是:把所有渲染数据都添加到 Renderer 中,在帧结束后渲染所有数据。这要求在渲染前对渲染数据进行排序(Pass 排序),然后根据 Pass 设置 OpenGL 的渲染状态,最后 Draw 顶点数据。

  做完这些后,觉得可以使用 Simple2D 来开发一个小游戏了,开发小游戏的同时又可以改进 Simple2D。但是要做游戏还需要声频播放和 GUI,ImGui 库和 Bass 库是不错的选择,你可以很轻松的嵌入到 Simple2D 中,然后搞出来了一个 MusicPlayer。

  使用 Simple2D 开发游戏,不得不要面对一个问题:批量的纹理渲染,主要就是合并相同纹理的顶点数据。我原先打算通过 Pass 来进行合并的(一个 Pass 对应一张纹理,Renderer 会将同一个 Pass 对应的顶点数据合并在一起渲染)。但是这样实现起来比较困难,所以考虑再重写一遍 Simple2D 的渲染部分代码。抛弃以前 Simple2D 复杂的功能,实现一个更为简洁的 Simple2D,能够高效地渲染批量纹理反走样的几何图形

  接下来的文章分为三个部分:

  1、Simple2D 重构(纹理池、反走样 Painter、Shader)

  2、简易的游戏开发框架(精灵树、精灵动画、精灵控件)

  3、2048 游戏开发

 


 

  由于 Simple2D 只提供了渲染功能,如果要开发游戏还需要精灵渲染树:

 

  通过精灵树可以实现复杂的渲染,除此之外还需要炫酷的动画效果,Tween 动画是必须的:

 

 

  最后的部分就是基于 Simple2D 的开发的游戏——2048

  如果对 Simple2D 的实现感兴趣的话,可以关注接下来的文章。下面给出 Simple2D 项目的源码。

  源码下载:Simple2D-20.rar

转载于:https://www.cnblogs.com/ForEmail5/p/7458420.html

相关文章:

  • 中国好同事!帮程序猿跟姑娘表白,他们组了一支乐队
  • 洛谷—— P2812 校园网络
  • 客观看待社保系统管理漏洞
  • ssh 免密码登录
  • 积极推动中国金融资产市场化流动
  • 互联网时代 数据中心如何满足未来需求
  • 吴晓军:加强保险业大数据能力的建设
  • 向亲戚朋友解释系列之什么是IP,端口和域名
  • IDF2013:大数据带来医疗行业转折点
  • python实例pyspark以及python中文显示
  • Linux下sh文件运行及桌面环境双击运行sh文件
  • 3.jeesite主从表开发
  • java特训第四课(转)
  • 纯 Java 开发 WebService 调用测试工具(wsCaller.jar)
  • 浅谈微博与贴吧!
  • 《剑指offer》分解让复杂问题更简单
  • canvas 五子棋游戏
  • Effective Java 笔记(一)
  • java8-模拟hadoop
  • Java反射-动态类加载和重新加载
  • Laravel 菜鸟晋级之路
  • oldjun 检测网站的经验
  • PAT A1050
  • Protobuf3语言指南
  • React-flux杂记
  • session共享问题解决方案
  • Vue2 SSR 的优化之旅
  • 初识 beanstalkd
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端_面试
  • 前端代码风格自动化系列(二)之Commitlint
  • 详解NodeJs流之一
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 项目管理碎碎念系列之一:干系人管理
  • 用简单代码看卷积组块发展
  • 最简单的无缝轮播
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • (阿里云万网)-域名注册购买实名流程
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原)Matlab的svmtrain和svmclassify
  • (转载)(官方)UE4--图像编程----着色器开发
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 8.0 中有哪些新的变化?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net 按比例显示图片的缩略图
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @RequestBody的使用
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决