トップページgamedev
1001コメント355KB

DirectX総合スレ (Part2)

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/09/22 23:30:32ID:anobjZYP
DirectXについては基本このスレで話していこうとものです。
基礎的な質問+高度な質問も簡潔かつ簡単に答えることをモットーにして頂き
このスレの回転を早めて常にアクティブなスレにしたいと思っております。
このスレに質問等を書かれる方はまず最初に自分でしっかりと調べたのちに聞かれることをお願いします。
質問に対する答えも簡潔に出来る限りわかりやすくお願い致します。

テンプレは >>2以降で
0237名前は開発中のものです。04/10/26 20:57:49ID:sbftx/e5
>>231の方法だとモードが増えたらその分だけcase文を増やさなきゃならん、
モードが増えてもメインループのコードには手を付けなくて済むように書く

この手のプログラムは「状態の時間進行」と「現在状態の描画」の繰り返しなわけよ。
その2つの作業をする関数を定義しといたModeBase抽象クラスでも作っておいて
メインループはそいつを駆動させるように書く。
んでモード変更があったらポインタを入れ替えるだけで済む、と大体こんな感じ

>>236
余談だがPresentはCPUパワーを開放しないから
やっぱSleepをどっかで入れないと駄目らしい
0238名前は開発中のものです。04/10/26 21:06:11ID:tYFSXHVI
>>237
それってモードいくつ作ることが前提なシステムなんだよ。
話聞いてると3〜4こで済みそうなのに、
なんでそんなアホみたいに量産しないと元がとれないような設計勧めるんだ?
おそらくな、>>231はな、
タイトル画面→ゲーム画面→エンディング画面
でいいんだよ。
だったらcase文が一番シンプルで綺麗にかけるじゃねぇか。

>余談だがPresentはCPUパワーを開放しないから
俺のプログラム、Sleep入れて無いけどタスクマネージャで見てもCPU100%いかないよ。
0239名前は開発中のものです。04/10/26 21:11:09ID:E7UXsOTF
ビデオカードが対応していれば、垂直同期待ちでCPUは使用されないが、
今度は同期待ちの間、メッセージが処理されなくなる。
素直にイベントとスレッドを分けるべき。
0240名前は開発中のものです。04/10/26 21:13:58ID:tYFSXHVI
>>239
その結論はもちろんビデオカードの対応状況を調べた上での結論と思っていいんだろうね。
0241名前は開発中のものです。04/10/26 21:28:05ID:E7UXsOTF
>>240
確認したのはGeForce2/4、Radeon9600で、全て対応していたが、
市場の出回っているビデオカードを一つ残らず調べろと言うことなのか?
0242名前は開発中のものです。04/10/26 21:37:32ID:sbftx/e5
俺Detonator(GF3Ti)もCatalyst(RADEON9500Pro)も使ってるけど両方とも100%だわ。

それと>>239に対して>>240は全く見当はずれの回答をしているように思えるわけで

