我们公司引擎部门新员工,一般会有两个入门练习:
一是只用类似DrawPixel的函数,实现一个软件光栅化。
二是使用自家引擎做一个完整游戏。可以比较简单,但必须完整。
一个去鹅厂的小伙伴也做过类似跑酷类手游作为练手。
所以我觉得,从学习的角度,一边做游戏,一边做个玩具引擎,并不冲突。
做一个自己的引擎出来,满足技术好奇心,也能试验想法;
用一个开源图形引擎做一个类型的游戏,能了解组成部分和主要需求。了解
楼上有好多关于做游戏还是做引擎的讨论,都是有道理的。
如@张静vinjn 等所说,如果没做过一个完整的游戏,直接只做引擎,学习的效率和引擎的质量都不会太高。
但在很多人心里,会把引擎开发的这个工作神话。这种时候自己做一个引擎,对提高自己的信心会有帮助。大部分贬低引擎开发工作的人,至少都是有能撸一个的底气的(且不说质量)。
-------------------------------------------------------------------------------------------------------------
所以对两个方面,我都推荐一些自己感觉不错的资料:
游戏逻辑方面:推荐一个网站, Game Programming Patterns,作者把自己的书放github上,供读者提意见。
引擎架构方面:Game Engine Architecture,这本得看中文翻译的。
图形引擎方面,主要是算法和API,引擎架构抄一套别人的。
图形基础算法书籍:在lz的基础上,推荐一个3D Game Engine Design,里面的3D算法和原理讲解很详细,可惜有点老。
高级图形技术:除了Real Time Rendering 3和GPU Pro系列以外,可以跟KlayGE和OpenGPU。这个方向量力而行,国内现在的行情是转手游的多,一些复杂的效果研究太深入也可能发挥不了。
update:
下面评论有问,我贴一下。
软件光栅化可以简单理解为,只给你一个画点的函数,你需要用C++实现一个三维物体显示的过程。一般这个工作是由Direct3D/OpenGL的驱动实现来做的。
这个工作可以做的很难,也可以很简单。我们公司貌似所有客户端程序都会做这个,但要求跟老大有关。
最基本就是实现一个固定管线,包括顶点坐标的矩阵变化,画线,三角形填充光栅化算法,裁剪,Gouround光照,纹理坐标插值,ZBuffer等等。
要做好点,就可以把一个引擎Renderer部分的借口都实现了,用C++写个VS/PS,跟D3D/OpenGL平级。