DirectXで文字を表示する方法&互換性
DirectXで文字を表示する方法&互換性
DirectXが使えるように設定するとコンソールアプリのprintf関数が使えなくなりますが
DirectXで制作したゲームで文字(キャラ同士の会話など)を表示するにはどういった方法があるのですか?
また自分の環境はWIndows7なのでDirectX SDKのバージョンは11.0なのですが
この環境で開発されたゲームをWindowsXPなど低いバージョンのDirectXで動作させるには
どうすればよいのですか?
DirectXで制作したゲームで文字(キャラ同士の会話など)を表示するにはどういった方法があるのですか?
また自分の環境はWIndows7なのでDirectX SDKのバージョンは11.0なのですが
この環境で開発されたゲームをWindowsXPなど低いバージョンのDirectXで動作させるには
どうすればよいのですか?
Re: DirectXで文字を表示する方法&互換性
zy さんが書きました:DirectXが使えるように設定するとコンソールアプリのprintf関数が使えなくなりますが
DirectXで制作したゲームで文字(キャラ同士の会話など)を表示するにはどういった方法があるのですか?
- あらかじめ必要なフォントイメージを作成しておき、テクスチャとして読み込んで描画する
※使用する文字数が少ないとき - GetGlyphOutline APIを使うなどして動的にテクスチャイメージを作成して描画する
※文字の大きさが揃っている場合、作成済みテクスチャを使い回して高速化可能 - DirectWriteを使う
※贅沢に高品位な描画を目指すなら(あるいは楽したいなら)。速度はPC性能に依存
Direct3D 11はWindows XPでは動作しません。zy さんが書きました:また自分の環境はWIndows7なのでDirectX SDKのバージョンは11.0なのですが
この環境で開発されたゲームをWindowsXPなど低いバージョンのDirectXで動作させるには
どうすればよいのですか?
Windows XPで動作するのはDirect3D 9までです。
Windows 7でDirect3D 9を使ったプログラムを開発することは可能です。
Re: DirectXで文字を表示する方法&互換性
グラフィックボード(GeFourceの最新版やRadeonの最新版)に取り換えればDirectX 11が理論上可能ですよISLe さんが書きました:Direct3D 11はWindows XPでは動作しません。
Windows XPで動作するのはDirect3D 9までです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectXで文字を表示する方法&互換性
DirectX APIのサポートなしにDirectX 11相当の機能がXPで使えるんでしょうか?naohiro19 さんが書きました:グラフィックボード(GeFourceの最新版やRadeonの最新版)に取り換えればDirectX 11が理論上可能ですよISLe さんが書きました:Direct3D 11はWindows XPでは動作しません。
Windows XPで動作するのはDirect3D 9までです。
と言うよりもDirectX 11のAPIインターフェイスが使えるんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectXで文字を表示する方法&互換性
MSDN DirectX に関してよく寄せられる質問naohiro19 さんが書きました:グラフィックボード(GeFourceの最新版やRadeonの最新版)に取り換えればDirectX 11が理論上可能ですよ
DirectX 11 は Windows Vista や Windows XP でも使用できますか。
DirectX 10 は Windows XP でも使用できますか。
Re: DirectXで文字を表示する方法&互換性
ISLe さんが書きました:zy さんが書きました:DirectXが使えるように設定するとコンソールアプリのprintf関数が使えなくなりますが
DirectXで制作したゲームで文字(キャラ同士の会話など)を表示するにはどういった方法があるのですか?つまり文字はあらかじめ画像編集ソフトなどで画像化しておかなければ表示できないのですか?
- あらかじめ必要なフォントイメージを作成しておき、テクスチャとして読み込んで描画する
※使用する文字数が少ないとき- GetGlyphOutline APIを使うなどして動的にテクスチャイメージを作成して描画する
※文字の大きさが揃っている場合、作成済みテクスチャを使い回して高速化可能- DirectWriteを使う
※贅沢に高品位な描画を目指すなら(あるいは楽したいなら)。速度はPC性能に依存
DirectWriteは確かDirectX11の機能だからwindowsXPの環境じゃ動作しませんよね。
printfのように簡単にキーボードでソースコードに文字を入力して表示する方法とか無いんですか?
Direct3D 11はWindows XPでは動作しません。zy さんが書きました:また自分の環境はWIndows7なのでDirectX SDKのバージョンは11.0なのですが
この環境で開発されたゲームをWindowsXPなど低いバージョンのDirectXで動作させるには
どうすればよいのですか?
Windows XPで動作するのはDirect3D 9までです。
Windows 7でDirect3D 9を使ったプログラムを開発することは可能です。
つまりDirectX11 SDKで開発してもDirectX9.0の機能だけを使えば
WIndoswXPでも動作可能なゲームを開発できるということでしょうか?
Re: DirectXで文字を表示する方法&互換性
送信失敗してしまいました、失礼します・・・・
つまり文字はあらかじめ画像編集ソフトなどで画像化しておかなければ表示できないのですか?
DirectWriteは確かDirectX11の機能だからwindowsXPの環境じゃ動作しませんよね。
printfのように簡単にキーボードでソースコードに文字を入力して表示する方法とか無いんですか?
そしてDirectX11 SDKで開発してもDirectX9.0の機能だけを使えば
WIndoswXPでも動作可能なゲームを開発できるということでしょうか?
つまり文字はあらかじめ画像編集ソフトなどで画像化しておかなければ表示できないのですか?
DirectWriteは確かDirectX11の機能だからwindowsXPの環境じゃ動作しませんよね。
printfのように簡単にキーボードでソースコードに文字を入力して表示する方法とか無いんですか?
そしてDirectX11 SDKで開発してもDirectX9.0の機能だけを使えば
WIndoswXPでも動作可能なゲームを開発できるということでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DirectXで文字を表示する方法&互換性
ゲームをつくろーの記事にフォント表示編があります。
「DirectX9技術編」
http://marupeke296.com/DirectXMain.html
「DirectX10技術編」
http://marupeke296.com/DX10_main.html
まぁ、ISLe さんが書いた方法の一つなのですが。
「DirectX9技術編」
http://marupeke296.com/DirectXMain.html
「DirectX10技術編」
http://marupeke296.com/DX10_main.html
まぁ、ISLe さんが書いた方法の一つなのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DirectXで文字を表示する方法&互換性
GetGlyphOutlineを使う方法はスルーですか?zy さんが書きました:つまり文字はあらかじめ画像編集ソフトなどで画像化しておかなければ表示できないのですか?
DirectWriteは確かDirectX11の機能だからwindowsXPの環境じゃ動作しませんよね。
softyaさんが解説サイトを紹介されてますが、GetGlyphOutlineはWin32 APIなのでWindows XPでも使えます。
Windows XPで動かす前提なら、DXライブラリとかDirectX9のD3DXFontとかを使えば楽はできます。zy さんが書きました:printfのように簡単にキーボードでソースコードに文字を入力して表示する方法とか無いんですか?
はい、そうです。zy さんが書きました:そしてDirectX11 SDKで開発してもDirectX9.0の機能だけを使えば
WIndoswXPでも動作可能なゲームを開発できるということでしょうか?
Re: DirectXで文字を表示する方法&互換性
つまりWin32 APIの機能のGetGlyphOutlineを使えば、printfのようにエラーが出ずに文字を表示できるのですね?
Re: DirectXで文字を表示する方法&互換性
※追記※
調べてみると他にもTextOutやDrawTextという関数もあるようですが
具体的にGetGlyphOutlineとの機能の差異などはどのようなものがあるのでしょうか?
調べてみると他にもTextOutやDrawTextという関数もあるようですが
具体的にGetGlyphOutlineとの機能の差異などはどのようなものがあるのでしょうか?
Re: DirectXで文字を表示する方法&互換性
GetGlyphOutlineだけでは表示できません。zy さんが書きました:つまりWin32 APIの機能のGetGlyphOutlineを使えば、printfのようにエラーが出ずに文字を表示できるのですね?
softyaさんの紹介したサイトにコード付きで解説されていますが、
- GetGlyphOutlineを使って指定した文字のビットマップイメージを得ます
- そのビットマップイメージを使ってDirect3Dのテクスチャを作成します
- そのテクスチャをポリゴンに貼り付けて描画します
さらに頻繁に使用する文字や使用頻度の高い文字のテクスチャをなるべく再利用して高速化を図ります。
GDIとDirect3Dは排他的な関係にあるので、同時に表示することはできません。zy さんが書きました:※追記※
調べてみると他にもTextOutやDrawTextという関数もあるようですが
具体的にGetGlyphOutlineとの機能の差異などはどのようなものがあるのでしょうか?
GDIでオフスクリーンを作って描画してその内容を取り出してDirect3Dのテクスチャとして利用することは可能です。
テキスト表示(というかフォントのレンダリング)は重い処理です。
描画する都度フォントにアクセスするのを避けて、テクスチャを作り置きするようにしないと、場面転換のエフェクト時に処理落ちするようなことになります。
そういう場合は場面転換時にテキストを表示しないのも手ですが。
Re: DirectXで文字を表示する方法&互換性
DiretcXの開発環境ではTextOutやDrawTextは使えないということですか?
それともGetGlyphOutlineと同時には使えないということですか?
GetGlyphOutlineは聞いている限りだと結構ややこしい処理をしないと文字を表示できないみたいですね
それこそprintfのように簡単に文字を表示する関数とか無いんでしょうかね・・・・
それともGetGlyphOutlineと同時には使えないということですか?
GetGlyphOutlineは聞いている限りだと結構ややこしい処理をしないと文字を表示できないみたいですね
それこそprintfのように簡単に文字を表示する関数とか無いんでしょうかね・・・・
Re: DirectXで文字を表示する方法&互換性
使えますよ。同時には見えないというだけのことです。zy さんが書きました:DiretcXの開発環境ではTextOutやDrawTextは使えないということですか?
それともGetGlyphOutlineと同時には使えないということですか?
GDIとDirect3Dの関係はテレビのチャンネルのようなものだと思ってもらったら良いのではないでしょうかね。
いちおう補足しておきますが、ゲームの会話テキストということで、同じウィンドウのクライアント領域を対象にした場合という前提ですけど。
ちょっと前にDXライブラリとかDirectX9のD3DXFontとかを使えばできるとも回答していますが。zy さんが書きました:GetGlyphOutlineは聞いている限りだと結構ややこしい処理をしないと文字を表示できないみたいですね
それこそprintfのように簡単に文字を表示する関数とか無いんでしょうかね・・・・
Direct3Dの機能だけでやるのなら、テクスチャを作ってポリゴンに貼って描画、という手順を自前で踏むしか無いです。
GetGlyphOutlineはそこそこ高品質での描画ができるし工夫すれば高速化もできるのでゲーム用途に向いていると思います。
メッセージを枠内で折り返すなど文字単位で行う処理が既に実装済みであれば、大した手間にはならないのではないかと。
Re: DirectXで文字を表示する方法&互換性
D3DXFontは重いと聞きましたから素直に会話文など文字を多く使う所でも
GetGlyphOutlineを使えばよいのですね
ありがとうございました
GetGlyphOutlineを使えばよいのですね
ありがとうございました