SetTransform()とか

 個人的に謎なんですが、


D3DXMATRIX world, view_to_screen;
DrawPlate( 0, 0, 0 );

// 全軸ビルボード (カメラの逆行列作成)
world._11 = g_camera._11;
world._12 = g_camera._21;
world._13 = g_camera._31;

world._21 = g_camera._12;
world._22 = g_camera._22;
world._23 = g_camera._32;

world._31 = g_camera._13;
world._32 = g_camera._23;
world._33 = g_camera._33;

// スクリーン座標に変換
D3DXMatrixMultiply( &view_to_screen, &g_camera, &g_ortho_proj );
D3DXMatrixMultiply( &view_to_screen, &view_to_screen, &g_screen );
D3DXMatrixInverse( &view_to_screen, NULL, &view_to_screen );
D3DXVec3TransformCoord( &out, &pos, &view_to_screen );

world._41 = out.x;
world._42 = out.y;
world._43 = out.z;

g_pD3Ddevice_3D->SetTransform( D3DTS_WORLD, &world );

これと

D3DXMATRIX world, view_to_screen;
// 全軸ビルボード (カメラの逆行列作成)
world._11 = g_camera._11;
world._12 = g_camera._21;
world._13 = g_camera._31;

world._21 = g_camera._12;
world._22 = g_camera._22;
world._23 = g_camera._32;

world._31 = g_camera._13;
world._32 = g_camera._23;
world._33 = g_camera._33;

// スクリーン座標に変換
D3DXMatrixMultiply( &view_to_screen, &g_camera, &g_ortho_proj );
D3DXMatrixMultiply( &view_to_screen, &view_to_screen, &g_screen );
D3DXMatrixInverse( &view_to_screen, NULL, &view_to_screen );
D3DXVec3TransformCoord( &out, &pos, &view_to_screen );

world._41 = out.x;
world._42 = out.y;
world._43 = out.z;

D3DXVec3TransformCoord( &set_pos, &origin, &world );
DrawPlate( set_pos.x, set_pos.y, set_pos.z );

これが等価にならないようなんだけど、何ででしょか…。

「(0,0,0)に描画したものに行列演算かける」のと

「行列演算した座標のものを描画している」のとの違いしかないはずなんだけど…。





 3D2D描画が上手くいってるようないかないような、R-無印です。

ちなみに


D3DXMatrixTranslation( &mat, x, y, z );
これと

D3DXMatrixIdentity( &mat );
mat._41 = x;
mat._42 = y;
mat._43 = z;
これと

D3DXMatrixIdentity( &mat );
D3DXMatrixTranslation( &trs, x, y, z );
mat = mat * trs;
これの「mat」の結果はすべて等価になります。

device->SetTransform()に放り込めば同じ結果…になるはず。

…多分、2番目のが一番軽い…のかな??