Direct3D 实现一个汽车小游戏
github:https://github.com/viktorika/a-car-game-written-in-direct3d
这个是我花了几天入门看了Direct3D的官方教程和另外一本<Dx11游戏编程入门>后做的一个简单的项目,为了加深我对direct3D的认识。
因为只是入门,所以用的接口基本都是windows sdk的dx12接口,只有加载贴图的时候被微软文档告知已经移除出来作为第三方库使用了,无奈之下只好去github搜了DirectTK库,把头文件和lib文件都放进了windows sdk中,一劳永逸。
绘制的模型
游戏场景中只绘制了3个模型,天空盒,地砖,汽车。一切从简,如果要加入复杂的模型然后自己画的话会很复杂,所以这里就只画了三个模型
天空盒
天空盒绘制了一个正方体结构,然后在里面贴图跟着视角走就ok了,很简单。
地砖
先做个正方形模型,然后变换到世界空间的时候通过循环来重复渲染,也很简单。
汽车
这个就稍微复杂一点,不过模型上用的是长方体+4个圆柱,比较简单的模型,毕竟只用三角形构造,弄得太复杂也没什么用。不如把精力花在汽车运动协调上。这里需要记录汽车的中心点,当前汽车的正方向和前后轮的旋转角这些信息,才能够比较正确地展示每一帧汽车的运动轨迹,每一帧有关的运动的计算都通过一个类Motion来处理,设定汽车运动时是匀速,如果是变速运动比较麻烦,不过也不是不能做,本来公式我都想好了,结果隔天做这个的时候想了下弄匀速就好了,不搞那么麻烦。
照相机
有两个相机,一个用于第一人称视角,另一个用于第三人称视角,第一人称视角是固定的,所需要的参数通过Motion处理后传递给它,第三人称视角的参数也是如此,另外可以通过鼠标控制第三人称视角的方向。
整个项目都比较容易,没涉及什么复杂的算法,有兴趣的可以看看,详细文档也写在github上了。
- java中如何初始化接口
- 你和PPT高手之间,就只差一个iSlide
- 如何在原生微信小程序中实现数据双向绑定
- 追溯 React Hot Loader 的实现
- 【推荐】开源项目minapp-重新定义微信小程序的开发
- 【完结汇总】iKcamp出品基于Koa2搭建Node.js实战共十一堂课(含视频)
- hadoop性能调优
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 规范与部署
- iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 错误处理
- DiscuzX v3.4 任意文件删除漏洞
- 系列3|走进Node.js之多进程模型
- Java中Arraylist与linkedlist的区别
- 手把手教你撸一个 Webpack Loader
- HashMap与HashTable区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈vue+element全局loading加载
- LeetCode59|重复N次的元素
- 谈Vue组件的is特性
- 基于日志的回放对比系统设计
- 【收藏向】常用Java排错工具单
- MYSQL数据同步之基于GTID事务数据同步
- 【风险通告】XXL-JOB远程命令执行漏洞
- MySQL8.0特性之redo logging动态开关
- 3分钟短文:Laravel模型集合跟基类真不一样,别混为一谈
- 3分钟短文:Laravel模型一对一一对多关系真的乱吗?
- 3分钟短文:Laravel请求对象方法极多,可不是花拳绣腿
- 3分钟短文:Laravel验证用户输入,不要把啥都存到系统里
- 3分钟短文:Laravel用户自定义命令行简明教程
- 3分钟短文:Laravel命令行参数和可选项分不清?怎么可能!
- 《Offer一箩筐》求职之前你必须知道的 4 件事!!