ついでにswitchと関数ポインタ系のやり方ってどっちがシンプルかって
それは人によって評価違うだろうしなんとも言えんけれど
俺はオーソドックスなのはやっぱ関数ポインタな気がするけどどうだろう
0243名前は開発中のものです。04/10/26 21:47:01ID:E7UXsOTF
>>242
確認してもらいたいんだが、
DX9cSDKサンプルからOptimizedMesh.exe(負荷の軽いサンプルなら何でも)を実行して、
デバイス設定をINTERVAL_DEFAULTに変更してCPU使用率を見てくれ。
最近のビデオカードなら普通は対応しているはずなんだが。
0244名前は開発中のものです。04/10/26 22:09:02ID:sbftx/e5
>>243
すまん確認したら負荷なしだった…。
つい先日まで同カードで負荷100%いってたゲームがあったから駄目なもんだと思ってた。
相当駄目なやり方してたのかなw
0245名前は開発中のものです。04/10/26 22:54:58ID:UwgETfqy
>231
A()とCreateB()が何かはしらないが漏れならこうする
てかcase 1のbreakおかしいぞ
てか直値よりenum使って変更したときのミスを減らせ
enum {GAME_TITLE=0,GAME_A, GAME_B,GAME_END};
void Main(){
  switch(Mode){
  case GAME_TITLE:
   if( CreateA() )
     Mode=GAME_A;
     break;
  case GAME_A:
     if( A() ){
       Mode=GAME_B;  
     }
     break;
  case GAME_B:
     if( CreateB() ){
      Mode=GAME_END;
     }
     break;
  default:
    end=1;
    break;
  }
}
024624504/10/26 23:02:35ID:UwgETfqy
すまんよくよんでなかった、ダメだな
もしCretateB()に対応するB()があったらこの方がシンプルじゃないか?
switch(Mode){
  case GAME_TITLE:
    if( CreateA() ){
      A();
      Mode=GAME_B;
     }
     break;
  case GAME_B::
    if( CreateB() ){
      B();
      Mode=GAME_END;
     }
     break;
  default:
    end=1;
    break;
  }
}
でもenumは使え
0247名前は開発中のものです。04/10/26 23:03:32ID:KLw6ecBO
どうも231です。
DirectXのフリップ関数は各〜関数で使ってその一つの関数が
タイトル画面やらゲーム画面でやってます。
たしかにこれで作っててどんどんcase文が増えてます。
皆様のご意見を拝見させて頂いた結果としては書いたやり方は駄目ですかね?
いっそのことMain()の中をwhile(0)でその中でシーンごとフェーズごとに
したほうがよろしいですかね?
とりあえずDirectXに関しては本ばっかり読んでまして実践向きの
プログラムを打ててないのが現状ですので皆様のご意見お伺いしたいと思っております。
よろしくお願い致します。
0248名前は開発中のものです。04/10/26 23:42:19ID:tYFSXHVI
>>247
30個以下でおさまるんなら気にすることないよ。
caseでやっちゃえ。
別にcaseが30個以上ならんでたって俺は汚いソースだとは思わないよ。
0249名前は開発中のものです。04/10/27 02:03:18ID:UtCyRkAq
関数ポインタを使いたい年頃なんだろう。
いまどきswitchは遅いから使うななんて時代じゃないよ。
0250名前は開発中のものです。04/10/27 06:32:21ID:+29GhM1T
Strategy/Stateパターンで一発解決の話題だな
0251名前は開発中のものです。04/10/27 07:54:41ID:nbK8e9UI
クラス図は同じだが、Stragegyは違うこと無いか?
0252名前は開発中のものです。04/10/27 08:39:28ID:FMveXgoq
Stragegy
0253名前は開発中のものです。04/10/27 10:06:58ID:PWqJpoL4
この場合はモロにstrategyの典型的な例だと思った
0254名前は開発中のものです。04/10/27 13:27:57ID:5HRuPo5E
>>231の使用言語はCだと思うが
0255名前は開発中のものです。04/10/27 16:33:53ID:9oFtDTE0
マリカーとかで対戦するとき画面分割があるじゃないですか、
そういった画面を2分割・4分割でする方法ありましたらご教授お願いします。
0256名前は開発中のものです。04/10/27 16:41:36ID:JuUZ9DIG
分割したいぶんだけ、一つ一つ描画すればいいだけだが、
いったい何が聞きたいのかわからん。
0257名前は開発中のものです。04/10/27 16:59:01ID:+3bc/5KM
ビューポート変更してレンダリング
0258名前は開発中のものです。04/10/27 21:26:48ID:0i+Z0zwN
例えば箱を(0,0,0)に表示させてカメラの位置を変えて4画面でしようと思ったら。
Clear→ビューポート設定→カメラ設定→箱描画→
    ビューポート設定→カメラ設定→箱描画→
    ビューポート設定→カメラ設定→箱描画→
    ビューポート設定→カメラ設定→箱描画→Present
でOK?ってことですかね?
試したんですけどなんか画面がちかちかする。
0259名前は開発中のものです。04/10/27 21:45:49ID:a4bSXtIv
>>258
勘だけど

Clear→ビューポート設定→カメラ設定→箱描画→
    ZBufferClear→ビューポート設定→カメラ設定→箱描画→
    ZBufferClear→ビューポート設定→カメラ設定→箱描画→
    ZBufferClear→ビューポート設定→カメラ設定→箱描画→Present

