■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

【C++】 DirectX初心者質問スレ Part2【C++】
501 名前:498 :04/12/27 21:59:49
>>499
チュートリアルは全部やりました。
WMP10SDKの視覚エフェクトのチュートリアルにはDXを利用した描写がなく、
デバイスコンテキストを利用した描写方法しかのってないのです。


502 名前:デフォルトの名無しさん :04/12/27 22:03:00
ですからCの基礎から勉強しなおしてください。
次はDXのSDKチュートリアルをやってください。

503 名前:デフォルトの名無しさん :04/12/27 22:05:34
>>501
デバイスの作成すら出来ない時点で、チュートリアルが正しく理解できていません。
四の五の言わずに言われたことをやってください。
あなたに余計なことを発言する権利はありません。

504 名前:デフォルトの名無しさん :04/12/27 22:21:30
>>503,502
わからないなら口だすなて

>>498
ウィンドウハンドルの取得方法が間違ってる。
そのメソッドじゃないよ。

505 名前:デフォルトの名無しさん :04/12/27 22:46:41
>>504
どもです。
RenderWindowed内で取得するとうまくいきました。

506 名前:デフォルトの名無しさん :04/12/27 22:59:52
他の方への御礼を忘れてますよ。

507 名前:デフォルトの名無しさん :04/12/27 23:02:51
極悪非道のageブラザーズ
漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J

508 名前:デフォルトの名無しさん :04/12/27 23:11:07
てめぇの不備を指摘されたり都合の悪い事を言われた回答者は無視。
甘い顔でオムツ変えまでしてくれるような回答者だけにレス。
氏ね糞野郎。ほんとうにこういう中身のない上っ面野郎って氏んで欲しい。
こんな馬鹿に「どもです」とか言われたいがために
糞質問に答えてしまう馬鹿回答者も消えて欲しい。

509 名前:デフォルトの名無しさん :04/12/27 23:13:05
もちつけって

510 名前:デフォルトの名無しさん :04/12/27 23:19:17
>>498-509
よくできたネタだな。

511 名前:デフォルトの名無しさん :04/12/28 02:36:59
というかhWndってグローバルだと何か問題があるの?
クラス化したってパブリックにするでしょ?
なんでいちいち取得する必要があるの?

つーか結果的にDirectXじゃないでしょ?
そういう時はハンドル取得できてるかどうか確認しろよ基本だろ
だから基礎からって言う人がいたんだよ

512 名前:デフォルトの名無しさん :04/12/28 02:44:38
>>511
>>509

513 名前:デフォルトの名無しさん :04/12/28 14:36:29
>>511
なんか外しまくってるぞ。
もちつきなさい。

514 名前:デフォルトの名無しさん :04/12/29 03:06:08
鏡見て発言しないか?
顔が真っ赤になってることに気づこう

515 名前:デフォルトの名無しさん :04/12/29 12:46:24
つうかDirectXとWinAPIを切り離して考えろってのもなー
便宜上線引きしてあるだけであって、どっちも同じだろ。

516 名前:デフォルトの名無しさん :04/12/29 12:55:11
>>便宜上線引きしてあるだけであって、どっちも同じだろ。


517 名前:デフォルトの名無しさん :04/12/29 23:02:21
IGraphBuilderを別のスレッドで作って
その中でIVideoWindow2で画面表示までやりたいんですけど
具体的にはどのようなコードを書くのさ?

518 名前:デフォルトの名無しさん :05/01/01 02:53:51
水面にオブジェクトを写り込ませて波紋を表現したいのですが

面対称のオブジェクトをテクスチャにレンダリング→
テクスチャを水面オブジェクトに投影(カメラマッピング?)
→バンプマップをかける
というアプローチで合ってますでしょうか?

519 名前:デフォルトの名無しさん :05/01/01 04:28:00
アプローチが思いつくなら、なんでそれを試さないかな?
試してうまくいかなくての質問ならまだ判るんだけど。

520 名前:デフォルトの名無しさん :05/01/01 10:51:18
朝晩の寒さが身に沁みる季節になってまいりましたが、いかがお過ごしでしょうか。
初めてお目にかかります。こちらにお世話になってるAの母です。

Aはこちらのダイレクティング・ペケなるものが大好きなようで、毎日毎日学校から帰ってくるなり
パソコンのスイッチを入れては、夜遅くまでガタガタやっているようです。
つい先だってはマグニチュード9.9の地震まで起きました。芸術点です。
それだけダイレクティング・ペケが素敵なところということでしょうし、娘も楽しそうにしているので
特に問題とは思っておりませんでした。
しかし、HALを「ハル」と読みだすようになってしまい、先日生まれてはじめてハルノートを使用することに。
そして、もうすぐ入試を控えている身であるにも関わらず、ダイレクティング・ペケにのめりこんで
しまいまったく勉強もおぼつかない状態です。
私どもの都合で大変申し訳ないのですが、どうかHALをハルと読むのをやめるという
形にしてはいただけないでしょうか。
コーデル・ハルみたいですげぇムカつきます。
勿論、入試が終わるまでの期間で結構ですので、どうぞよろしくお願いします。

521 名前:デフォルトの名無しさん :05/01/01 11:56:21
>>519
締め切りまで時間がないので簡単な方法がないか
お聞きしたかったんです。
けっこうありがちなエフェクトなのでもっと
エレガントな方法があるのではないかと思いまして・・・。

522 名前:デフォルトの名無しさん :05/01/01 12:11:59
すでに9時間が経過しているが、自分で試すよりここで聞く方が本当に早いのか、
よく考えてみると良い。

523 名前:デフォルトの名無しさん :05/01/01 20:00:51
たしかに、初詣など行かずに作っていれば今頃
できてたかもしれません。ありがとうございました。

524 名前:デフォルトの名無しさん :05/01/03 22:05:37
頂点シェーダについて尋ねたい。
D3DVERTEXELEMENT9で頂点宣言を行うが、オフセットは自分で
計算しないとならないのが面倒くさい。頂点構造体から半自動的に
オフセットを定義する方法はないのだろうか。

525 名前:デフォルトの名無しさん :05/01/03 23:25:15
>D3DVERTEXELEMENT9で頂点宣言を行うが
行なわない、行なわない

>オフセットは自分で計算しないとならないのが面倒くさい。
何のオフセットを、何処でだ?

>頂点構造体から半自動的にオフセットを定義する方法
D3DVERTEXELEMENT9で頂点宣言を行うと思ってるから思いつかないんじゃないの…

以上があってるか間違ってるかの問題はさておき
そのオフセットとやらは、使用する直前で決まる動的なサイズなの?
違うと思うんだけど…

#define

って知ってる?(これを使用する問題なのかもさておき)
それとも構造体を書いた、そのサイズの高々数バイトを暗算して
defineする手間を言ってるの?

ともかく、もっと具体的に

526 名前:デフォルトの名無しさん :05/01/03 23:44:44
>>524
D3DVERTEXELEMENT9 g_decl[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};
要はこれの 0,12,24をハードコードせず自動的にってことだよね。
し ら ん 。

527 名前:デフォルトの名無しさん :05/01/04 00:28:23
>>525
分かってないならレスするな。ヘルプで「頂点宣言」を検索してみろ。
defineとか筋違いなこと言ってんじゃねえ。

>>526
そう、それ。やっぱ手動か。

528 名前:デフォルトの名無しさん :05/01/04 00:30:03
コード打つのが面倒くさいってのと同じレベルだな

529 名前:デフォルトの名無しさん :05/01/04 00:31:27
>>527
単純に動的に代入しちゃいけないの?

530 名前:デフォルトの名無しさん :05/01/04 00:37:03
半自動
D3DDECLTYPE_FLOAT3なら
sizeof(float) * 3

www

531 名前:デフォルトの名無しさん :05/01/04 00:41:02
#define A 4
#define B 8
#define C 12
#define D 16
.
.
.

以下お好きなだけどうぞ

532 名前:デフォルトの名無しさん :05/01/04 00:42:33
>>528
計算間違いしたらイヤだろ。それに頂点要素を後から追加するときに
オフセット計算しなおしになったらめんどくさいんだよ。

>>529
動的代入したいって話なんだよ。

>>530
それは今やっている方法だ。問題は頂点構造体に要素を追加したい場合に
任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。

533 名前:デフォルトの名無しさん :05/01/04 00:44:31
>>532
今どうやってるって? 計算できているなら動的に代入できるんでないの?

534 名前:デフォルトの名無しさん :05/01/04 00:45:07
>>531
分かってないくせにレスつけて気取ってんじゃねえ。
t-potでも100回読み直してから出直してこい。

535 名前:デフォルトの名無しさん :05/01/04 00:47:43
>>533
頂点構造体のメンバのオフセット位置を計算しないとならない。
構造体メンバの先頭からのバイト数を知るための式があると楽なんだが。

