DXライブラリ、VC++2008で
フォントサイズを連続的に変える一般的な方法を知りたい といことで、以下のスレで同様の質問をし、一度解決済みにしました。
http://www.play21.jp/board/formz.cgi?ac ... &rln=51030
あるグラフハンドルに大きめのフォントを描画し、それを拡大率を変えて描画 というご回答をいただいたのですが、より具体的な手順を知りたいです。
以下のような方法で問題ないでしょうか。
FontHandle = CreateFontToHandle(~) ;//大きめのフォントデータを作り変数に入れる
a = MakeGraph(~);//グラフィックハンドルを作り変数に入れる
//ここからループ
DrawStringToHandle(~)//文字を普通に書く
GetDrawScreenGraph(~)//今書いたものを読み込み a に代入
DrawExtendGraph(~)//拡大率を変えて a を描画
・
・
・
このような方法で問題があったらご指摘ください
一度解決済のものを再び掻き回してすいません
フォントサイズを連続的に変える②
Re:フォントサイズを連続的に変える②
MakeGraph
の前に、描画可能なハンドルを作るという宣言が必要です。(関数で宣言したはず)
関数名は、ちょっと今時間なくて調べられません。
公式掲示板の過去スレにあるとおもいます。
「描画可能」とかで検索するとでるかと。
の前に、描画可能なハンドルを作るという宣言が必要です。(関数で宣言したはず)
関数名は、ちょっと今時間なくて調べられません。
公式掲示板の過去スレにあるとおもいます。
「描画可能」とかで検索するとでるかと。
Re:フォントサイズを連続的に変える②
>このような方法で問題があったらご指摘ください
その方法だと、最初に普通に書いた文字がフレームバッファに残ったまま、
テクスチャ化された文字を書くことになりますので、テクスチャを表示する前に
画面を消しておく必要があるように思います。
あと、GetDrawScreenGraphは処理負荷が高いので、フレームレートが思うように
出ないかもしれません。
代替案としては MakeGraphではなく、MakeScreenでハンドルを生成し、ループ内で
1) SetDrawScreenで描画先を生成したグラフィックスハンドルを指定してする
2) そのハンドルに書かれている絵をClearDrawScreenで消す
3) フォントを描画、
4) SetDrawScreenで元の描画先(大抵の場合 DX_SCREEN_BACK)に戻す
5) DrawExtendGraphで描画
という処理にします。
最後にループを抜けるとき、生成したグラフィックスハンドルを破棄します。
基本はこの方法でいいはずですが、GPUの性能が低い場合失敗することがありますので
その場合は最初の GetDrawScreenGraphでなんとかしてみて下さい。
その方法だと、最初に普通に書いた文字がフレームバッファに残ったまま、
テクスチャ化された文字を書くことになりますので、テクスチャを表示する前に
画面を消しておく必要があるように思います。
あと、GetDrawScreenGraphは処理負荷が高いので、フレームレートが思うように
出ないかもしれません。
代替案としては MakeGraphではなく、MakeScreenでハンドルを生成し、ループ内で
1) SetDrawScreenで描画先を生成したグラフィックスハンドルを指定してする
2) そのハンドルに書かれている絵をClearDrawScreenで消す
3) フォントを描画、
4) SetDrawScreenで元の描画先(大抵の場合 DX_SCREEN_BACK)に戻す
5) DrawExtendGraphで描画
という処理にします。
最後にループを抜けるとき、生成したグラフィックスハンドルを破棄します。
基本はこの方法でいいはずですが、GPUの性能が低い場合失敗することがありますので
その場合は最初の GetDrawScreenGraphでなんとかしてみて下さい。
Re:フォントサイズを連続的に変える②
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ast&no=399
このログをよく読んだところ、だいたいの流れを把握できました。
1.SetDrawValidGraphCreateFlag
で描画可能グラフハンドル作成可能にする
2.SetDrawValidAlphaChannelGraphCreateFlag
でαch描画可能グラフハンドル作成可能にする
3.MakeGraph で描画可能グラフハンドル作成
4.SetDrawValidAlphaChannelGraphCreateFlag
でαch描画可能グラフハンドル作成を閉じる
5.SetDrawValidGraphCreateFlag
で描画可能グラフハンドル作成を閉じる
の手順で描画可能な画像を1枚作り、描画手順は以下のようにしました。
SetDrawScreen で描画先を、先ほど作ったグラフハンドルに指定
フォントを描画
SetDrawScreen で描画先を元に戻す
ループ部分で
DrawExtendGraph で先ほど描画したものを描画
ループ抜けたら破棄
という以上のような感じで、頭の中で想像していたような演出が再現できました。
アドバイスを与えてくださった皆様ありがとうございました。
これでどのようなことができるようになったかというと、
フォントを画像として扱えるようになったので、
輝度や透明度や大きさ、傾き、変形などが自由にできるようになりました。
フォントが ズームアウトしながらフェードイン したりできるので、
たとえば龍神録や本家東方でスペルカードが出てきたときに、透明度 大→小,文字サイズを大→小
という感じでかっこよくスペル名を表示することができました。 (←これが今回の目的でした)
ところでMakeGraphとMakeScreenはどう使い分けるのでしょうか。
↑で書いたとおり、MakeGraphでも一応できました。
このログをよく読んだところ、だいたいの流れを把握できました。
1.SetDrawValidGraphCreateFlag
で描画可能グラフハンドル作成可能にする
2.SetDrawValidAlphaChannelGraphCreateFlag
でαch描画可能グラフハンドル作成可能にする
3.MakeGraph で描画可能グラフハンドル作成
4.SetDrawValidAlphaChannelGraphCreateFlag
でαch描画可能グラフハンドル作成を閉じる
5.SetDrawValidGraphCreateFlag
で描画可能グラフハンドル作成を閉じる
の手順で描画可能な画像を1枚作り、描画手順は以下のようにしました。
SetDrawScreen で描画先を、先ほど作ったグラフハンドルに指定
フォントを描画
SetDrawScreen で描画先を元に戻す
ループ部分で
DrawExtendGraph で先ほど描画したものを描画
ループ抜けたら破棄
という以上のような感じで、頭の中で想像していたような演出が再現できました。
アドバイスを与えてくださった皆様ありがとうございました。
これでどのようなことができるようになったかというと、
フォントを画像として扱えるようになったので、
輝度や透明度や大きさ、傾き、変形などが自由にできるようになりました。
フォントが ズームアウトしながらフェードイン したりできるので、
たとえば龍神録や本家東方でスペルカードが出てきたときに、透明度 大→小,文字サイズを大→小
という感じでかっこよくスペル名を表示することができました。 (←これが今回の目的でした)
ところでMakeGraphとMakeScreenはどう使い分けるのでしょうか。
↑で書いたとおり、MakeGraphでも一応できました。
Re:フォントサイズを連続的に変える②
>MakeGraphとMakeScreenはどう使い分けるのでしょうか
MakeScreenは MakeGraphの前後にあるSetDrawValidGraphCreateFlagを内部で呼んでくれます。
従って、上記過程の 1と 5を省略できます。
MakeScreenは MakeGraphの前後にあるSetDrawValidGraphCreateFlagを内部で呼んでくれます。
従って、上記過程の 1と 5を省略できます。