で上手くいっちゃったりして・・・?
0260名前は開発中のものです。04/10/27 21:58:34ID:+3bc/5KM
>>258
クリアの前に画面全体をビューポートに指定してる?
0261名前は開発中のものです。04/10/28 01:24:59ID:OT5JwdIV
>>258
Clear→ビューポート設定→カメラ設定→箱描画→ Present
    ビューポート設定→カメラ設定→箱描画→ Present
    ビューポート設定→カメラ設定→箱描画→ Present
    ビューポート設定→カメラ設定→箱描画→Present
になってないか?
0262名前は開発中のものです。04/10/28 09:51:31ID:tuc1m51K
>83>96
ノートっつても最低スペックは決めれるだろ
比較的最近のノートを対象にするならDirectX7の3Dうごくだろ
少し古くてもDirectX6くらいは動くはず
そのあたりのDirectXのバージョンのアルファブレンド機能を使うのはOKだろ
じゃなきゃGDI+
でも、GDI+がどのWindowsまでサポートしてるかはしらないなぁ
アセンブラでごりごりやるなら全画面でやらなければ結構高速なんじゃないか?
紙芝居ゲーなら背景とアルファブレンド途中の画像をレンダリングしておいて、
それを張り付けるだけならマシンに負荷かけずに見た目上クロスフェードできるし、高速にできる
ファイルサイズがでかくなるけど
まぁクライアントも幅広いPCを対象にいれたいってのに必死なんだろ
でもDirectX6くらい動くだろ...
0263名前は開発中のものです。04/10/28 16:32:29ID:PbnH20+p
テクスチャ読み込みの関数とかXファイル読み込み関数があるじゃないですか?
D3DXLoadMeshFromX・D3DXCreateTextureFromFileEx
データが大きくて読み込み時間が長いのでロード画面をつくりたいので
すが関数よんでも上の関数は処理は帰ってこないですよね。
ってことはロード画面はどうやって作ればいいんですかね?
0264名前は開発中のものです。04/10/28 16:40:35ID:zVW7O6Cy
directshowで画像取り込みのプログラムをしています。ってか卒研のテーマです。カメラからの画像のたれ
ながしはできますが一枚とるプログラムが完成しません。ビルドまではできるん
ですがActive movie windowを表示して5秒後くらいにwindowが真っ白になってフリーズ
します。回りにdirectX扱える人いなくてほんと困っています(担当の先生すら扱えないT_T)。誰か教えてください。
プログラムの流れは
ピンの列挙→main(本文)→フィルタグラフマネージャの作成→システムデバイス列挙子作成
→モニカの列挙→モニカをフィルタオブジェクトにバインド→フィルタを追加
→キャプチャビルドの作成→ファイルライタフィルタの設定→サンプルグラバの生成
→メディアタイプの設定→フィルタグラフの追加→サンプルグラバの接続
→グラバのモードを適切に設定→ファイルへ出力→キャプチャ開始→
→サイズの取得→一枚キャプチャ→バッファ取得→解放
どこが間違っているのかが分かりません。分かる人教えてくれませんか?
0265名前は開発中のものです。04/10/28 17:07:19ID:OT5JwdIV
>>263
別スレッドにする。
>>264
どこでフリーズするか調べたら解決しないか?
0266名前は開発中のものです。04/10/28 19:57:49ID:UOWgg6zs
>>264
マルチうぜー
0267名前は開発中のものです。04/10/28 21:53:28ID:twiyxQZy
>>263
手を抜きたきゃ、ロード画面描画>表示されてからロード開始。
0268名前は開発中のものです。04/10/29 00:12:11ID:kuEKx5nX
Xファイルで描画しているモデルを半透明処理したいのですが
αブレンディングを有効にしても変化しません。
誰か助けて
0269名前は開発中のものです。04/10/29 02:01:48ID:IZmyQy1+
d3drs_srcblend, d3drs_destblend
027026404/10/29 12:40:33ID:MjPIaTHg
デバッガ使用しましたら無限ループしてるとこ発見しました。
do{
pSGrab->GetCurrentBuffer(&bufsize, NULL);
 }while(bufsize <= 0);