536 名前:デフォルトの名無しさん :05/01/04 00:49:26
頂点宣言ってD3DVERTEXELEMENT9構造体の配列で宣言するんじゃなかった?
8の頃もDWORDの配列で宣言しててDWORDじゃ宣言してないと思ったけど?
D3DVERTEXELEMENT9構造体、単体で頂点宣言って言うの?
頂点要素が一つでもD3DDECL_END()で終わる配列でしょ…

細かい事だが、質問者で、日本語の不備(これの事)を指摘されて
それを分ってないって言うならね…

537 名前:デフォルトの名無しさん :05/01/04 00:55:08
そもそも、頂点宣言はD3DVERTEXELEMENT9で一つでやる必要がない
それがDX9での売りだろ
頂点ストリームだけのD3DVERTEXELEMENT9構造体
法線ストリームだけのD3DVERTEXELEMENT9構造体
頂点カラーストリームだけのD3DVERTEXELEMENT9構造体
UVストリームだけのD3DVERTEXELEMENT9構造体

それらを組み合わせて使える(シェーダーだけどな)
t-potのサイト名を出して、さも自分は理解してると言わんばかりなんだから
知ってるんだろw


538 名前:デフォルトの名無しさん :05/01/04 00:59:33
>>536,537
頂点宣言という言葉はDirectX9ヘルプに書いてあったのでそれを使っている。
どうも用語の使い方に曖昧さがあるか間違っているようなので、言い直す。

D3DVERTEXELEMENT9構造体のOffsetメンバを自動的に決定するための
簡易な方法はないだろうか。この場合、オーバーラップが無いものとする。

539 名前:デフォルトの名無しさん :05/01/04 01:04:52
お前が理解出来ないで安易に用語使って質問したんだろw

540 名前:デフォルトの名無しさん :05/01/04 01:05:02
もうどうでもいいや。手で計算するよ。
寝るよ、おやすみ。

541 名前:デフォルトの名無しさん :05/01/04 01:05:29
>>538
質問してるくせに随分と偉そうな物言いだな。

542 名前:デフォルトの名無しさん :05/01/04 01:06:01
>>539
その程度のレスしかつけられないなら自慢げにレスしてんじゃねえよ。

543 名前:デフォルトの名無しさん :05/01/04 01:07:34
あああ。すまん。申し訳ない。まったくもって勘違いしていた。
ここは初心者スレだったね。
質問場所を間違えたよ。今は反省している。
うん。おやすみ。

544 名前:デフォルトの名無しさん :05/01/04 01:09:37
冬休みだなぁ・・・

545 名前:デフォルトの名無しさん :05/01/04 01:15:04
>D3DVERTEXELEMENT9構造体のOffsetメンバを自動的に決定するための
>簡易な方法はないだろうか。

自動的に暗算できる程度の”算数”の学力を手にれる

546 名前:デフォルトの名無しさん :05/01/04 01:17:48
このアホが言うと通りに”頂点宣言”でヘルプを調べたが
しっかり

>D3DVERTEXELEMENT9 構造体の配列として表現される。
>配列の各要素で、1 つの頂点要素を記述する。

と書かれていました。


547 名前:デフォルトの名無しさん :05/01/04 01:18:18
つか、

D3DVERTEXELEMENT9 g_decl[] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 1, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 2, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
D3DDECL_END()
};

ってやって別のストリームで流せばオフセットなんて計算する必要ないんだよ。
ってそれはわかってる状態でわざわざオフセットを計算する方法を聞いてるってこと?

548 名前:デフォルトの名無しさん :05/01/04 01:20:12
t-potを網羅しておられるんだから
当然わかっていらっしゃるだろう。

失礼な事を言うものではない、547よ…

549 名前:デフォルトの名無しさん :05/01/04 01:24:15
構造体の先頭からのオフセットってことは、
(int)((char*)&hoge.tu - (char*)&hoge.x);
(int)((char*)&hoge.nx - (char*)&hoge.x);
みたいなことをやりたいってこと? 手で計算した方が早いだろ。

550 名前:420 :05/01/04 01:28:43
・・・ただいま(´・ω・`)また質問させてください。

Toruの(ttp://www.geocities.jp/toru_website/di/5.html) サンプルを自分のプログラムに組み込めました(433)。
動作(速度)が一定ではないのでフレームレートを出してみました。
ジョイパッドがない状態(又はDirectInputを入れる前)では30〜45fpsでした。
DirectInputでパッドを使うと何故か60fpsになります。
しかし重い処理と軽い処理を行き来するとだんだんfpsが落ちて40fps以下に下がってしまいます。
一応30fpsでも、0.5秒間60fpsで0.5秒間止まるというのを繰り返している感じです。
組み込んだ部分を絞っていくと、
hr = g_lpDIDevice->GetCapabilities( &g_diDevCaps );
の1行が原因ではないかと思われます。
コメントアウトしてもパッドは使えますが、フレームレートは30〜45fpsになります。
(日本語が下手でスマソ(´・ω・`))

つまり、
・どうしてGetCapabilities(?)を使うと60fpsになるのか。
└その後、毎秒の停止(空白)時間徐々に増えていくのは何故か。
・この1行以外の処理は全く同じで、今まで30〜45fpsだったのに60fpsで表示できるなら、60fpsを維持することができるのか。

MSDNを見ても『DirectInputDevice オブジェクトの能力を取得する』と書かれてますし、他の設定を弄っているわけでもなさそうですし。
何かお分かりの方がいればご助言お願いしますorz

551 名前:デフォルトの名無しさん :05/01/04 01:40:47
それならoffsetofマクロで事が足りそうな。

552 名前:デフォルトの名無しさん :05/01/04 02:05:42
>>524
各要素間に余分なブランクがなく詰まっていると仮定すれば
要素のサイズを D3DVERTEXELEMENT9 の Type メンバから求めていけば、
オフセットは求められるけど。例えばこんな感じか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/48.txt

553 名前:デフォルトの名無しさん :05/01/04 02:20:23
>問題は頂点構造体に要素を追加したい場合に
>任意の場所(つまり先頭とか中間)に追加するような場合、頂点宣言の
>オフセットを記述し直しになる。それがエレガントではないと言いたいのだ。

その理論だと、追加する事自体がエレガントではないと思わないのか?


554 名前:デフォルトの名無しさん :05/01/04 02:28:50
>>552
では、D3DVERTEXELEMENT9の配列の各要素を定義する時に
その定義途中の各要素に順にアクセスして、
合計のoffsetを計算する方法をご教授してください。

つまり、配列定義中の各要素の値の一部を決定するのに
その各要素をピックアップ出来るか?って事です。
お願いします。

555 名前:552 :05/01/04 02:38:52
>>554
すまんよくわからんけど、Offsetの合計なら上のソースの sum の値が
ずばりそれに当たるはずだけど。

556 名前:デフォルトの名無しさん :05/01/04 03:00:38
なんども聞くけど
どうして頂点ストリームを使わないでオフセットに拘るの?
もし、そうしなけりゃいけないような設計にしてしまったとかいうなら
早めに設計をみなおした方がいいよ。

557 名前:デフォルトの名無しさん :05/01/04 03:08:34
ともかく

プログラムは「めんどくさ回避」で進化してきた。
シェーダも3.0を迎えるにあたり「2.0ではめんどくさかったから3.0ではラクに」
結局これも「めんどくさ回避」なのだが


手 を 抜 い て い い と こ ろ と 悪 い と こ ろ が あ る


ことを理解していないセイガクが多すぎる。

「自分でやるべきところは面倒くさかろうが難しかろうが自分でやれ」

558 名前:デフォルトの名無しさん :05/01/04 03:10:06
>>555
それってD3DVERTEXELEMENT9の配列が定義終わってないと使えないでしょ?

かの御仁の要求は、面倒、計算ミスが心配、エレガントではない
と言った理由により、定義をする時点で求めたいと言った主旨でしょ?

559 名前:デフォルトの名無しさん :05/01/04 03:12:26
メールはちゃんと読みましょう
日本語を勉強しましょう

「C」つってんのに勝手に脳内で「C++」に置き換えんなや!
みてえな

560 名前:デフォルトの名無しさん :05/01/04 03:29:42
整理すると

D3DVERTEXELEMENT9 decl = {
{ 0, 0/*       この時点で" 0"が欲しい        */, ..../*略*/},
{ 0,12/*この時点で今までの要素を受けて自動(半)で"12"が欲しい*/, ..../*略*/},
{ 0,24/*この時点で今までの要素を受けて自動(半)で"24"が欲しい*/, ..../*略*/},
D3DDECL_END()
};

要は定数直書きが気に入らないって奴だろ

