お世話になっています。
D3DXCreateFontとID3DXFont::DrawTextによって文字列を左上(0,0)右下(20,100)の四角形内に縦書き描画しようと、以下のようにコードを書きました。
CreateFontの第3引数cEscapementを2700にし、
CreateFontの第4引数cOrientationも2700にしてCreateFont、D3DXCreateFontによって作成したフォントで、
SetRect(0,0,20,100);
DrawText(Str,-1,&rc,DT_SINGLELINE | DT_WORD_ELLIPSIS | DT_NOCLIP, D3DCOLOR_XRGB(0,0,0));
上のようにして実行すると、何も表示されません。
SetRectの引数を変えてみたりはしたのですが、それでもやはり上手くいきませんでした。
もちろん、フォントは縦書きフォントを指定しています。
さっぱり原因がわからないので、どなたがご存知の方がいらっしゃれば、ご教授よろしくお願いします。
開発環境:Visual Studio 2005 C++
開発言語:C/C++(Win32API)+DirectX9.0b
No.3ベストアンサー
- 回答日時:
そうですか・・・。
横書きが OK なら少しずつ値(角度等)を変更していくと何かがわかる場合が
あります。変更できるところがあるならとことん変更していくと
覚えられるし、応用方法が増えていくのでいいと思います。
(まあ、時間が空いているならですが。^^)
ただ、ダイレクト X と WinAPI を組み合わせる動作は
私にはよくわかりませんのでご自分でしらべてください。
でも、少し突っ込みを入れると
>ただ、D3DXFontを使うためにDrawTextがいいんですよね。
>(DirectXでTextOutは重すぎるので・・)
DirectX で TextOut() 関数は別に重いわけではないです。(多分)
DirectX で TextOut() 関数を使うにはサーフェイスからデバイスコンテキストハンドルを
取得してやる・・・というめんどくさい作業が入るけど出来ます。
それに DrawText() も実は重いです(うわさ)。
下記のサイトから
DirectX技術編→高速フォント表示
ではテクスチャにフォント文字を書き込んで
そのテクスチャを貼り付けるという高速文字の描画方法
が記述されています。それにテクスチャなので回転等が
使えるので縦書きにも工夫次第で出来ます。
サンプルソースが記述されているのでわかりやすいサイトです。
DirectX をやっているならこのサイトはそれなりに役に立つと思います。
参考URL:http://www.h6.dion.ne.jp/~game296o/GameMain.html
この回答への補足
アドバイス有難うございます。
そうですね、素直にテクスチャ生成を試してみた方がいいですね。
頻繁に描画する文字が変わるため、テクスチャ生成の時間がネックになりそうで躊躇していたのですが、やってみることにします。
DrawTextは普通に重いですが、TextOutよりは軽いと思います。
一応Win32APIではなくID3DXFontのメソッドですので。
内部でWin32APIのDrawTextを呼び出しているだとかいう話があったような気もするため確信が持てなくなってきましたが・・。
では、やはり初心に帰ってテクスチャ生成を試してみます。
上手くできたらご報告します。
No.4
- 回答日時:
色々と手間がかかりますけど頑張ってください。
DrawText については私も WinAPI
の途中からDirectX に移ったので微妙なうる覚えだったかもしれません。
>内部でWin32APIのDrawTextを呼び出しているだとかいう話があったよ>うな気もするため確信が持てなくなってきましたが・・。
こんなこと知りませんでしたよ。ありがとうございます。^^
ずいぶんお詳しいようですから、すぐ出来ますよ。
頑張ってください。
ちなみに私はDirectX 始めて5ヶ月くらいなので
そんなに詳しくはお答えできなかったと思います。
本当に参考程度にしてください。
お返事遅れてすみません。
動的にテクスチャを生成する方法で大丈夫のようでした。
手間はかなり増えましたが、速度も速く上々です。
ありがとうございました。
No.2
- 回答日時:
とりあえず、もう一度・・・ここからはアドバイスというより
余計なおせっかいになるかもしれませんデス。^^
エラーチェックをしてOKなら、
(備考 g_pD3DDevice はLPDIRECT3DDEVICE9です (デバイス))
g_pD3DDevice->BeginScene(); //シーンの開始
/*この部分*/
g_pD3DDevice->EndScene();
g_pD3DDevice->Present( NULL, NULL, NULL, NULL );
「/*この部分*/」
という場所にDrawText() メソッドを使っているか・・・
そういう単純なミスのチェックが結構あるのでそこなど
最後に補足なんですけど、縦書きをやろうとしていらっしゃるようですが、横書きは出来ているのでしょうか?
もし、出来ていないなら、そちらからやったほうが・・ね・・
orz
俺は何が言いたいんだろう・・。
これでもまだ駄目ならまた返事をお願いします。
少し調べてみます。
この回答への補足
アドバイスありがとうございます。
CreateFontの角度指定で0を指定した場合は、普通に横書きで表示されています。
ですので、DrawTextメソッドの位置はあっているはずだと思います。
HDCを使って、TextOutで描画したときはきちんと縦書きに表示されるんです。
ただ、D3DXFontを使うためにDrawTextがいいんですよね。
(DirectXでTextOutは重すぎるので・・)
No.1
- 回答日時:
アドバイス程度に聞いてください。
そちらの開発環境ではデバッガがあるのでブレークポイント等を挿入したりしてプログラムを止めてみて様子を見るのも一つの手です。
LPD3DXFONT p_D3DXFont; //フォントオブジェクト
HRESULT hr;
hr = p_D3DXFont->DrawText(
NULL,
/*文字列*/,
-1,
/*RECT 構造体*/,
FW_NORMAL, //仮の値なので・・・
D3DCOLOR_XRGB(0,0,0) );
if( FAILED(hr) )
{
MessageBox( NULL, "失敗", "エラー", MB_OK );
}
hr には成功するとD3D_OK,失敗すると、うーん・・・変な値が入っています。
-214341ぐらいの数字です。
ただ、上のif文のやり方だとメッセージボックスがたくさん出る
のでお勧めしません。
他にも背景の色と文字の色が同じなんていう落ちもあるので、
色々試してください。
アドバイスありがとうございます。
DrawTextの返り値を調べてみたのですが、エラーが返されることはありませんでした。
背景の色と文字の色が同じ、という落ちもなかったみたいです。
いまいちDrawTextメソッドの仕様を詳細に把握してなく、Rectの座標指定ミスかな、とは踏んでいるのですが。
どうしましょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックス内の文字サイズ変更
-
ワードでコントロールツールボ...
-
フォントの大きさ
-
static 文字が上に張り付いて・...
-
VBにて指定した通りにExcelの列...
-
Macbook Word フォント色変更で...
-
素材管理の方法
-
JTableのヘッダー文字のサイズ変更
-
リソースエディタでスタティッ...
-
VB6.0で、コンボボックスの背景...
-
ドロップダウンリストのフォン...
-
Photoshop 文字がギザギザ
-
コンボボックスの一部のアイテ...
-
リストコンロールの一行だけを...
-
VBAのフォント変更(エクセルか...
-
Eclipseで修正したファイル名の...
-
行き詰まりましたυ
-
マインクラフト(pc版)で座標...
-
エクセルで作った新しいウイン...
-
コントロールの書式設定で、“コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの大きさ
-
コンボボックス内の文字サイズ変更
-
VBAのフォント変更(エクセルか...
-
VB.NET2005 TextBox 高さ(Heig...
-
ドロップダウンリストのフォン...
-
リソースエディタでスタティッ...
-
VBA TEXTBOXテキストボックスの...
-
エディットボックスのフォント...
-
プロポーショナルフォントの文...
-
Msgboxで使用するフォントの指...
-
チェックボックスの箱のサイズ...
-
文字色 エクリプス
-
コンボボックスの一部のアイテ...
-
Eclipseで修正したファイル名の...
-
WPFのフォントカラー変更につい...
-
ワードでコントロールツールボ...
-
static 文字が上に張り付いて・...
-
Excelのセルのフォントサイズを...
-
JakaraPOI セル内部のフォント...
-
GetTextExtentPoint32での高さ
おすすめ情報