なぜここが無限ループしているか分かりません。bufsizeは
long *buffer = NULL;
long bufsize = 0;
て宣言しています。なぜ無限ループするかよろしければ教えてください。
0271名前は開発中のものです。04/10/29 12:48:36ID:fDNToCNY
>>270
マルチとは良い度胸だ
0272名前は開発中のものです。04/10/29 13:04:05ID:4Rug73gK
しかもマルチを指摘されてるのに
またのこのこ出てきて
謝るわけでもなければ悪びれた様子もなく
当然のごとく再び質問を投げるというナメた態度が気にいらない。
0273名前は開発中のものです。04/10/29 13:36:34ID:WuNn580y
構うから図に乗るんだよ
構う方が悪い
動物相手するときと同じ
0274名前は開発中のものです。04/10/29 16:02:05ID:VQCXStAA
>270
戻り値のチェックくらいしてから来てください
0275名前は開発中のものです。04/10/29 16:20:19ID:JcCKnjdk
>>270
卒論ってどこの大学だよ?
何勉強してんだ?
0276名前は開発中のものです。04/10/29 16:29:31ID:4Rug73gK
マルチ野郎は放置で。
0277名前は開発中のものです。04/10/29 19:05:56ID:SQEkFlVg
アニメ風っていうのかな?トゥーンシェーディングっていうんですかね。
あれはどうやってるんですかね?Xファイルで試したいんですが。
0278名前は開発中のものです。04/10/29 19:33:51ID:VQCXStAA
>277
法線と光源から頂点の明るさを求めるんだけど
最後の出力を明るさじゃなくてテクスチャ座標にしてやるだけ
シェーダかじればすぐできる
0279名前は開発中のものです。04/10/29 19:44:02ID:qQ8ZbLd9
>トゥーン
DQ8の影響かなw
0280名前は開発中のものです。04/10/29 19:55:27ID:QE0citKb
いや、村上ジョ)ry
0281名前は開発中のものです。04/10/29 20:06:13ID:VQCXStAA
>279
もう新しい技術ではないんだけどな
もう2年以上前から初心者向けDirectX書籍で取り扱ってた気がする
0282名前は開発中のものです。04/10/29 21:01:40ID:DDs92TJb
>>268
自分LightWaveからXFile作ってるけど
そのままじゃ、Diffuse設定されてなかったから
半透明に出来なかった。

XFileの内容は分からないけど
Diffuseが設定されているか見てみては?

"ちゃんと確認した"なら
1,CloneMeshFVFでD3DFVF_DIFFUSE追加
2,GetVertexBuffer
3,lock
4,Diffuse設定
5,Unlock
6,Release

