Selecting 3D Objects--Picking

Basic Idea

3D model to screen--series of transformations
screen to 3D model--reverse transformations

end up with "ray"
find out what ray runs into--How?

My Code

pick.cpp
This code takes the x and y screen coordinates and gives back x, y, and z world coordinates. I use it to find the x and z coordinates of the point where the pick ray intersects the plane y = 0. The board in my 3D battleship game is on the y = 0 plane, so I can use this function to find out what square on the board they clicked on.
Note: I use this function as a member function in a display class so there are a few variables (like displayWidth and displayHeight) that you will need to define or change.

References

Projecting a Ray from 2D Screen Coordinates
http://www.mvps.org/directx/articles/rayproj.htm
Note that this article uses DirectX 7 so there are several things in it that won't work in DirectX 8. It does explain the basic idea of picking better than the next example, which doesn't have much explanation.

Improved Ray Picking
http://www.mvps.org/directx/articles/improved_ray_picking.htm
This article has good sample code but it is a fairly general solution and more complicated than you need for something like a 3D implementation for Battleship.