出し惜しみせずに3Dの技術を誰かが答えます Part4

このエントリーをはてなブックマークに追加
409名前は開発中のものです。
http://www5d.biglobe.ne.jp/~twintail/
ここにあるLunaライブラリのソース読んで
ちょっと疑問に思ったので分かる人教えてください。

2Dスプライトの回転描画の透視変換のところなんですけど
LunaSprite.cpp 332行〜
わざわざdをでっち上げて、回転行列を求めた後に以下のように変換してます。
vx[i].x = (vec[i].x*d/vec[i].z) + cx - 0.5f;
vx[i].y = (vec[i].y*d/vec[i].z) + cy - 0.5f;
vx[i].z = vec[i].z / d; // 0〜1にする
vx[i].w = 1/vx[i].z;

私の足りない頭で考えた変換式は
x' = x * m._11 + y * m._21;
y' = x * m._12 + y * m._22;
z' = z / 2.0f + 0.5f;

v.x = cx + x';
v.y = cy + y';
v.z = z;
v.rhw = 1.0f/z
こうなんですが、もしかして間違ってますか?
もし私の式でもあっているなら、わざわざdをでっち上げる理由を教えてほしいのですが。