と、これで自分の奴は問題なく半透明
0283名前は開発中のものです。04/10/29 21:50:19ID:TXJdGA09
>>268 固定機能ならこんな感じで。
D3DCOLOR color = D3DCOLOR_ARGB( 128, 0, 0, 0 );
GetD3D()->SetRenderState( D3DRS_TEXTUREFACTOR, color );
GetD3D()->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
GetD3D()->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
// (描画)
GetD3D()->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
GetD3D()->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
0284名前は開発中のものです。04/10/29 23:14:48ID:ND0SckE9
固定シェーダなんて使ってると馬鹿になるぞw
0285名前は開発中のものです。04/10/29 23:25:44ID:5GE6K9fH
>固定シェーダ
たしかにそんな存在しないものが使えるのは馬鹿くらいだろう。
>>284みたいな。
0286名前は開発中のものです。04/10/29 23:30:00ID:JuSlatAL
馬鹿な284がいるスレはこちらですか?
0287名前は開発中のものです。04/10/29 23:31:58ID:UD9l+DIN
はい、こちらです。
0288名前は開発中のものです。04/10/29 23:36:19ID:ND0SckE9
>>285-287
自作自演ご苦労w
でもね、絶対後悔するから素直にシェーダ組んだ方がいいよw
テクスチャ貼って、適当に色が付けれて、αが効いてりゃいいなら絶対にそっちの方がいい。
0289名前は開発中のものです。04/10/29 23:42:56ID:UD9l+DIN
なんで?
029028304/10/29 23:47:05ID:TXJdGA09
固定機能は暗黙の制約がいろいろあって
トラブルの元だからね。
…公で固定機能に言及するときは「シェーダの方がベター」
みたいな予防線が必須みたいだね。
0291名前は開発中のものです。04/10/30 01:08:11ID:L54vnZuk
別に固定機能だって使えてりゃOKさ、予防線なんかいらないよ
環境も考えずにシェーダシェーダ言っている方が愚かしい
0292名前は開発中のものです。04/10/30 02:07:55ID:rvAsQg5z
>>291
はぁ?
実は、よくわかってないだろw
0293名前は開発中のものです。04/10/30 02:08:53ID:jSY+AD13
>環境も考えずにシェーダシェーダ言っている方が愚かしい
固定機能のみ、の環境なんて方が愚かしいと思えるけど…
環境を考えて…固定機能!となる環境が愚かしいw
今時固定機能が貧弱でも
頂点シェーダーVer1.1をソフトウェアで動かした方がマシな場合が多いでしょ。
0294名前は開発中のものです。04/10/30 03:24:45ID:KepR6urK
ピクセルシェーダ2が使える環境なら迷わずシェーダ使うけど
それ未満の環境だとシェーダなんぞめんどくさくて使いたくもないなぁ
というのが俺的な感想
0295名前は開発中のものです。04/10/30 03:33:24ID:mUcV7xYn
固定パイプよりバーテクスシェーダ使った方が早いのは間違いないのかね。
ハードウェア処理よりCPUでやるソフトウェアバーテクスシェーダのが速かったと言う話はちょっと聞いたことあるが。
0296名前は開発中のものです。04/10/30 03:43:37ID:rvAsQg5z
パーテックスシェーダ使えばサポートしてるPCでより快適に動いてくれるんだから問題ないだろ。
サポートしてなくたってそれなりに動くし。

問題は固定パイプ独特のくせだよ。
あの腐った構造見てると、ホント、イライラする。
固定パイプ特有の動き覚えなきゃいけないし、なんのためにもならない。
触っても今後に生きてこない。
0297名前は開発中のものです。04/10/30 03:56:46ID:KepR6urK
そこまでボロクソに言う必要はないと思うがなあ。
シェーダ使ったほうが直感的に作れるのは間違いないが。
固定パイプだって見事にできてると思うよ。

まあ294でも書いたが頂点シェーダなんぞどーでもいいから
とりあえずピクセルシェーダ2を使わせろと言いたいんだが
流石にPS2は対応環境が限られてくるから趣味プログラミングでしか使えないのが寂しい。
0298名前は開発中のものです。04/10/30 09:09:36ID:L54vnZuk
>>296
> サポートしてなくたってそれなりに動くし。
羨ましい発言だな
0299名前は開発中のものです。04/10/30 11:16:33ID:t2ydOg4Q
つまり固定を使っているFFXIの制作者達は馬鹿ばっかりと言いたいわけか。
0300名前は開発中のものです。04/10/30 11:46:48ID:Rvfypwzy
>>299
固定かどうかはわからないはずだけど。
どうやって調べたの?

つか、もし俺が作るなら、
スキニング使う時点でシェーダ使った方が楽ではあるね。
0301名前は開発中のものです。04/10/30 12:10:13ID:0mtjTHL8
頂点シェーダだけでも使用するというアプローチは場合によっては
アリかもしれないけど(スキニングとか)、ほとんどの場合、
主役はピクセルシェーダだからねぇ。
頂点シェーダだけでは半透明化すら困難っぽいし。