561 名前:デフォルトの名無しさん :05/01/04 03:41:29
>>558
なんか動的代入したい、とか書いてあったので勘違いしました。
定義の段階で求めようと思ったら、551さんの言うようにoffsetofマクロを
使うことになるのかな。
struct MyVertex
{
float x, y, z;
float nx, ny, nz;
float tx, ty;
};
D3DVERTEXELEMENT9 g_decl[] =
{
{ 0, offsetof(MyVertex, x), ...
};
中でstructを使えば多少みやすくなる…かな。
struct MyVertex
{
struct { float x, y, z; } Position;
struct { float nx, ny, nz; } Normal;
struct { float tx, ty; } Texture;
};
D3DVERTEXELEMENT9 g_decl[] =
{
{ 0, offsetof(MyVertex, Position), ...
};
エレガントからかけ離れていく悪寒。

562 名前:デフォルトの名無しさん :05/01/04 03:59:15
561を責める訳ではないが
12byteや4byte単位の足し算を面倒と言って、
しかも途中に違うストリームを挿入したら、以降は書き換えとか発生して面倒と言ってるんだから

その方法も面倒だし
頂点構造体の方も書き換えになって、意味ないじゃんと思う。

そもそも、任意の要素を追加していくタイプの配列で
最新の要素が、その今までの任意の要素に影響をうける場合
そのコードを書いている、その場で手動でコーディングがもっとも効率が良いと思うけど

そう考えられないなら、その内に究極的に言うと
変数の型を宣言するのは面倒です。コードからどう言った型で使っているか読み取って
プリコンパイル時か何かに、自動で型を認識してくれる方法はないですか?
とか言い出すのと同じレベルの”面倒”って奴だと思う

563 名前:デフォルトの名無しさん :05/01/04 03:59:26
こんなんやってみるとか・・・。

switch(decl[n*5+4]){
case D3DDECLUSAGE_POSITION:
case D3DDECLUSAGE_NORMAL:
  offset = offset + 4*3;
  break;
case D3DDECLUSAGE_TEXCOORD:
  offset = offset + 4*2;
  break;
}

decl[(n+1)*5 + 1] = offset;

564 名前:デフォルトの名無しさん :05/01/04 04:02:54
>>562
ここのオフセット指定に関しては
なんでDirectXの関数がオフセットを欲しがるのか個人的には謎なんだけど。
だって配列に設定されてる値から確実に求められるじゃん。
ここでどうしてオフセットを求めてくるのかわからん。

565 名前:デフォルトの名無しさん :05/01/04 04:36:57
推測だけど、ストリーム処理時のユーザーの自由度の為かと

typedef struct _VERTEX {
float x, y, z;
float tu, tv;
DWORD diffuse;
} VERTEX;

この頂点構造体で作られた頂点バッファの値を使い回して
テクスチャなしのポリゴン描画に流用しようとしたとして

D3DVERTEXELEMENT9の宣言時にテクスチャストリームを無くして
オフセットをテクスチャ分薦めた物を宣言して使用すれば
その頂点バッファを使い回し可能だとか…


566 名前:デフォルトの名無しさん :05/01/04 12:03:34
おはよう。昨晩のワタクシめの質問から色々意見が出たようで、
スレのにぎわいに貢献できたと自負しております。

>>552の方法はオレも考えた。それを実装しようと思っていたところだった。
手動でオフセット計算するにせよ、正しい値かどうかを確認するルーチンが
欲しいというのもある。

>>556
1.これまで単一ストリームでプログラムしていたので、その姿勢を引きずっていたため。
2.複数のストリームに対して個別に複数の頂点バッファを作成するのがイヤ。
3.一つの頂点バッファで複数のストリームを表現したい場合は、ストライドを
計算しないとならない。これってつまりオフセットそのもの。

ところでオフセット値なのだけれど、4とか12という固定値で決め打ち
しているソースが意外と多く見つかって、sizeof演算子を使っているほうが
少ないと感じた。型の幅はCPU/OS依存なので固定値にしてはならないと
昔習ったオレとしては気持ち悪いのだけれど、今時はこれでいいわけ?

567 名前:デフォルトの名無しさん :05/01/04 12:25:21
>型の幅はCPU/OS依存
んなわけないだろ。
コンパイラ依存。

568 名前:デフォルトの名無しさん :05/01/04 12:34:02
>>566
頂点ストリーム使ったことないでしょ?
俺が色々やってみた結果これが一番シンプルに組めるよ。

ストリーム0をPosition
ストリーム1をNormal
ストリーム2を〜以下略って設定していくだけですごく簡単だよ。
わずらわしいこと1つも無かったよ。
単一のストリームでやっちゃうと同じ位置情報の処理なのに
別ルーチンが必要になったりしてプログラムが大変なことになるでしょ?
そんなアホなことしてないで頂点ストリーム使えるようになりなよ。

よく調べもしないで見当違いな結論出して苦労してんのみっともないよ。

569 名前:デフォルトの名無しさん :05/01/04 12:55:17
>>567
失敬。その通り。

>>568
君の言うことを検討してみた。
頂点バッファが複数になることを懸念していたが、よくよく考えてみると
OpenGLのArray系での配列指定時には座標配列、法線配列など個別に
指定せざるを得ない。そのように考えれば複数ストリームもアリだな。

570 名前:デフォルトの名無しさん :05/01/04 13:35:47
俺の場合、SetPrivateDataでVertexBufferにD3DVERTEXELEMENT9配列要素そのものを関連付けしてるよ。
んで動的にIDirect3DVertexDeclaration9を作ってる。
これってDirectX9からCOMインターフェイスになったんだよなあ、これは改悪と思う。

571 名前:420=550 :05/01/04 17:29:45
賑わうのはいいけど激しく質問をスルーされた(´・ω・`)

572 名前:デフォルトの名無しさん :05/01/04 23:58:37
なんだなんだ、昨晩の勢いがウソのように静かになったな。
やはりオレが燃料を投下しないとダメなのか。罪な奴だなオレ様も。

HLSLでグローバル変数にセマンティクスを記述しても無視されるが、
敢えて記述する利点はなんだろう? MS公式本のソースコードには
セマンティクスが書いてあるグローバル変数と書いてないのと
混在しているが。

573 名前:デフォルトの名無しさん :05/01/05 00:51:28
>>550
そもそも機能追加してfpsが上がるプログラムが疑問

574 名前:420=550 :05/01/05 02:05:17
>>573
追加したところ(DirectInput関係)以外を削ってみてもやはりGetCapabilitiesを使うと60fpsから始まります。
もちろんループをしているところもfps表示に加え、画像の描画で負荷をかけても同様です。
fpsが上がる要因となる部分はこれしかないし、何が問題なのかとorz
ウインドウモードですがVC++とギコナビ以外特に負荷のかかることはやってませんし。
ちなみにGetCapabilitiesを使って60fps0.5s/停止0.5sまで処理がおかしくなると、
ウインドウを動かすとタイトルバーが透明になったり、閉じたあとIEも含めたアプリケーションの動作が鈍くなったりします。


575 名前:デフォルトの名無しさん :05/01/05 06:11:52
>>574
そりゃお前、そんなところみてるより他の部分の処理がおかしいって疑ったほうがいいんじゃねぇか。

576 名前:デフォルトの名無しさん :05/01/05 10:37:21
なんかDirectXとカードの相性で
GetCapabilities動かす->内部モード変更->今回の動きにベストマッチ ってかんじじゃないのか?
ほかのやつでも試してみなよ

577 名前:420=550 :05/01/05 14:06:49
>>575
だから他のところコメントアウトして削ったってorz
フレームレートの調整なんかやり方知らないから元々やってないし、Sleepは0だし・・・。

>>576
相性と言うか開発では9だけどグラボは8.1だからでしょうか
もう1台のPCはスペックに差がありすぎて常に61〜60fps(;´Д`) (グラボは9)

578 名前:デフォルトの名無しさん :05/01/06 19:08:22
質問させてください

IDirectInputDevice8::SetCooperativeLevelというか協調レベルについてです

HRESULT SetCooperativeLevel(HWND hwnd,DWORD dwFlags);
にて
hwnd:デバイスに関連付けられているウィンドウ ハンドル。このパラメータは、
このプロセスに属する最上位の有効なウィンドウ ハンドルでなければならない。
デバイスに関連付けられたウィンドウは、MicrosoftR DirectInputR デバイスの中でアクティブである間は、破棄してはならない。

とのことなのですが
メインウィンドウ1つでゲームオンリーなアプリの場合は
トップウィンドウ=hwnd
になりますが

ビューワーアプリなどでDirectXを使用する場合
DirectXのターゲットウィンドウは最上位のウィンドウでなく
WS_CHILD フラグのない子ウィンドウがターゲットウィンドウだったりします。

この子ウィンドウでDirectInputを有効にするにはどのようにすればよいのでしょうか?

※hwndに親hwndを渡せばS_OKは返しますが、dwFlagsがDISCL_FOREGROUNDの時は
 親ウィンドウにフォーカスがないと子ウィンドウでDirectInputが有効になりません。
 当然DISCL_BACKGROUNDであれば問題ないのですが
 あくまで今想定しているのはDISCL_FOREGROUND | DISCL_NONEXCLUSIVEという状況下での解決ということでお願いします

以上よろしくお願いします

579 名前:デフォルトの名無しさん :05/01/06 19:27:28
そういう場合
SetCooperativeLevel を親と子で2回呼ぶか
あるいはデバイス2個作るとかってやり方じゃないのかな
たぶん

580 名前:デフォルトの名無しさん :05/01/06 20:01:48
>>579
>SetCooperativeLevel を親と子で2回呼ぶか
これに関しては
hwndがプロセスに属する最上位の有効なウィンドウハンドルって限定されてるので
どこで呼んでもhwndには同じウィンドウハンドルを指定しなければならないので無理でした。
最上位でないハンドル、たとえば子ウィンドウのハンドルなどを指定すると
S_FALSEが返ってきます。

>デバイス2個作る
IDirectInput8::CreateDevice
には
IDirect3D9::CreateDevice のようにD3DPRESENT_PARAMETERSなどの
ウィンドウハンドルやターゲットを指定するようなパラメータがないのでやり方がわかりませんでした。
指定のしかたがあるのでしょうか?あれば教えてください〜


581 名前:デフォルトの名無しさん :05/01/12 17:52:00
質問です。
いわゆるモーションブラーなどの「視覚エフェクト」に関して詳しいページなどありませんでしょうか。
D3Dを使った2Dアクションを作っているのですが、やはりエフェクトが充実していないと
映えないようでして…。

いちおうモーションブラーくらいは自力実装しましたが、さらにステップアップするための参考物が欲しいしだいです。
よろしくお願いいたします。
書籍でも構いません。

582 名前:デフォルトの名無しさん :05/01/12 18:18:18
視覚エフェクトは、シェーダを使うならt-potの中の人の本が
サンプル色々あってよさそう。

583 名前:デフォルトの名無しさん :05/01/13 10:06:42
>>582
ありがとうございます。
その方のWebPageも丁寧でいいですね。
書籍も探してみます。

584 名前:デフォルトの名無しさん :05/01/13 14:12:49
三度すいません。>>581の中の人なのですが、
知り合いのマシンでシェーダをテストしてみたところ、対応していないものが多すぎるようです。

ハイエンド向けなら良いのですが、2Dアクションゲームでそれはちょっと…。
(シェーダ自体は面白そうなので個人では遊ばせてもらいますが)

シェーダに頼らないエフェクトについて、参考になるものもあればご教授いただけると幸いです。

585 名前:デフォルトの名無しさん :05/01/13 20:09:18
同じ処理をシェーダー使わずにやる

586 名前:デフォルトの名無しさん :05/01/14 16:30:08
DDSとPPMってどっちがいいの?

587 名前:デフォルトの名無しさん :05/01/14 17:16:08
1年でC++をマスターしつつDirectXをマスターって無謀ですか?
プログラムはVBちょこっととエクセル程度です。
ちなみにCGの原理と用語はほとんど知っています。
スレ違いでスミマセン・・・m(_ _)m

588 名前:デフォルトの名無しさん :05/01/14 17:21:51
>>587
あなたの努力しだいだけど一年あったらできるんじゃない?

589 名前:デフォルトの名無しさん :05/01/14 17:22:24
こんな質問してる時点で無理

590 名前:デフォルトの名無しさん :05/01/14 17:55:47
そもそもマスターという定義が曖昧すぎる。
喫茶店でも開くのか?

591 名前:デフォルトの名無しさん :05/01/14 20:05:12
VBちょこっと
がどの程度かにもよる

592 名前:デフォルトの名無しさん :05/01/14 20:34:18
よく「マスター」とか「極める」の言葉の程度を疑問に思ってる馬鹿がいるが、

マスターはマスターなのである。
それ以上でもそれ以下でもない。

マスターの一般的な意味合いが
「世界最高」なら「世界最高」

「とりあえず組むのに困らない」なら
「とりあえず組むのに困らない」

よくこんな程度が分からないでプログラムが出来るものだ
それとも出来ないのかも知れないが

593 名前:デフォルトの名無しさん :05/01/14 20:47:04
結局、文脈からマスターがどの程度か読み取れないと自分で言っており、
だから疑問が出るわけなのに、それすら理解できない>>592は、
プログラム以前に設計段階で破綻するだろう。

594 名前:デフォルトの名無しさん :05/01/14 21:25:51
1年 +20
マスター -10点
VBちょこっと -20点
CGの原理と用語 +5点
スレ違い -10点

計 -5点/100点

595 名前:デフォルトの名無しさん :05/01/14 21:27:24
図星だった

596 名前:デフォルトの名無しさん :05/01/14 22:28:22
先ずCを2ヶ月くらいで身に付けてから考えたら?

597 名前:デフォルトの名無しさん :05/01/14 22:35:10
DirectXなんて勉強してるやつらって、なにしてんの?
業界人はこんなところに書き込まないよ。どうせお前らオタクだろ。

598 名前:デフォルトの名無しさん :05/01/14 22:40:14
>>594
Error 計算結果が違います。

599 名前:デフォルトの名無しさん :05/01/14 23:40:55
>>594
やる気 +5点

600 名前:デフォルトの名無しさん :05/01/15 12:57:20
>>521
D3DXMatrixReflect()とD3DXMatrixShadow()使ったらでけました〜。
エクステンション便利杉。ありがとうマイクロソフトさん
と思ったら今度はテクスチャが
AddressU = Wrap;
AddressV = Wrap;
にしてるにも関わらず3回目からクランプになります。
下がピクセルシェーダ部分です。
float4 PS_BumpMapping ( VS_OUTPUT_POSCOLORTEX2 In ) : COLOR
{
float2 uv = tex2D( SampBump, In.Tex1 ).xy;
uv.x = uv.x * g_matBump._m00 + uv.y * g_matBump._m10;
uv.y = uv.x * g_matBump._m01 + uv.y * g_matBump._m11;
return tex2D( SampFilter, In.Tex0 + uv ) * In.Color;
}
ピクセルシェーダは1.4を使ってるんですが・・・。

601 名前:デフォルトの名無しさん :05/01/15 13:29:26
バージョン2.0使ってみたらできました。すいません。
ってか学校のPCでも動かなくなってしまったよ。
1.4で回避するほうほうはないですかね?

602 名前:デフォルトの名無しさん :05/01/15 13:52:45
>>587
まともに3Dのゲームが作れるようになるには2年は必要だね。

603 名前:デフォルトの名無しさん :05/01/15 13:55:23
>>602
そうだな。
でも、2年で一人前とは言えないまでも使える人間が育つこの業界は楽だなw

604 名前:デフォルトの名無しさん :05/01/16 00:09:23
そんな事だから35歳定年説がなくならないんですよ。

605 名前:デフォルトの名無しさん :05/01/16 01:12:34
プログラム勉強中の学生です。
DirectX8で2Dのライブラリ等を作って、次は3Dをやってみようとしています。
ただ、難しさは相当違う感じなんで、何か良い勉強法等あったら教えていただきたいです。
また、TWINTAIL LOVERS等を参考にしているのですが、他に良いサイトありましたら教えてください。
具体的ではない質問ですが、よろしくお願いします。

606 名前:デフォルトの名無しさん :05/01/16 01:24:04
>>605
DirectX によるゲームプログラミング入門 : 第 1 章 3D ゲームプログラムの基礎
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/

607 名前:デフォルトの名無しさん :05/01/16 01:29:50
テクスチャ使うときの定石みたいのありますか?
サイズとか、同じテクスチャをうまくつかいまわす?とか

608 名前:デフォルトの名無しさん :05/01/16 01:40:30
>>606
お早い返答ありがとうございます。
そのページを参考に勉強してみます。

609 名前:デフォルトの名無しさん :05/01/16 15:06:20
       /\___/ヽ                           l   
      /:::::::       \                  /\___/ヽ
     .|:::.   ''''''   ''''''  |                 /       :::::::\
      |::::.,(一),   、(一)|                |  ''''''   ''''''   .:::|
     .|::::::: ノ ,,ノ(、_, )ヽ、,, |               |(●),   、(●)、.::::|
      \:::::.ヽ`-=ニ=- ' /                |  ,,ノ(、_, )ヽ、,, .:::::::|
     /   `一`ニニ´-,ー´                  \ `-=ニ=- ' .:::::/
     /  | |   / |                       `ー`ニニ´-一´ヽ、
    /   | |  / | |                      /    _    l
    /   l | /  | |                     /  ̄`Y´   ヾ;/  |
__/    | ⊥_ーー | ⊥_ _____________,|    |    |´  ハ
   |  `ーヽl_l_l.} ヽl_l_l.}                       |    |    |-‐'i′l
  (、`ーー、ィ   } ̄`   ノ                       |__ |   _|   7'′
    `ー、、___/`"''−‐"       I            (   (  ̄ノ `ー-'′\
                     D @            ̄   ̄          \

610 名前:デフォルトの名無しさん :05/01/19 00:47:39
アンチェリ画像が綺麗に出ないんですが、良い方法ないですかね。
加算合成だと、色変わってしまうんでそれ以外でお願いします。

611 名前:デフォルトの名無しさん :05/01/19 23:16:39
>610
意味がわからん
「アンチェリ」ってアンチエイリアス(anti-alias)のこと?

612 名前:デフォルトの名無しさん :05/01/19 23:18:40
世の中では通用しない勝手な略称を平気で使う馬鹿は放っておけ。

613 名前:デフォルトの名無しさん :05/01/19 23:39:37
うぴょろ

614 名前:デフォルトの名無しさん :05/01/20 00:00:13
ちょっとageさせてもらいますね。

複数の画像を画面の上下に分けて別々に描画したいのですが、どういうやり方があるのでしょうか?
Drawで画像を描画して、Presentで画面の更新をしています。
普通に机と●と△の画像を描画して表示させると
 _____________
|  _________   |
|  \  ●   △   ●\  |
|  ||\             \|
|  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ |
|  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||   |
|     .||              ||  |こうなります。
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
自分がやりたいのは上下に分ける(これは左右に分けてますが)
  __________
 |____|____ |
 |   △  | ●   △|
 |      |       |
 | ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
 | ̄ ̄ ̄ ̄||| ̄ ̄ ̄ ̄|
 |        |||      | こういう感じです。
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

615 名前:デフォルトの名無しさん :05/01/20 00:04:36
Presentで出力範囲を設定しつつ二回描画。

616 名前:614 :05/01/20 00:10:31
>>615
ありがとうございます。

617 名前:デフォルトの名無しさん :05/01/20 00:41:41
具体的にはそれで
何がしたいのだろうか


618 名前:デフォルトの名無しさん :05/01/20 20:29:13
D3DXMatrixTransformation2D
のScaleCenterがうまく機能しないんだけど
ちゃんと動作ができている人いますか?

ScaleCenterの値をどんな値に変更しても
なぜか常に画像の0,0の位置から拡大に・・・

619 名前:デフォルトの名無しさん :05/01/20 22:18:28
SetViewportってのもあるぞい
Presentは一回ですむ

620 名前:デフォルトの名無しさん :05/01/21 09:37:47
>>617
対戦ロボゲーとかじゃないか?

621 名前:デフォルトの名無しさん :05/01/21 10:26:26
ちなみにSetViewportでは、同一画像を二回Drawしなければならないので効率が悪い。

622 名前:デフォルトの名無しさん :05/01/21 11:36:08
>618

誰か助けてください まじで。

623 名前:デフォルトの名無しさん :05/01/21 14:28:51
マルチポストする馬鹿を助けたいと思う人間は多くはあるまい。

624 名前:デフォルトの名無しさん :05/01/21 17:38:35
>>623 が馬鹿で単にわからないだけかと

625 名前:614 :05/01/21 17:46:04
>>619=621
ありがとうございます。

>>617>>620
対戦するゲームって大抵画面を分割するから、もし作るとしたらどうなるのかなと思って(・ω・)

Presentを2回する方法だと処理は余裕があるはずなのに動きが遅くなります(2分の1ぐらい)。
描画を2回やるだけなら問題ないのですが。
なのでSetViewportと言うのを調べて使ってみます。
>>621では効率が悪いと書いていますが、他にもあるのでしょうか。
やはり慣れるまではSetViewportを使って、それで処理落ちするようになったら他の方法を探したほうがいいのかな。

626 名前:デフォルトの名無しさん :05/01/21 18:07:43
垂直同期を待っているという落ちでは?

627 名前:614 :05/01/21 18:20:32
あれ、Presentってそういう機能(?)があるんですか。
CPUフルでやってるのかと(´・ω・`)

628 名前:デフォルトの名無しさん :05/01/21 20:29:00
デフォだと勝手に待ってくれる

629 名前:デフォルトの名無しさん :05/01/21 20:53:28
>>618
取り敢えずその辺のソースをさらしてみ。

630 名前:デフォルトの名無しさん :05/01/21 21:26:01
>>629

// トランスフォーム行列を作る
D3DXVECTOR2 Translation( x, y );
D3DXMATRIX mat;
D3DXMatrixTransformation2D( &mat, &( pInfo->ScalingCenter ), 0,
    &( pInfo->scale ), &( pInfo->RotationCenter ), pInfo->angle, &Translation );

// トンランスフォームをセットする
m_pSprite->SetTransform( &mat );

// 描画位置
D3DXVECTOR3 Position( 0, 0, z );

// 描画
hr = m_pSprite->Draw( pTexture, &(pInfo->rect), 0, &Position, pInfo->color );
if ( FAILED( hr ) ) {
    return false;
}

こんな感じです。
x, y には描画する座標が入ります。
pInfoとは 各情報が格納されている構造のインスタンスです。
( pInfo->ScalingCenter ) と書かれている部分を &D3DXVECTOR2( 64, 64 ) という風に
数値を直接書いても、全く変わりませんでした。

631 名前:デフォルトの名無しさん :05/01/21 21:36:29
>>630

D3DXSpriteの場合はDrawの引数のpCenterに
ScalingCenterを自己解決しました。

自作Spriteも修正中

632 名前:631 :05/01/21 21:44:03
D3DXSpriteのDrawに与えたScalingCenterはどのような処理を行っているんでしょうか?
自作Spriteは4角形ポリゴンで表示しているため、座標にどのような修正をしたらいいのかが
いまいち分かりません。

処理は
D3DXMatrixTransformation2D で行列をつくって、それを反映させて、
ローカル座標とUV座標を入力、色を入力した4角形座標で
ポリゴンを表示するといった流れでやっています。

633 名前:デフォルトの名無しさん :05/01/21 21:57:01
>>632

ローカル座標 から 中心座標の値をあらかじめ引いておくことで
ちゃんと中心座標から拡大されるようになりました。

ここにソースを載せて改めて自分で見て、気づいたことだったので
>>630 さんに感謝してます。

ありがとうございました。


634 名前:デフォルトの名無しさん :05/01/21 21:57:56
>>633

>>630さん じゃなくて >>629 さんでした

635 名前:デフォルトの名無しさん :05/01/24 06:09:20
DirectSoundでストリーム再生する場合は別スレッドを作ってそこでデータを補充するのが定石だと思うのですが、
メインのスレッドでデータを補充してストリーム再生を実現させるためにはどのようにすればいいでしょうか?

636 名前:デフォルトの名無しさん :05/01/24 07:54:37
>>635
処理落ちを考慮して先読みするだけ。
例えば常に2秒先まで補充しておけば問題ない。

637 名前:420 :05/01/24 18:51:50
スマソ、またまた帰ってきますた(´・ω・`)
DirectInputでゲームパッドを2つ以上で使いたい場合、どこをどうすればいいのでしょうか?
PC[USB]─[コンバーター]─[1P]
              └─[2P]
こんな感じに分かれてて、現在1P側にさしたコントローラーだけに反応します。
1P側を差さずに2P側を差しても反応しなかったので、現状のプログラムは1P側のコントローラの情報を取得していると思います。
検索をしたり本を調べてみましたが2Pのことは書かれてませんでした。
出来れば以下のどちらかで、ここをこうしろ!という点がありましたら助言お願いしますorz
ttp://www.geocities.jp/toru_website/di/index.html
Samples\C++\DirectInput\Joystick


638 名前:デフォルトの名無しさん :05/01/24 19:54:24
http://www.microsoft.com/japan/msdn/library/ja/DirectX9_c/directx/input/tuts/tut3/tutorial3usingjoystick.asp?frame=true

639 名前:420 :05/01/24 23:16:58
2Pが繋がらなかったのは元々コントロールパネルでも表示されていなかったのが原因なようです。
>>638
少なくともmsdnは見てますよorz
接続されているジョイパッド1つだけ(1P優先)なら出来ますが、2つ以上接続した際にどうやってコントローラーを入れ替えるのかが分かりません。
変数名1と同じ動作を変数名2にさせてみたら2つ目のコントローラーのデータが取得できるかと思ったらやっぱり1Pでした・・・トポステ..

640 名前:デフォルトの名無しさん :05/01/25 00:36:26
>>639
2つはやったことないが
>>638に書いてある通り
EnumDevicesでスティックを列挙して
コールバック関数でデバイス作ればできるんじゃないのか?
2つ接続したら2回呼ばれるだろうから
そのとき同じLPDIRECTINPUTDEVICEにポインタ入れないようにして

MSDN見てるっていうなら>>638のやり方はやったのか?

641 名前:デフォルトの名無しさん :05/01/25 00:39:30
試しはせん!試しはせんぞ!

642 名前:420 :05/01/25 01:00:07
>>640
SDKのサンプル(Samples\C++\DirectInput\Joystick)でもやっています。
g_pJoystickと同じことをg_pJoystick2でも(ry
もちろんjsもjs2が同じことをしています。
2Pの十字キー(左スティック)の情報が入っていると思っていたjs2.lX  js2.lYは1Pですたorz


643 名前:デフォルトの名無しさん :05/01/25 01:22:40
>>420
質問。
EnumDevicesで指定したコールバック関数は何回呼ばれてる?

644 名前:640 :05/01/25 02:19:23
>>642
はっきり言って書き方からして理解してなさそうな感じがするんだが
自分もそのうちやるかもしれんので試してみた
↓こんな感じでちゃんと2つ取得できた
これでわからんならヘルプなりサイトなりでDirectInput自体をちゃんと理解しれ

LPDIRECTINPUT8 g_pDInput;
LPDIRECTINPUTDEVICE8 g_pDIDevice[2];
INT DeviceCount = 0;

g_pDInput->EnumDevices(DI8DEVCLASS_GAMECTRL,DIEnumDevicesCallback,&DeviceCount,DIEDFL_ALLDEVICES);

BOOL CALLBACK DIEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi,LPVOID DeviceCount)
{
g_pDInput->CreateDevice(lpddi->guidInstance,&g_pDIDevice[(*(int*)DeviceCount)],NULL);

g_pDIDevice[(*(int*)DeviceCount)]->SetDataFormat(&c_dfDIJoystick);
g_pDIDevice[(*(int*)DeviceCount)]->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);

(*(int*)DeviceCount)++;
if((*(int*)DeviceCount) == 2)
return DIENUM_STOP;

return DIENUM_CONTINUE;
}

645 名前:420 :05/01/25 08:01:07
>>644
ありがとうございます。
家に帰ってから早速試してみたと思います。
>>643
変数を変えずに(ただのコピーで)2回やってましたがやっぱり1Pでした。
どっかで動作を勘違いしている部分があると思うので、644のプログラムを試してから色々いじってみます(´・ω・`)

646 名前:デフォルトの名無しさん :05/01/25 16:25:14
direct Xを、初めから丁寧に解説してくれる、いいサイト知りませんか?
何をどこから手を付けていいか、わからない・・・。

647 名前:デフォルトの名無しさん :05/01/25 16:33:15
チュートリアルに懇切丁寧に解説されている。

648 名前:デフォルトの名無しさん :05/01/25 18:45:53
クォータニオンの使い方がいまいちわからんのです。

クォータニオンの積が角度の足し算とか 距離がノルムとか
任意の軸で回転できるとか、なんとなくわかったけど、
それをベクトル(座標)に落とす方法が良くわからんのです。

例として、
v1 に v0 から q角度分3進んだ 座標を入れたいんです。
D3DXVECTOR3v0,v1;
D3DXQUATERNIONq;

v0 = D3DXVECTOR3( ... );//適当な座標
D3DXQuaternionRotationYawPitchRoll(&q,...);//適当にクォータニオン作る

// v1 に 位置v0 から q角度で3進んだ 座標を入れたい。
v1 = v0 + q * 3; //< これじゃ駄目なのです。
↑っぽい式は、どう書けばいいんですか?
行列に変換して行列演算して行列から座標拾うとかで出来そうだけど
本当はそんなんじゃないよね?


あとその場合、計算した行列から位置(Translation?)を取得するのは、
xyz成分 それぞれ mat._41 ,mat._42 ,mat._43 .でいいんですか?

MSのビルボードのサンプルっぽいのがそうやってた。

649 名前:デフォルトの名無しさん :05/01/25 19:07:20
>>648
v1 = v0 + step;
角度0の時のstepベクトルの値は?

650 名前:420 :05/01/25 19:28:01



                 orz


やっぱり1Pのみです。
644のプログラムを試したり、パッドを3つつないでも1Pのみorz
DIJOYSTATE dijs;
g_pDIDevice[0]->GetDeviceState( sizeof(DIJOYSTATE), &dijs );
DIJOYSTATE dijs2;
g_pDIDevice[1]->GetDeviceState( sizeof(DIJOYSTATE), &dijs2 );

dijs.lX
dijs2.lX
出力はこれで別々に出るはずですよね?
エラー判定を入れているけど問題なく通っているし、どこかで1Pの情報を2Pに入れているのだろうか(´・ω::,,...

651 名前:デフォルトの名無しさん :05/01/25 19:34:06
>>648
クォータニオンはあくまで回転情報なので、
例えば+Z方向を向いてるときをニュートラルだとしたら
クォータニオンを行列に戻して ベクトル(0,0,1)を掛けて
それに距離を掛ければ移動量になるんじゃないかな。

652 名前:デフォルトの名無しさん :05/01/25 19:46:04
>>650
コールバック関数がちゃんと2回呼ばれてるか
CreateDeviceの戻り値取得してデバイス作成に成功してるか
確認を

データの取得はそれでちゃんと別々にできる
デバイス列挙とか作成あたりどう書いてるんだ

653 名前:420 :05/01/25 20:11:21
g_lpDI->EnumDevices( DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY );

g_lpDIDevice[0]->SetDataFormat( &c_dfDIJoystick );
g_lpDIDevice[1]->SetDataFormat( &c_dfDIJoystick );

g_lpDIDevice[0]->SetCooperativeLevel( g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE );
g_lpDIDevice[1]->SetCooperativeLevel( g_hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE );


BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* lpddi, LPVOID lpContext )
{
g_lpDI->CreateDevice( lpddi->guidInstance, &g_lpDIDevice[0], NULL );
g_diDevCaps[0].dwSize = sizeof(DIDEVCAPS);
g_lpDIDevice[0]->GetCapabilities( &g_diDevCaps[0] );

g_lpDI->CreateDevice( lpddi->guidInstance, &g_lpDIDevice[1], NULL );
g_diDevCaps[1].dwSize = sizeof(DIDEVCAPS);
g_lpDIDevice[1]->GetCapabilities( &g_diDevCaps[1] );

return DIENUM_STOP;
}

644のプログラムと同じく配列化。
実際は1つ1つにif( FAILED〜)を付けていますがエラーは出ていませんorz

654 名前:420 :05/01/25 20:15:04
↑g_diDevCaps[i].dwSizeとGetCapabilitiesは別にどうでm

655 名前:デフォルトの名無しさん :05/01/25 20:17:58
420はやはり勘違いしてるようだ

656 名前:420 :05/01/25 20:21:19
Σ(´・ω・)y- マジッスカ
 ノ(  へへ

657 名前:644 :05/01/25 20:29:19
>>420
なんでわざわざ
(*(int*)DeviceCount)
なんていうわけわからんことをやってまで
変数参照してるか考えてください

この場合のデバイスを列挙するというのがどういうことなのかも

658 名前:デフォルトの名無しさん :05/01/25 20:36:04
EnumJoysticksCallback( 1Pコントローラ情報, LPVOID lpContext );
EnumJoysticksCallback( 2Pコントローラ情報, LPVOID lpContext );
                     ・
                     ・
                     ・
(デバイスの数分だけ呼ばれる)

とでも書けば分かるのかな?

659 名前:デフォルトの名無しさん :05/01/25 20:51:04
とにかく420は、コールバック関数というモノをもっとよく知るべき。

660 名前:420 :05/01/25 20:58:34
できました、細かい説明までしてくださりありがとうございますorz

DIENUM〜というのが単純にNULLやS_OKなどを返しているのかと思ってました。
659の通りコールバック関数について勉強してみます。
その前に試行錯誤した残骸を隔離するなり処分するなりせねば (;´・ω|

661 名前:デフォルトの名無しさん :05/01/26 02:28:42
ESCボタンが押されたらWM_KEYDOWNでVK_ESCAPEを感知して終了します。
でも、DirectInputで特定のボタンが押されたときに
SendMessage(hWnd,WM_KEYDOWN,VK_ESCAPE,0);
を実行すると落ちます。なぜでしょうか?

662 名前:デフォルトの名無しさん :05/01/26 02:43:47
どなたかDirectX7のリファレンスを英語でも結構なので
UPしてくれませんか?
かなり探しましたがどこにもありません。

663 名前:デフォルトの名無しさん :05/01/26 03:09:34
>>661
うっかりDefWindowProcにもメッセージを渡してるんじゃないか?

>>662
うpろだ用意しる!

664 名前:デフォルトの名無しさん :05/01/26 09:46:08
>>662
今のSDK(インストール前のパッケージ)には入ってないのかな?
Cマガの2004年1月号収録のSummer2003には7.0から9.0の日本語版が揃ってたよ。
インストール前のExtrasフォルダね。


665 名前:デフォルトの名無しさん :05/01/26 10:58:26
DirectXで作ったゲームとかを動かすとネットにつなげようとするのはなんでですか?
ネトゲじゃない普通のでもフリーウェアとかでも同じです。

666 名前:デフォルトの名無しさん :05/01/26 11:51:01
スパイウェアに汚染されているんだよ。
まずはHDDをフォーマットせよ。

667 名前:デフォルトの名無しさん :05/01/26 12:49:07
俺は665じゃないが・・・
そんなことがあるのか。
なるほど、そういう症状が出たら俺も気をつけよう。

668 名前:デフォルトの名無しさん :05/01/26 15:58:27
>>665
ええと何だったっけな
ウィルスや、スパイウェアとかじゃ無いんだけど、そういうのあるのよ

ある意味スパイウェアだけど

669 名前:665 :05/01/26 16:14:00
>>666-668
DirectXの中に何かそういうのがあるのでしょうか?
普通にWinAPIだけで作ったものは動かしても何もないのに、
たとえばDirectDrawで作っただけでも動かすとネットにつなげようとします。
DirectPlayとか使ってるならわかるのですが・・・。
ノートンとかで遮断すれば済む話なんですが、
配布して遊んでくれた人から「これ何してんだ?」というメールをもらいます。
知らない人からみればパソコンから何か情報盗んでるみたいで不快です。
なにか設定とかプログラム側で対処できないでしょうか?

670 名前:デフォルトの名無しさん :05/01/26 19:58:59
>>669
OS入れ直す
一度もネットに繋げないままで
新たにプロジェクト作ってソースをコピペしてコンパイルまでやる
これで同じようなことするexeができたらお手上げ

671 名前:デフォルトの名無しさん :05/01/26 21:10:42
アドウェア?

672 名前:デフォルトの名無しさん :05/01/26 22:39:16
>>670
いや確かランタイム側の話なんで、OS再インスコや、新たにプロジェクト云々はやっても意味無いよ。

673 名前:665 :05/01/26 22:53:14
>>670
新規インストールした3つのパソコンで確認しましたが、
何れもネットにつなげようとしました。
(2000+7a、2000+8.1、XP+9c)

>>672
なるほどDirectXランタイム側の問題なんですか。
そうすると諦めるしかないんでしょうかね。

674 名前:デフォルトの名無しさん :05/01/27 01:03:48
そんな話は始めて聞いたが…

675 名前:デフォルトの名無しさん :05/01/27 01:18:22
パケモニいれてどこに繋いでるか見てみれば

676 名前:デフォルトの名無しさん :05/01/27 04:51:41
漏れ、ZoneAlarm使った場合DirectXがプログラムコントロールに追加される。
サーバー動作制限部分にヒットしている気がする。

677 名前:デフォルトの名無しさん :05/01/27 09:54:06
>>675
Microsoft(US)につないでいるようです。

>crl.microsoft.com
>CryptRetrieveObjectByUrl::InetSchemeProvider
>MC1=GUID=xxxxxxxxxxxxxxxxx&HASH=xxxx&LV=xxxxx&V=x
こういったものを送信したあと、

>Microsoft-IIS/6.0
>Microsoft Windows Hardware Compatibility
>数字の羅列のあと文字化けが続く
こういうのを受信してました。

ハードウェア コンパチビリティ(?)ということは、
何か互換をとるために情報を送受信しているんですかね。

678 名前:デフォルトの名無しさん :05/01/27 10:28:59
ハードウェアのWindowsとの互換性をチェックしてるみたいやな。

679 名前:デフォルトの名無しさん :05/01/27 11:27:06
DirectXの本とかみると

BOOL と NULL って使われているんですがこれって
bool と 0 じゃいけないんですかね?

誰か詳しく教えてくださいませ

680 名前:デフォルトの名無しさん :05/01/27 11:41:09
bool と 0 の方がいいと思う

681 名前:デフォルトの名無しさん :05/01/27 12:14:52
DirectXでは大丈夫かも知らんが、WinAPIにはBOOL型なのに-1を返す関数がある。
ポインタでないところはNULLより0がいい。ハンドルのときどうするかは微妙だけど。

682 名前:デフォルトの名無しさん :05/01/27 12:26:18
>>679
4バイトのやりとりするのにboolにしちゃうのはなぜ?

683 名前:デフォルトの名無しさん :05/01/27 13:16:01
>>679
SDKでBOOLって書かれてるものは、自分のコードでもBOOLにしといた方がいいよ。
「実は一緒でしょ?」みたいな不要な仮定をしてもそんなにメリットないから。

GetMessageのように BOOL 型で 0, -1, それ以外、と3種の値を返すものもあるし。

NULLも同様だけど、これは0でも良いと思う。

684 名前:デフォルトの名無しさん :05/01/27 20:34:34
BOOL、0 で逝くことにします
ありがとうございます

685 名前:デフォルトの名無しさん :05/01/27 21:13:35
>681を読めてない>683...

686 名前:デフォルトの名無しさん :05/01/27 22:07:14
>>681

ポインタでないところはNULLより0 って
ポインタだから NULL と 0 の問題になっているんだけど
どういうことだろう

687 名前:デフォルトの名無しさん :05/01/27 22:19:36
>>686
定数を直接書かないなんてことは大原則だろ。これすら守れないような
ひとはパソコン捨てて田舎に帰ってください。

688 名前:デフォルトの名無しさん :05/01/27 22:34:18
>>687
漏れはポインタに変換される 0 と、
物の個数が0であることをあらわす 0 と、
インデックスのベース値の 0 は定数でも直接書いてるな。

そうしない奴はプログラマとしての適正ないと思う。私見だけど。

689 名前:デフォルトの名無しさん :05/01/27 23:15:32
えと、#define NULL 0ですよね。
NULLが0なのは仕様ですけど
なんでわざわざ0って書くの?

690 名前:デフォルトの名無しさん :05/01/27 23:17:12
>689

楽だから

691 名前:デフォルトの名無しさん :05/01/27 23:19:57
>>690

http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html

692 名前:デフォルトの名無しさん :05/01/27 23:23:05
>>689
気分。
その日の湿度とか、朝のウンコの快便具合でも変わったりする。

693 名前:デフォルトの名無しさん :05/01/27 23:48:40
C MAGAZINE - プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン
http://www.cmagazine.jp/src/kinjite/c/null.html

694 名前:デフォルトの名無しさん :05/01/27 23:56:29
つ C++の設計と進化 P.291

695 名前:デフォルトの名無しさん :05/01/28 00:05:18
つーか
例えNULLを0と書いても100%問題がおきなかったとしても
視認性とか可読性を考えてNULLと書く

ということをしないようなプログラマはダメだと思います
絶対にバグを出さない天才プログラマで
全て一人でやるか同レベルの天才としか分担作業をしない
なら話は別ですが

696 名前:デフォルトの名無しさん :05/01/28 00:21:26
そもそもNULL定数なんて言語仕様に含まれてたっけ?

697 名前:デフォルトの名無しさん :05/01/28 00:57:38
なるほろ
NULLはめんどうだが、可読性のためと。

698 名前:デフォルトの名無しさん :05/01/28 01:05:47
正常に動くかどうかはテストで確かめられる
可読性を重視したほうがいい

699 名前:デフォルトの名無しさん :05/01/28 09:11:02
で、NULLと書いて可読性と視認性はあがるのか?
ハンガリアンと同じで面倒なだけに感じるのだが

700 名前:デフォルトの名無しさん :05/01/28 12:52:37
>>695
Win32 のハンドルとかに代入するときは NULL って書くけど、
C++ の普通のクラスへのポインタの場合、
例えば Foo* pFoo = NULL; ってのは強烈に違和感あるなぁ。
Cじゃないんだからさ。

あと>>687みたいな人は、例えば配列にアクセスするときに
for (int i = 0; i < num; i++) ...; じゃなくて、
for (int i = ARRAY_BASE; i < num; i++) ...; とか書くの?
ビットシフトさせたいときは d <<= ONE; とか?
下4ビット取り出すときは d & MASK_LOWER_4BITS とか?

かえって可読性下がると思うが。

701 名前:デフォルトの名無しさん :05/01/28 12:56:02
ヘッダやドキュメント等で「〜の場合にはNULLを返す」「NULLが指定されると〜」などと
書かれている場合には、何も考えずおとなしく NULL を使う。

そうでない場合、ポインタならC++の標準規格に基づいて 0 を使う。
単なる整数の場合、自分で仕様を決めてその通りに記述する。
疑問の生じる余地はないと思う。

702 名前:デフォルトの名無しさん :05/01/28 14:58:05
>>700
>for (int i = 0; i < num; i++) ...; じゃなくて、
>for (int i = ARRAY_BASE; i < num; i++) ...; とか書くの?
>ビットシフトさせたいときは d <<= ONE; とか?
>下4ビット取り出すときは d & MASK_LOWER_4BITS とか?
お前はバカのオーバースペックそしてバカのレッドゾーン軽やかにマッハバカ

703 名前:デフォルトの名無しさん :05/01/28 15:12:49
ARRAY_BASEの例の考え方を発展させていった結果がイテレータでしょ?
文脈にもよるがi=0は使いたくないなぁ。

704 名前:デフォルトの名無しさん :05/01/28 15:20:24
>>677みたいに送信してる文字列とか取得できるような
ソフトがフリーであったら教えてください。

705 名前:677 :05/01/28 15:22:56
これだよ。
www.vector.co.jp/soft/winnt/net/se308001.html

706 名前:デフォルトの名無しさん :05/01/28 15:30:03
>>704
Ethereal

707 名前:デフォルトの名無しさん :05/01/28 21:42:50
俺はDel房だからC++を弄るときについついエラーを出す
面倒なので
#define nil NULL
を上に追加

708 名前:デフォルトの名無しさん :05/01/28 22:02:47
漏れはC#厨なので(以下ry

709 名前:デフォルトの名無しさん :05/01/29 02:48:19
閉じているメッシュの体積はどうやって求めますか?
バウンディングボックスの体積と比較してみたいのです。

710 名前:デフォルトの名無しさん :05/01/29 03:14:29
数学板で聞くとか。

711 名前:デフォルトの名無しさん :05/01/29 06:23:26
輪切りにして積分みたいにしてみようと思います

712 名前:デフォルトの名無しさん :05/01/29 07:40:19
>>709
ここはDirectXスレだが。
DXTaisekiKeisan関数があるとでも思ったのか。

713 名前:デフォルトの名無しさん :05/01/29 11:15:17
>>712意味わかりませんが。聞いちゃいけないのか( ゚Д゚)ゴルァ!!

714 名前:デフォルトの名無しさん :05/01/29 11:59:06
出し惜しみせずに3Dの技術を誰かが答えます Part4
http://pc5.2ch.net/test/read.cgi/gamedev/1021171809/

715 名前:デフォルトの名無しさん :05/01/29 13:47:35
DirectX9.0b で フルスクリーンからウィンドウモードに変更したときに
今までハッキリ表示されていた、文字やスプライトの底辺がすこしにじんだ感じになります
描画位置によって上ににじみがでたり場所が変わります

またフルスクリーンにすると、直っていますが、ウィンドウモードにすると
なぜかまたにじんでいます

SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_NONE );
SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_NONE );

上記の設定を行いましたが、変化がなかったため違う問題のようです

この原因がなにか分かる方いないでしょうか?


716 名前:デフォルトの名無しさん :05/01/29 13:48:57
凸メッシュに分割してしまえば
あとは凸多角形の面積を求める方法が使えるんじゃなかろうか
とか言ってみる

でもメッシュの凹凸判定ってどうやるんだろー

717 名前:デフォルトの名無しさん :05/01/29 13:58:51
クライアントとバックバッファのサイズがあってない

718 名前:デフォルトの名無しさん :05/01/29 14:22:16
>>717 いや ちゃんとAdjustWindowRectで求めているので、それはあってると思います

719 名前:デフォルトの名無しさん :05/01/29 14:29:53
>>717

GetClientRectで調べてみたら、確かに違いました
早とちりしてしまった

ありがとうございます

720 名前:デフォルトの名無しさん :05/01/29 17:05:45
>>716
三頂点と面法線を内積して隣接する辺のベクトルと比較すれば簡単じゃん。

721 名前:デフォルトの名無しさん :05/01/30 01:38:25
DirectInput で データの取得前に行う Acquire() は

データの取得前に必ず実行するようにしたらだめですか?
(1ループに1回)

やねうらお氏のサイトで
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp40to47.html

WM_ACTIVATEAPPを見て、AcquireとUnacquireしなさいとか
書いている本も多々あるが、そんなものは真っ赤な嘘である。

って書いてあったので、どうせなら毎回やればいいやと
思ったんですが、誰か教えて下さい。

722 名前:デフォルトの名無しさん :05/01/30 03:41:15
>>721
パフォーマンス的に問題がなければOKかと

723 名前:デフォルトの名無しさん :05/01/30 12:43:18
グラデーション等がかかるようなフォントを描画するプログラムを作って使うのと、
自分で画像を作成して使うのってどっちが実用的ですか?
フォント描画だと楽だけど重くなりそうですが…


724 名前:デフォルトの名無しさん :05/01/30 13:03:34
>>723
自分でフォントにグラデーションかけたほうがいい。
高速化としては、まずはグラデーション用のBMPを読み込んでおき、
下地としてフォントの文字がある部分を白に背景を黒にして文字を描き、
白か黒の部分をマスクにして先ほどのBMPを貼り付けていく。
これで簡単にグラデーションのフォントが完成。
貼り付けるBMPを他の模様などにすれば応用も楽。

725 名前:デフォルトの名無しさん :05/01/30 13:26:37
DirectX を スレッドでやるのはタブーなのですか?
描画すらさせてもらえなくなった・・・。

726 名前:デフォルトの名無しさん :05/01/30 16:18:27
>>724
ありがとうございます。
フォント関連は放置気味だったんですが、試してみます。

727 名前:デフォルトの名無しさん :05/01/30 21:23:17
>>725
lock&unlock

728 名前:デフォルトの名無しさん :05/01/31 01:11:55
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))

