昨天翻硬盘翻出个老项目,突然想折腾下经典游戏开发,就翻出DirectX9来玩。这玩意儿虽然老,但当年可是撑起了一大片游戏江山!
先整环境
第一步把古董SDK翻出来装打开Visual Studio新建空白项目,啪嗒啪嗒敲几行:
- 创建设备对象:折腾半天窗口句柄才把IDirect3D9Device搞出来
- 初始化交换链:调Present函数时老报错,原来忘记设后台缓存
- 写顶点缓冲区:三角形坐标算错位置,在屏幕外飘了半小时
好不容易在显示器上蹦出个彩虹色三角,激动得差点把枸杞茶打翻。
实战踩坑记
想着整个旋转方块,结果掉进纹理贴图的深坑:
- 贴图撕裂:没开垂直同步,方块转起来像被撕成两半
- 内存泄漏:D3DXCreateTextureFromFile用完没释放,内存蹭蹭涨
- 半透效果:调Alpha blending时树叶变橡皮泥,原来深度缓存没重置
查了三天微软祖传文档,发现2005年的论坛帖才搞定。这时候才懂为啥老游戏开场总爱放显卡厂商Logo。
真香现场
折腾完发现这老伙计藏着不少宝贝:
- 固定管线YYDS:不用写Shader也能怼出流光效果
- 骨骼动画神器:Skinned Mesh做人物动作贼流畅
- 性能榨汁机:十年前的集显跑复杂场景居然不卡
最绝的是用Point Sprite功能整粒子系统,五百个烟花粒子CPU占用才涨3%,现代引擎看了都脸红。
接上手柄测试震动反馈,当XInput的嗡鸣声从十年前买的北通手柄传出来,突然理解为啥老玩家总念叨“老游戏有味道”——都是被DX9宠坏的!