頂点シェーダをソフト処理しようと思ったら、デバイス生成時に
D3DCREATE_SOFTWARE_VERTEXPROCESSING とか指定しないといけないと思うけど、
例えばスキニングをする描画の時だけこれを効かせる(他の描画はハードで処理)
みたいなことは無理なのかな。
0302名前は開発中のものです。04/10/30 12:16:38ID:t2ydOg4Q
>>300
DirectX8.1が使われており、起動するためにビデオカードがHWTnLに対応している必用がある。
これはデバイスの作成に、D3DCREATE_HARDWARE_VERTEXPROCESSINGが利用されているから。
もしD3DCREATE_MIXED_VERTEXPROCESSINGなら、対応が無くてもそのまま起動する。
そして動作環境にGeForce2が含まれているので、D3DCREATE_HARDWARE_VERTEXPROCESSINGだと、
シェーダーを利用することは出来ない。
0303名前は開発中のものです。04/10/30 12:18:36ID:t2ydOg4Q
>>301
D3DCREATE_MIXED_VERTEXPROCESSINGにしておけば、必要に応じて切り替えられる。
030430104/10/30 12:22:25ID:0mtjTHL8
>>303 なるほど、MIXEDってそういう用途があるんだね。サンクス。
0305名前は開発中のものです。04/10/30 13:18:45ID:Rvfypwzy
>>302
GeForce2でも頂点シェーダは動いちゃうよ。
試したグラボはGeForce2GTS。
このグラボでバンプ+スキニングまで動作することは確認済み。
あと、Radeon7500あたりでも頂点シェーダが動くことは確認してるけど。

でもってこの環境のときはD3DCREATE_HARDWARE_VERTEXPROCESSINGって
設定してもソフトウェアの方にしてもあんまり動作は変わらなかった気がする。(良く覚えてない)

ただ、動くことは確認済み。
設定によって実行できないとかそういうのは無かった。
0306名前は開発中のものです。04/10/30 15:01:56ID:/qUGiOsr
DirectX8の頃にGeForce2UltraでSDKのサンプルを試したときは、
頂点シェーダのサンプルは動いてくれなかった記憶がある。
バンプマップも動かなかった。
0307名前は開発中のものです。04/10/30 16:10:50ID:mUcV7xYn
おまいらFF11がいつ移植されたか考えて発言してるのかと。
DX9.0以降になってMSやドライバ屋が頑張ったから動くんじゃねーかよ。
0308名前は開発中のものです。04/10/30 17:41:06ID:RxrJRkTb
>>306
それってSkinnedMeshのサンプルでVertexShaderの項目を
選択しても動かなかったってこと?

そうだったかなぁ・・・。
できたような気がするんだけど・・・。
0309名前は開発中のものです。04/10/30 21:00:42ID:nPx1jkuo
今の不十分なHLSLコンパイラで
それにあわせてセコセコ作るのも馬鹿臭かったり
0310名前は開発中のものです。04/11/01 06:33:35ID:FOGq0xrq
>>306
バンプはVoodoo3でも動いた記憶が・・・・
0311名前は開発中のものです。04/11/02 00:33:20ID:EerLF66H
ふと思ったんだが。

DirectXでフルスクリーンゲーム作って、プレイする人のディスプレイ解像度が制作側のディスプレイ解像度と違ってたら
どうなるんだ?
プログラム側でディスプレイ解像度設定できるけれど、最近、なんかTVチューナ付きのディスプレイとかで、
ワイドテレビ並に横長なディスプレイあるじゃん?あれだと横に伸びたゲーム画面になっちまうのか?
0312名前は開発中のものです。04/11/02 00:35:41ID:MduyxuRA
ttp://www.c3.club.kyutech.ac.jp/~sukiyaki/dir/tex
ここの方法で暗号化したテクスチャを読み込んだんですが、
エラーは出ないのにテクスチャが表示されません。

LPDIRECT3DTEXTURE9 lpD3DTexture = NULL;

char *pBuffer;
FILE *fp = fopen("number.suk","rb");
fseek(fp,0,SEEK_END);
int size = ftell(fp);
pBuffer = new char[size];
fseek(fp,0,SEEK_SET);
fread((void *)pBuffer,sizeof(char),size,fp);

for(int i = 0; i < size; i++)
{
pBuffer[i] = pBuffer[i] - 100;
}

fclose(fp);
D3DXCreateTextureFromFileInMemory(g_pd3ddevice,pBuffer,size,&lpD3DTexture);
delete []pBuffer;
0313名前は開発中のものです。04/11/02 01:04:03ID:acfl8bcp
それは難儀でしたね。





で?

