Managed DirectXで文字をテクスチャとしてポリゴンに貼り付ける

色々やってみてめんどくさかったので、適当にメモとっとく。DirectXがマジでわかんね……3Dなんなの一体。

//ビットマップを作成
Bitmap map = new Bitmap(tex_width, tex_height);

//グラフィックを作成
Graphics g = Graphics.FromImage(map);

//フォントと、そのフォーマットを作成(縦書き)
StringFormat sf = new StringFormat();
sf.FormatFlags = StringFormatFlags.DirectionVertical;
System.Drawing.Font font = new System.Drawing.Font("@MS ゴシック", font_size);
SolidBrush brush = new SolidBrush(XorColor(tex_color));

//下塗り
g.FillRectangle(new SolidBrush(tex_color), 0, 0, tex_width, tex_height);

//文字を書き込む
g.DrawString(write_str, font, brush, 0, 0, sf);

//メモリストリームの作成
MemoryStream mstream = new MemoryStream(BitmapToByteArray(map));

//テクスチャに設定
tex = TextureLoader.FromStream(device, mstream);

すいませんけども、結構省いたりしてるんで、分からないところがあれば指摘してくださいな。

/// <summary>
/// ビットマップからbyte配列を作成
/// </summary>
/// <param name="img">変換したいビットマップ</param>
/// <returns>変換したbyte配列</returns>
public static byte[] BitmapToByteArray(Bitmap img)
{
    ImageConverter imgconv = new ImageConverter();
    return (byte[])imgconv.ConvertTo(img, typeof(byte[]));
}

/// <summary>
/// 色を反転して返す(タイトル名を描画するときに使用する=本体の色とは逆の色にする)
/// </summary>
/// <param name="color">変換する色</param>
/// <returns>変換した色</returns>
private static Color XorColor(Color color)
{
    return Color.FromArgb(color.R ^ 255, color.G ^ 255, color.B ^ 255);
}

コメントを残す

メールアドレスが公開されることはありません。