Special Effects Game Programming with DirectX teaches you how to create some of the most interesting special effects used in games. Learn how to code 3D water, cartoon renderings, lens flares, image warping and feedback, fire and explosions, and many other effects.
Fair warning: this book is old, so the APIs have changed significantly... but the concepts underlying the techniques are all still solid. It's just that nowadays they'd be written in a shader. But, on the bright side, this book now costs like all of two bucks used.
I get a lot of emails asking me for the source code to this book. I'm sorry, but I'm under a legal contract to not distribute any code myself. If you're looking for code, your best option is to buy a used book, or perhaps contact the publisher directly.
The book is divided into three sections. The first section teaches 3D programming, with an emphasis on DX8 and vertex/pixel shaders. It is here that you'll learn the concepts needed to do hardcore 3D programming in DirectX.
The (short) second section is all about 2D effects. This section teaches some simple, old-school demo effects, like water and fire, along with some common 2D effects for 3D games. For example, there's a whole chapter on transitions - fading in, dissolving, tile-dissolving, etc. There's also a lot about image warping, blurring, and video feedback effects - stuff that's primarily 2D but has applications in any sort of game, 2D or 3D.
The third and most important section is all about 3D effects. The book covers vertex and pixel shaders, as well as several other must-know techniques for generating effects, such as point sprites (particle systems). This section is where you learn the truly astounding eye candy - 3D water, lens flares, explosions, advanced particle systems, EMBM, deformation using vertex shaders, cartoon rendering, etc.
All of the techniques of the second and third sections are presented as they're needed. The book takes a very practical approach to special effects - each chapter focuses on a certain effect, for example, water or explosions, and then explains what techniques you need to know in order to code that effect (i.e., in the chapter on water you'll learn about multitexturing and environment mapping; the explosions chapter will show you billboarded sprites). This keeps the focus on the effects.
The book is written for C or C++ programmers at all levels of game development experience - if you know C, you'll be fine. If you're new to game development, no problem - the first section of the book will teach you what you need to know about Windows programming, DirectX, etc. to learn the effects in the 2nd and 3rd sections. If you're an experienced game developer, you'll probably briefly skim the first section to learn about the new DX8 stuff, and just dive in at the second section (on 2D effects).