質問なのか、サイトに対するイチャモンなのか
どっちだ?(w

質問と勝手に解釈して
俺の所はテクスチャやってないけど
XFile暗号化でそのサイトから拝借したけど
動いてるよ?

暗号化が悪いか、そもそも表示事態が悪いのか
0314名前は開発中のものです。04/11/02 01:52:11ID:Ze/zvaHT
質問でした。サイトに対するイチャモンとかではないです。
すみません、初心者なのです。
暗号化はできているんですよ。解読もできるんですが、
それをテクスチャに使おうとすると、なぜか表示できないという事態に。
どうかアドバイスのほどをよろすくお願いします。
0315名前は開発中のものです。04/11/02 02:11:01ID:6Gg50jmD
>>314
とりあえず暗号化を止める。
しかるべき時期が来れば暗号化など自前でできるようになるから。
0316名前は開発中のものです。04/11/02 02:15:46ID:Ze/zvaHT
>>315
そうすか。それも考えたんですが、
やっぱり早いうちにできたほうがいいのかなと思っていました。
とりあえず暗号化はやめて、他のことします。
サンクスです。やっと寝れそうです。
0317名前は開発中のものです。04/11/02 13:03:43ID:igJv3K2M
>>312
本当に解読できているか保存して確かめてみては?
D3DXSaveTextureToFile("Test.bmp",D3DXIFF_BMP,pTexture,NULL);
031831204/11/02 17:08:22ID:m+LH2PV3
暗号化が間違っていました・・・。暗号化のところをもう一度
コピペしたらできました。どうやら前のやつは知らないうちにいじってたみたいです。
本当に申し訳ないです。ご迷惑をおかけしました。
今度からは、自分であらゆる方法を試してどうしてもできないというときに
ここに質問に来ます。
   ||
 ∧||∧
( / ⌒ヽ <スミマセン…
 | |   | 
 ∪ / ノ
  | || 
  ∪∪
   ;
 -━━-
0319名前は開発中のものです。04/11/02 20:13:27ID:RJStv4O0
>>311
想定する解像度がサポートしていなければ実行できない。
サポートされていればその解像度になる。

とりあえず。
WindowsXPが載っているPCなら640X480と800X600が
サポートされていることは保障されている。(はずw)

色数については16Bitか32BitになるがノートPCに関しては
16Bitしかサポートされていないものも結構あるが、
多少汚くなる程度だから気にスンナ。
でもαやカラーキーのしきい値などには注意!(気ぃ抜いてると黒出るよ黒w)
グラボによってはあきらめが肝心w
0320名前は開発中のものです。04/11/03 01:47:41ID:jPnr5Ln+
まぁ正しくは使用できる解像度を列挙してユーザに選ばせればいいと思う
よく市販のゲームではやってると思うけど
>311は横に伸びる心配をしてるけど
D3DXMatrixPerspectiveFovLH(RH)で行列を作るときに
引数のAspect ( [in] アスペクト比。 ビュー空間の高さを幅で除算した値として定義される。)
これを正しく設定していれば問題ないかと
ゲームによっては(FPSなんかで)横が圧倒的に広いと有利すぎると思ったらSetViewportで制限してしまえばいいのでは?

漏れはそんなに多くの環境で試したことがないのでこれくらいしか思いつかない

でも趣味とかでやってると面倒くさくて640x480とか800x600固定で作ってしまうな
ちゃんと公開するのはそこらあたりもきちんとやったほうがいいんだろうな
032131904/11/03 07:58:44ID:ej0+5RZs
すまん。よくよまないでアホなレスを返してしまったw
俺もアスペクト比をどうにかすればいけると思う。
0322名前は開発中のものです。04/11/04 00:29:07ID:tMK7EP+d
みんな文字描画ってどうやってるの?
Text3Dのサンプルを使って日本語フォントを使うと
変な点々が出るじゃないですか。
アレってどうにかならないものですか?
0323名前は開発中のものです。04/11/04 01:10:27ID:joRqK5+g
普段は英数字しか使わないから文字テクスチャを作ってスプライトで表示。
日本語フォントを表示するのも書いたことあるが普通どうするか知らんから、以下自己流。

大きめのD3DUSAGE_DYNAMICなテクスチャを用意。
文字をGetGlyphOutlineとかでテクスチャに展開しつつスプライトで描画するが、
既に展開した文字に関してはキャッシュの要領で展開する必要がない。
そのうちテクスチャの空きが無くなるからLRUの法則でキャッシュから消去。
案外1000文字もあればいけるもんで、1024文字=2^10=2^5*2^5。
16*16サイズなら512*512の大きさのテクスチャで1024文字いけることになる。
アルファ値のみだからA8フォーマットでよくて必要なメモリ量は256kb。

あまり日本語フォントにお世話になることないけど技術自体には興味があるので
もっと上手いやり方あるなら俺も教えてほしいな。
0324名前は開発中のものです。04/11/04 02:46:08ID:H7p1c/Cq
>>323
読んでたら私も挑戦したくなってきました。

その方法は、プロポーショナルも考慮してますか?
あと、LRUのキャッシュ検索はどうやってますか?
0325名前は開発中のものです。04/11/04 06:54:59ID:joRqK5+g
GetGlyphOutlineで文字幅も取得できるのでプロポーショナルもできました。
文字セットの幅の最大サイズをTEXTMETRICで取得してバッファに書くときにそれを使います。

実は指摘されて思い出したんですがLRUがアレでした。メモリを相当に食います。
struct List {
 WORD Next;
 WORD Back;
 WORD TexPos;
};
線形探索でO(N)は流石に遅くなりそうなので、O(1)で済むように2^16個も用意してMTFしてました。
O(1)でなくてもO(logN)程度で十分そうだし木構造あたりを使えばメモリ節約できるのかな。
あと動的ハフマン圧縮とかで使われるような使用頻度更新のがLRUよりもいいかもー
なんてことも考えつつも、結局日本語を使う機会が無いので、考えるだけで終わったことも思い出した。
0326名前は開発中のものです。04/11/04 10:00:30ID:yiF2yfrK
>>323
実際そんな感じで作って使ってるよ。
文字の使用頻度にかなりの偏りがあるから
頻度の高い文字がリストの先頭の方にきてれば検索は線形でも十分動くよ。
たまに頻度でソートしてやるとかしたら良いのかもしれないね。やってないけど。

最強のキャッシュを作ろうと思って
どこかに日本語文字の使用頻度データはないかなと探してみたりもしたけど
めんどくなったんでやめました。
0327名前は開発中のものです。04/11/04 15:16:11ID:0HCGsWdn
ACBなら26だけど50音に漢字を加えた状態は数が多すぎる。
文章によって使用頻度はかなり偏ると思うよ。
漢字変換のように使った奴を上にするやり方でいいんでない?
0328名前は開発中のものです。04/11/04 15:17:26ID:0HCGsWdn
ってよく見たら、同じことが書いてあるな。よく見てなかった。スンマソン
0329名前は開発中のものです。04/11/04 17:35:47ID:m2RoPb1N
summer2003でDrawTextでテキストを表示しているんですが、
なぜか↓のようになって表示できません。
ttp://haiiro.info/up/file/1480.png
どなたか時間のある方でよろしいので、
どうすればいいか教えてください。
0330名前は開発中のものです。04/11/04 18:12:49ID:iKq3egpe
何かバックバッファクリアしてないときの画像に似てるなあ
033132904/11/04 18:45:30ID:m2RoPb1N
ttp://haiiro.info/up/file/1483.zip
一応ファイルうpします。ていうか某サイトのそのまんまコピペなんですけど。
俺のパソコンがおかしいのだろうか。
0332名前は開発中のものです。04/11/04 18:56:50ID:iKq3egpe
普通に表示されるんですけど…
033332904/11/04 19:07:31ID:m2RoPb1N
やっぱりか!俺のパソコンがおかしいんだ!チクショーーー!
セットアップしなおそうかな・・・・・・・・・
0334名前は開発中のものです。04/11/04 19:08:36ID:IWw34A11
自分も普通に表示されました
033532904/11/04 20:06:51ID:+LLuMTuu
うむ、これは確実に俺のやつがおかしいな。
いまから再セットアップするけど、
これで直らなかったら正直へこむ。
0336名前は開発中のものです。04/11/04 20:51:47ID:zLNGbszd
>>329 もしかしてWindows2000?
■ このスレッドは過去ログ倉庫に格納されています