上記のマクロの意味が分かる方いませんか?
DirectInputでのキーの番号付のようなものらしいです。

0->field がNULLポインタを参照にしているのになぜエラーにならないだろうと
そんな疑問を感じるんですが、どうなんでしょうか。

729 名前:デフォルトの名無しさん :05/01/31 01:33:19
type構造体のメンバfieldがtypeの何バイト目にあるか調べる。
アドレスを計算しているだけでアクセスするわけではないので鰓はでない。

730 名前:デフォルトの名無しさん :05/01/31 02:10:50
>>729
ありがとうございます
オオなるほど そういう処理がされているんですか
->って違う使い方もできたんですね

う〜むC++は奥が深い・・・
結構勉強していたつもりでもまだまだだなぁと感じました
MSヘッダは知らない処理だらけだしorz

731 名前:デフォルトの名無しさん :05/01/31 02:43:48
>>730
揚げ足気味だが、それはC++ではない。Cの構文だ。

732 名前:デフォルトの名無しさん :05/02/04 00:20:20
DirectX9.0c october 2004 と Extras 入れたら

uuid.lib(unknwn_i.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください

っていうエラーがでました
VC6 と WindowsXP 使ってます

原因分かる方教えてください

733 名前:デフォルトの名無しさん :05/02/04 00:25:29
VC6を窓から投げ捨てる
それがイヤなら2004を窓k(ry

734 名前:デフォルトの名無しさん :05/02/04 00:39:26
>>733

October は VC6に対応しているらしいんですよ
なぜかなぁ〜
Extrasの中にあるVC6用のファイル上書き保存したのに


735 名前:デフォルトの名無しさん :05/02/04 01:44:04
>>734

XPSP2 用の PlatformSDK に問題があるようなことを外国のサイトで発見したけど
どうやって解決すればいいかわからない。。

でも日本でこの問題がでていないってことは、
何か間違ってることしてるのかな。。

736 名前:デフォルトの名無しさん :05/02/04 03:30:18
PlatformSDK の uuid.lib は VC6 と相性が悪い(?)ので、
VC6 に元からある uuid.lib を(一応バックうpしてから)上書きして使うのが無難。

737 名前:デフォルトの名無しさん :05/02/04 14:02:20
>>736

さすがに上書きはまずいと思うよw

platformSDK使う他のプログラムが動かなくなるし

で、libが重複してしまっているから、試しにプロジェクトのパスからplatformSDKのlibフォルダを
はずしたら、なんと・・・・うまくいきました

パスはincludeだけでいいみたいでした

解決ヽ(´ー`)ノ

738 名前:デフォルトの名無しさん :05/02/04 23:26:30
ありゃ? DirectX9ランタイムって
デバッグとリテールの選択の余地ないの?

739 名前:デフォルトの名無しさん :05/02/04 23:28:37
何でそう思ったのか小一時間問いつめたい

740 名前:デフォルトの名無しさん :05/02/04 23:34:56
どっちでインストールされたのかも分かんない・・・。
コントロールパネルにも無いので、
system32のそれらしいファイル探してた。
でもわかんない。

741 名前:デフォルトの名無しさん :05/02/04 23:37:55
あー。もしかしてデバッグ版を選択できるのって
SDKに付属のランタイム入れるときだけなんですか?

742 名前:デフォルトの名無しさん :05/02/04 23:42:42
はい

743 名前:デフォルトの名無しさん :05/02/04 23:44:39
ありがとうございました。

744 名前:デフォルトの名無しさん :05/02/04 23:50:17
どういたしまして。

745 名前:デフォルトの名無しさん :05/02/05 00:06:43
私の様なザコが2ちゃんねるに来るのが間違ってました。
すみませんでした。
でもカスとか簡単に人に言えるような人間にはなりたくないです。

746 名前:デフォルトの名無しさん :05/02/06 15:50:50
聞く前に試さないのが悪い

747 名前:デフォルトの名無しさん :05/02/07 16:06:37
なんとかそこそこWindowsAPIが理解できてきたので、DirectX9を勉強し始めたのですが、どうやって学べば良いか分かりません。
解説サイトとかはDirectX8以前を扱っているものがほとんどで、上手くコンパイル出来ないし…
MSDNのサンプルとかを理解できる能力がないと無理なのでしょうか?

748 名前:デフォルトの名無しさん :05/02/07 16:26:57
チュートリアル読め

749 名前:デフォルトの名無しさん :05/02/07 16:51:16
>>748
こんな良いものがあったとは…
取り敢えずウィンドウの作成やってみます

750 名前:デフォルトの名無しさん :05/02/08 02:23:46
最初はとっつき難いもんだろWinAPIだって


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.