【C++】 DirectX初心者質問スレ Part16 【C】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part15 【C】
http://pc11.2ch.net/test/read.cgi/tech/1196150200/
2デフォルトの名無しさん:2008/02/10(日) 18:06:25
【関連サイト】

MSDN DirectX
http://www.microsoft.com/japan/msdn/directx/default.aspx

DirectX Home Page
http://www.microsoft.com/japan/windows/directx/default.mspx

BBX (掲示板)
ttp://isweb8.infoseek.co.jp/computer/bbx/

DXライブラリ置き場
ttp://homepage2.nifty.com/natupaji/DxLib/

Lamp:ゲーム開発とその学習をサポートするミドルウェア
ttp://lamp.sourceforge.jp/

TWINTAIL LOVERS.
ttp://www.twin-tail.jp/

Pastel's Laboratory
ttp://www.roy.hi-ho.ne.jp/pastel/home/index.html

GamDevPukiWiki - DirectX総合スレ (過去ログ等)
http://gamdev.org/w/?%5B%5BDirectX%C1%ED%B9%E7%A5%B9%A5%EC%5D%5D

GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
http://gamdev.org/w/?%5B%5B3DCG%C0%BD%BA%EE%A5%BD%A5%D5%A5%C8%5D%5D

ゲームを作るための素材を集めよう まとめサイト
http://paw.my-sv.net/index.html
3デフォルトの名無しさん:2008/02/10(日) 18:08:01
>>1
4デフォルトの名無しさん:2008/02/10(日) 18:10:26
ゲーム製作技術板のDirectXスレくらいは足してもいいかと思ったんだけど
過去になんか揉め事があったんだっけ?
まぁいいや。
5デフォルトの名無しさん:2008/02/10(日) 18:22:36
6デフォルトの名無しさん:2008/02/10(日) 18:24:53
7デフォルトの名無しさん:2008/02/10(日) 18:52:05
代わりにt-pot入れておこうぜ
http://www.t-pot.com/program/history.html
8デフォルトの名無しさん:2008/02/10(日) 21:17:36
>>1
そもそもお前よく考えろよ
そんなんで時間って短縮できるの?マジで?
だってさぁ、プレイヤーの入力を受け付けるから次の画面が決定する場合のが多いじゃん?
↑↓→←な
で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし
入力を受け付けるまで次の画面って描画する意味ないじゃん
ていうか内部の処理が決定しなくね?
キューイングなんてどれだけ意味があるのかさっぱりわからないんだけど?
画面更新が仮に1sごとにくるなら1s以内で処理を終えても
次のフレームの処理なんてやってもたかが知れてると思うんだけど?
ていうか安定しなくね?そんな設計にしちゃそもそも駄目じゃね?

1フレ内での時間短縮は意味があるかもしれないけど
フレーム間同士の時間短縮ってなんかやる意味あんの?
9デフォルトの名無しさん:2008/02/10(日) 21:23:35
あまりに必死すぎる>>700に涙
10デフォルトの名無しさん:2008/02/10(日) 21:26:26
全スレをこのネタで終わらせたしな
11デフォルトの名無しさん:2008/02/10(日) 21:27:06
前スレ
12デフォルトの名無しさん:2008/02/10(日) 21:45:54
っというか、そろそろおもしろがった他人がしてるとしか思えない。
13デフォルトの名無しさん:2008/02/10(日) 22:44:58
何年の何月のSDKにならDirectMusicのインクルードファイルとか入ってますか?(´;ω;`)
14デフォルトの名無しさん:2008/02/10(日) 22:50:59
とりあえずDirectInputも廃止するのはやめて欲しいなぁ
というかXInputがダメすぐる
15デフォルトの名無しさん:2008/02/10(日) 23:08:31
August 2007なら入ってんじゃね?
16デフォルトの名無しさん:2008/02/11(月) 01:01:28
DirectX関連は事実上使われもしない機能が1/3くらいはあるので
毎回根本設計から作り直さないとゴミばかり抱え込むことになる。

世間でプロジェクトがデスマーチ進行に陥るとき、
それを推進する最も有力な力が互換性至上主義である。
17デフォルトの名無しさん:2008/02/11(月) 01:15:51
今ならDX9未満か
18デフォルトの名無しさん:2008/02/11(月) 01:18:21
MSは互換性至上主義でここまで来た会社なので難しいと思います先生
互換性を捨てるならくえりーいんたーふぇーすの存在意義がないです
19デフォルトの名無しさん:2008/02/11(月) 01:33:01
>>13
そんな物には手を出さない方がいいです
1ヶ月ぐらい無駄にして結局DirectSoundに落ち着いた俺が言うんだから間違いない
20デフォルトの名無しさん:2008/02/11(月) 01:51:59
DirectXの勉強をしようとXPx64にSDKインストールしたんですが
ライブラリ ファイルの検索先パスって
C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\Lib\x86

C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\Lib\x64
のどっちの方がいいんでしょうか?
どちらでもコンパイル成功してちゃんと動くんですが、x64の方は64bitOS用に
コンパイルされて32bitOSでは動かなかったりしますか?
21デフォルトの名無しさん:2008/02/11(月) 02:32:56
32ビットに未練があるなら大人しくx86使ってろ
22デフォルトの名無しさん:2008/02/11(月) 02:38:12
>>20
それで合ってるだろ。
23デフォルトの名無しさん:2008/02/11(月) 02:49:00
>>21-22
ありがとうございます。そういうことなのね
x86の方をリンクするようにします
24デフォルトの名無しさん:2008/02/11(月) 11:20:49
DirectX SDK (November 2007)にはMayaのxファイルエクスポートするプラグイン
のソースついてないの?
25デフォルトの名無しさん:2008/02/11(月) 13:26:30
クラスのstatic関数でD3DXCreateTextureFromFileExを呼び出すと、
E_OUTOFMEMORYが出て、高頻度でテクスチャーの作成に失敗します。

しかし、成功するときも結構あったり、
直前にウェイトを入れると失敗しなかったりと、
原因がよく分かりません。

原因に予測がつけば、教えてもらえませんでしょうか。
26デフォルトの名無しさん:2008/02/11(月) 14:37:19
なんでこういう奴って自分の書いたコードを晒さないんだろうな。
出し惜しみするほどのもんでもあるまいし。
普通にやってれば動くものなんだから、ただ動きませんとか言われても
エスパーじゃない限り回答不能だよ。
2725:2008/02/11(月) 14:58:28
コードが分散してて、どこを晒せばいいのか分からないんですが、
D3DXCreateTextureFromFileExの呼び出しはこんな感じです。

D3DXCreateTextureFromFileEx(_pDevice, path, _width, _height,
0, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,
D3DX_FILTER_NONE, D3DX_DEFAULT,
0xff00ff00, NULL, NULL, &_pTexture);
2825:2008/02/11(月) 15:15:12
過去スレに同じ症状が出てたんですが、
CreateDeviceのBehaviorFlagsに、
D3DCREATE_MULTITHREADEDを入れたら失敗しなくなりました。

しかし原因は分からず、ホントにこれでいいのかも不明です。
29デフォルトの名無しさん:2008/02/11(月) 18:04:31
アップローダに上げるなりして全部晒せよ。
全部見られるのが嫌なら、問題が発生する最小の状態にすればいい。
30デフォルトの名無しさん:2008/02/11(月) 21:50:19
>>15
アリアリアリーガトーサン!!(礼を申し上げる!)
>>19
何でですか?MIDIはダメですか・・・?
31デフォルトの名無しさん:2008/02/11(月) 22:55:58
>>30
MIDIを扱うならDirectMusicでいいと思う
waveを扱うなら俺もDirectSoundの方がいいと思う
32デフォルトの名無しさん:2008/02/11(月) 23:11:27
失礼します

メタセコイアでモデリング⇒RokDeBone2でモーション作成⇒DirectXを使ったソフトでモーションを操作しようとしています。

現在、モデリングは完了し、とりあえずボーンだけ入れてモーションつける手前なのですが、
この後、上記の事をさせたい場合はどのようにすればいいのでしょうか?

モーション付きxファイルのモーションを操作する方法が分かっていない為、
こちらに書き込んだのですがスレ違いでしたらよければ誘導お願いします。
33デフォルトの名無しさん:2008/02/11(月) 23:20:26
DirectMusicは、ちょっとBGMを鳴らす程度ならDirectSoundより楽かも知れないけど
WAVを複数音鳴らそうとすると鳴らなかったり音が割れたり酷い事になってたな。
色々サイトまわって、何度見直してもサウンドの確保や解放手順は
同様の事をやっているはずだったのに、どうにも上手く行かない。

まあ本当は俺のプログラムの組み方が何か悪かったのかもしれないけど、
参考になるサイトもまともな質問の回答もなく、どうしようもなくなって
DirectSoundに移行したら同じことが苦もなく簡単にできた。

本当に時間の無駄だった。
いや、簡単に思えるものには落とし穴があるという勉強にはなったな。
34デフォルトの名無しさん:2008/02/11(月) 23:54:41
もう今更midiのまま再生させることもねーしなぁ。
BGM用途ならoggに固めてDirectSoundで再生させちゃうし、
midi編集用途ならmidi***系APIの方を使っちゃうし。
35デフォルトの名無しさん:2008/02/12(火) 00:04:42
ちょっと別件の質問です。
とあるサンプルを開こうとすると、d3d8.hが見つからずエラーが出てしまいます。

あれ?と思い、インストールしてあるフォルダを直で検索してみましたが見つからず。
directc9.0になってからこのファイルは削除してしまったのでしょうか?
36デフォルトの名無しさん:2008/02/12(火) 00:08:18
>>35
マジかwだっせーw
37デフォルトの名無しさん:2008/02/12(火) 01:29:37
コンピュータ全体を検索して見つからなかったら、
別のSDKいれな。
38デフォルトの名無しさん:2008/02/12(火) 01:33:32
すいません、>>35は解決しました。

とりあえずd3d8 = d3d9、d3dx8 = d3dx9 と読み込むファイル切り替えて、
ソースコード側でも8から9へ書き換えるという無理やりな方法でなんとかなりました。
39デフォルトの名無しさん:2008/02/12(火) 01:41:37
>>24
最近のはついてないっぽいな
40デフォルトの名無しさん:2008/02/12(火) 11:03:15
>>34
すいません。oggに固めるってのはどのソフト使ってるのか教えてもらえませんか?
あとmidi***系のAPIってのはどちら様でしょう・・・?
41デフォルトの名無しさん:2008/02/12(火) 11:09:06
42デフォルトの名無しさん:2008/02/12(火) 14:02:42
一方俺は簡易ソフト音源を作ってMIDIファイルを自前で鳴らせるようにした
修羅の道だがなー
43デフォルトの名無しさん:2008/02/12(火) 14:15:40
DirectXというか作法に近い質問かもしれませんが、

LPDIRECT3DDEVICE9は、
グローバルで持っていいものなのでしょうか?

それとも、描画する関数に引数として持たせるべきでしょうか?
void 描画管理(pDevice)
{
...
描画(pDevice)
...
}
44デフォルトの名無しさん:2008/02/12(火) 16:06:42
んなもん好きにしろよ
45デフォルトの名無しさん:2008/02/12(火) 16:42:27
描画クラスのメンバとして持たせるのが一般的です
46デフォルトの名無しさん:2008/02/12(火) 17:11:43
>>41
ありがとうございます。Win32の方でしたか。ちょっと使うぐらいなら断然こっちでしょうね・・・。
>>42
ソフト音源って、まさか自前のWAVEをMIDIデータにあわせて鳴らしてるんですか?
踏み込みたくねーー!すごいよ
4742:2008/02/12(火) 18:52:34
実はそんなにすごく無かったり・・・修羅の道ってほどでもないわ

DirectSoundで効果音を鳴らすくらいは誰でもやるっしょ?
そしたら次に、任意の音程を付けられるようにする
それを任意のタイミングで鳴らしたり止められるように管理する

あとは音の仕上がりをどこまでこだわるか次第
こだわらなければ意外と簡単なのよね

でもoggとかで鳴らしちゃったほうが圧倒的に楽w
48デフォルトの名無しさん:2008/02/12(火) 21:09:30
MPTRACKとか言うソフト使ったらmidiをmp3に変換できたんで、やっぱり
DirectSoundになりそうです。家のPCでmidi再生すると分解能が低いのか
テンポが躓くような感じだったので、これも解決しそうです。
49デフォルトの名無しさん:2008/02/13(水) 22:18:35
D3DXのベクトル関係の関数を使い続ける人と別に用意する人とどちらが多いのでしょうか
50デフォルトの名無しさん:2008/02/13(水) 22:52:17
3D空間上に、リアルな
「炎」や「ビームのような光」、「爆発」など
特殊な効果のオブジェクトを表示させるにはどうしたら良いのでしょうか?

もしかしたら基礎知識なのかもしれませんが、初心者なもので・・。
よろしくお願いします。
51デフォルトの名無しさん:2008/02/13(水) 23:21:26
パーティクルの事を聞きたいのか?
52デフォルトの名無しさん:2008/02/13(水) 23:26:12
>>49
俺は別に持ってるよ
なんでかというと、D3DXに依存すると
Win32にも依存することになって、
いらないモノも一緒に入り込むのがイヤだからだ。
BOOLとかDWORDとか名前空間なしのブツとか。
53デフォルトの名無しさん:2008/02/13(水) 23:28:29
なんだ自己満足か
54デフォルトの名無しさん:2008/02/13(水) 23:45:48
俺は普段プログラムする時は大抵INT,FLOATなど全てVC依存で書いてるよ
55デフォルトの名無しさん:2008/02/13(水) 23:55:04
DirectX使ってる時点で描画レイヤはWin依存を避けられないわけで
56デフォルトの名無しさん:2008/02/13(水) 23:59:24
D3DXのベクトルや行列の関数、CPUが対応してる拡張があれば使って高速化すると聞いたことがある
ただ、それが微妙な精度の差を生んで、CPUが違うとSTGのリプレイなんかがズレたりするとか
自分で確認はしてないが…
リプレイ等がいらないなら、D3DXの関数使っといた方が高速化を期待できるんじゃない?
57デフォルトの名無しさん:2008/02/14(木) 01:46:15
D3DXの行列が速いとか、どこの都市伝説だよ(w
58デフォルトの名無しさん:2008/02/14(木) 05:45:32
>>57
> D3DXの行列が速いとか、どこの都市伝説だよ(w
59デフォルトの名無しさん:2008/02/14(木) 07:15:23
OS 依存避けたきゃ普通は OpenGL 使うわな。
60デフォルトの名無しさん:2008/02/14(木) 14:09:40
最大テクスチャサイズの制限を回避する方法を教えてください。

1枚7680x2048の画像を同解像度の専用ディスプレイにスプライト表示させたいのですが、
テスト環境は普通のSVGAディスプレイなため、エラーが出てしまいます。
61デフォルトの名無しさん:2008/02/14(木) 14:12:03
たくさんの小さなテクスチャに分割してタイル状に貼り合わせる
62デフォルトの名無しさん:2008/02/14(木) 14:18:37
いえそういうチキン技を教えてほしいんじゃなくて、(それぐらい知ってますし)
何か自前で読んでコピーすれば回避できるとか聞いたんです。
63デフォルトの名無しさん:2008/02/14(木) 14:20:33
自前で3Dエンジンを組む
64デフォルトの名無しさん:2008/02/14(木) 14:20:57
スプライトなら2Dエンジンでいいか
65デフォルトの名無しさん:2008/02/14(木) 14:36:42
>>61
その方法でやってみます。

>>64
デジカメで撮った写真を等倍で表示するビューア作ってるんですが、
最近の10Mピクセル超えの場合、ぱらぱらやった時に表示が遅すぎて
DirectXを使ってみようと思った次第です。

が、何分素人なもので右も左もわからない状態で、エラーでまくり
色々制限があるという事が判明し困っていた次第です。
66デフォルトの名無しさん:2008/02/14(木) 15:03:28
対応するテクスチャサイズは環境によっても違うからな。
まあ1024×1024ぐらいならどの環境でも使えると思うから
それで小分けタイルでいいんじゃねーの?
67デフォルトの名無しさん:2008/02/14(木) 15:03:47
>>65
DirectXを使ったからって魔法のように速くなったりはしないよ。
その程度で遅いってのは単純に組み方が悪いだけ。
「ぱらぱら」の意味が分からんが、スライドショー的なことを言っているなら
DirectXを使う意味が全くない。
68デフォルトの名無しさん:2008/02/14(木) 15:06:41
カード性能がよければDirectX使う方がまあ早いだろう。
69デフォルトの名無しさん:2008/02/14(木) 15:12:27
>>67
いや、あるだろ。
グラボ積んでるなら、システムメモリーからVRAMよりも、VRAM間の方が断然早いわけで、
先にVRAMへ画像を読み込んでおけば、大きな画像ほどVRAM間の方が早く表示されるはず。
例えば、hamanaなんかはDirectX使って表示するビューアだったはず。
70デフォルトの名無しさん:2008/02/14(木) 15:14:22
まあ別にDirectXじゃなきゃVRAM扱えないわけじゃないけどな
71デフォルトの名無しさん:2008/02/14(木) 15:23:16
メッシュは表示されるが割り当ててあるはずのテクスチャが
表示されない場合、まずどの辺から疑ってかかるべきですか?

SUCCEEDED( D3DXCreateTextureFromFileEx(...) )が通ってる
(=画像を読んではいる)ところまでは確認できてます。
72デフォルトの名無しさん:2008/02/14(木) 15:37:53
>>71
とりあえず固定機能パイプラインなのか
頂点・ピクセルシェーダーなのかくらい書こう

それすら関係ないところだと
頂点情報の中にテクスチャ座標がきちんと格納されてるかとか
73デフォルトの名無しさん:2008/02/14(木) 15:57:53
>>70
と言うからにはもちろん使えるんでしょうな?(・∀・)ニヤニヤ
74デフォルトの名無しさん:2008/02/14(木) 16:01:42
>>72
固定機能かシェーダーなのかわかりませんがDirectX 9についてるサンプルプログラムです
全部テクスチャが表示されないんです
画像を読んでるところも問題ないですしセットしてるところも通ってました

一応パソはこれです Pentium3-1G 512MバイトRAM 8GバイトHD Milenium-2M SB Windows XP SP2
75デフォルトの名無しさん:2008/02/14(木) 16:06:34
> D3DXの行列が速いとか、どこの都市伝説だよ(w

一応、D3DXの場合、ランタイムでSSEとかが利用可能かチェックして、使えれば使ってるみたいだし、かなりの最適化はされているはず。
自分で普通にC++で書いたコードよりは速いんじゃない。
7671:2008/02/14(木) 16:14:15
>>74 勝手に便乗すんなw
>>72
固定機能かシェーダーなのかはわからないですが
下記URLサンプルのCMapModelクラスを移植しておかしくなりました。
ttp://www.cmagazine.jp/books/3drpg/

元のサンプルは正常に表示されるのでどこかで移植ミスやったか、あるいは本家SDKの
チュートリアル頼りに組んだDirect3Dの初期化処理周りがおかしいかとか考えていたのですが
(最初はメッシュも表示されなかったがClearでZバッファ消してなかった)
7771:2008/02/14(木) 16:47:12
ちょっと試行錯誤してて気づいた点があったので補足。

・移植元と問題ので同じメッシュを作りD3DXSaveMeshToX()で
Xファイルを吐きださせたところMeshNormalsの値が違う
移植元は0.000000;1.000000;0.000000;が延々と続くが
問題の方は0.250000;0.500000;0.000000;<br>0.500000;0.500000;0.000000;と
2行ごとに0.25ずつ増えていき24で0に戻るループになっている。

・メッシュの壁と床に別々のテクスチャを張り付けているが、テクスチャファイルを
入れ替えたところ、表示されているメッシュの色が入れ替わった。
(片方が微妙に黄ばんでいる。ちなみにテクスチャは両方ともモノクロ)

つまり
・テクスチャを読めてはいる。かつ反映・表示もされている。
・反映のされ方がおかしいか、初期化の仕方がおかしいかで
ちゃんとテクスチャの模様が表示されるところがツルッツルになっている
・しかしどこがおかしいのかまでは突き止められていない。
78デフォルトの名無しさん:2008/02/14(木) 17:00:51
とりあえず1ポリで試してみろ
79デフォルトの名無しさん:2008/02/14(木) 17:49:25
>>70
明示的にVRAMに確保できるわけじゃないし、Vistaだとシステムメモリに
確保されてしまうけどね。

等倍表示程度では、DirectXを使う意味は全く無い。
スライドショーなら、ユーザの入力を待たずに次の画像を読み込んでおくとかの
工夫の方が遥かに大事。

>>77
テクスチャ座標が設定されてないだけかと。
8071:2008/02/14(木) 18:20:01
ありがとうございます。解決できました。
構造体D3DVERTEXの定義がおかしかったのが原因でした。
81デフォルトの名無しさん:2008/02/14(木) 18:27:41
ワロス
82デフォルトの名無しさん:2008/02/14(木) 23:04:32
質問者なりすまししてフザけてるバカでトンマな能無しが居るので質問者はトリップでもつけれ。
83デフォルトの名無しさん:2008/02/14(木) 23:36:33
OpenGLのNVidia拡張を使うのは機種依存のうちに入るの?
84デフォルトの名無しさん:2008/02/15(金) 02:21:38
DicrectSound を使うための
サンプルコードなのですが

//聞き手の位置の設定
//(x,y,z) ... 3D空間上の座標
void CWaveControl::SetListenerPos(double x,double y,double z)
{
if(lpDS3DListener!=NULL)
lpDS3DListener->SetPosition(D3DVAL(x),D3DVAL(y),D3DVAL(z),DS3D_IMMEDIATE);
}

error C3861: 'D3DVAL': 識別子が見つかりませんでした
というエラーがでてしまって 先に進めない状況です
どうしたら解決するでしょうか?
85デフォルトの名無しさん:2008/02/15(金) 19:44:56
>>84

D3DVALUEなら知っている。
ただの float。

typedef float D3DVALUE;
86デフォルトの名無しさん:2008/02/15(金) 19:49:03
ぶっちゃけdoubleってほとんどつかわないよな
87デフォルトの名無しさん:2008/02/15(金) 19:55:45
3D だと使わないだろうね。
逆に科学計算だと float が役に立たないが。
88デフォルトの名無しさん:2008/02/15(金) 20:02:09
俺はむしろ、3Dゲー制作で 256bit 浮動少数とか使いたい。
特に物理演算。float 市ねといいたい。
89デフォルトの名無しさん:2008/02/15(金) 20:22:57
90デフォルトの名無しさん:2008/02/15(金) 20:28:04
みやみやなにやってんの?
91デフォルトの名無しさん:2008/02/15(金) 22:03:49
>>88
具体的にどんな演算をしていて精度が足りなくなったの?
92デフォルトの名無しさん:2008/02/15(金) 22:16:54
ミサイルの弾道計算だろ
93デフォルトの名無しさん:2008/02/15(金) 22:28:18
>>85

確認してみたのですが
D3DVAL で間違いないです
94デフォルトの名無しさん:2008/02/15(金) 22:50:43
>>93
何を確認してみたのよ
95デフォルトの名無しさん:2008/02/15(金) 22:55:50
>>93
たぶん参考にしてるものがめちゃくちゃ古いバージョンなんだよ
96デフォルトの名無しさん:2008/02/15(金) 23:25:01
>>94
参照してるコードですが

>>95
たしかに 参照してるページ自体
古いものでした
別のサンプルを探してきます

ありがとうございました
97デフォルトの名無しさん:2008/02/15(金) 23:43:33
floatは駄目だけどdoubleではOKです、なんて
それはちょっと違うだろ。
自分のソフトが誤差に対応出来てないだけだろ。
double並みのダイナミックレンジが欲しいってなら別だが、
本当に必要なのかあやしいもんだ。
って、俺もこれを克服出来なくて挫折した部類な訳だが。


98デフォルトの名無しさん:2008/02/16(土) 00:46:32
D3DVALは型じゃなくてD3DVALUE型を生成するマクロだよ。
#define D3DVAL(val) ((float)val)
99デフォルトの名無しさん:2008/02/16(土) 01:12:36
どっちみちそんなの標準装備のだと他で上手くいかないんじゃないか?
100デフォルトの名無しさん:2008/02/16(土) 01:36:59
肝心なこと書き忘れたけど、7までのd3d.hにはあるけど
8以降はない>D3DVALマクロ
101デフォルトの名無しさん:2008/02/16(土) 02:19:38
VC使ってる奴にとってマクロは
インテリセンス機能が働かなくなる嫌がらせにしか見えない
102デフォルトの名無しさん:2008/02/16(土) 03:12:38
単一色で塗りつぶされたテクスチャを作りたいのですが、サイズや色が
変わる仕様です。どうするのが一番簡単でしょうか?
103デフォルトの名無しさん:2008/02/16(土) 08:49:01
単一色ならテクスチャである必用はありません。
104デフォルトの名無しさん:2008/02/16(土) 09:13:28
>>103
>単一色ならテクスチャである必用はありません。
いえディフューズとテクスチャでは色が異なりますから、
正確な色を必要とするときはテクスチャである必要がありますよ。

たとえばマテリアルは256階調でしかやれませんが、
テクスチャなら1024階調まで表現できます。
105デフォルトの名無しさん:2008/02/16(土) 09:32:36
正確な色が出せないのは固定機能ならステートの設定を理解していないか、
シェーダなら書き方がおかしいだけです。
自分の頭が悪い理由を他に求めるのはやめましょう。
106デフォルトの名無しさん:2008/02/16(土) 10:25:40
>>105
たとえばD3DRGBマクロは256階調になっていますよ。
これ以上の何を理解しろというんでしょうか。
107デフォルトの名無しさん:2008/02/16(土) 10:46:06
色が変わるのは精度の問題ではなく計算方法が間違っているからです。
108デフォルトの名無しさん:2008/02/16(土) 11:44:58
確かに単一色ならテクスチャを使う必要はなさそうだな。
シェーダ定数やテクスチャブレンディングファクタで代用出来るだろう。
(>>104のようにレンジを考えなければ)
だけど>>103の指摘は余計なお世話なんじゃないの?
109デフォルトの名無しさん:2008/02/16(土) 11:52:04
マテリアルで良いじゃんっちゅー話なんじゃねーの。余計なお世話とも思わんが。
ところで、単一色を「正確に」モニタに表示するのにレンジを気にする意味がわかりません。
110102:2008/02/16(土) 13:16:27
レス、ありがとうございます。
発想が良くなかったみたいなので元の問題の方を教えてください。
ある色で塗りつぶされた背景に文字列を表示しようと思っています。
背景は動きます。文字列も変化します。
文字の色は黒にする予定ですが、変わるかもしれません。
これを10〜50程度表示します。
どの様にするのが良いでしょうか?

マテリアルは今からぐぐってきます。
111デフォルトの名無しさん:2008/02/16(土) 13:37:33
背景塗りつぶされてるのに
背景が動くとか言ってることに不安を感じる
正しく直せ
112デフォルトの名無しさん:2008/02/16(土) 14:11:52
質問です。
以下のサイトで
http://www.geekpage.jp/programming/directshow/renderfile.php
ローカルの動画ファイルを再生するにはIMediaControl->RenderFileを使用する事が分かったのですが、
自分でメモリ上に展開した動画データを直接再生する方法が分かりません
何か方法はあるでしょうか?
宜しくお願いしますm(__)m
113デフォルトの名無しさん:2008/02/16(土) 17:17:11
114デフォルトの名無しさん:2008/02/16(土) 21:15:54
>>113
誘導ありがとうございます
そちらの方へ行ってみます
115デフォルトの名無しさん:2008/02/17(日) 21:16:31
すみません質問です。
LPD3DXMESHに入った巨大なメッシュを絵画する時に
「カメラからどの辺の距離まで絵画するのか」を制御するにはどうすればよいですか?
116デフォルトの名無しさん:2008/02/17(日) 22:17:38
絵画するって面白い言葉だな
117デフォルトの名無しさん:2008/02/17(日) 23:19:32
普通は描画な
118デフォルトの名無しさん:2008/02/17(日) 23:26:48
さらに巨大になると壁画とか
119デフォルトの名無しさん:2008/02/17(日) 23:32:59
小さくなると漫画か。
120デフォルトの名無しさん:2008/02/17(日) 23:39:14
総合するとこういうことか?

D3DXMatrixPerspectiveFovLH( D3DXMATRIX* pOut, FLOAT fovy , FLOAT Aspect , FLOAT manga , FLOAT hekiga );
121デフォルトの名無しさん:2008/02/18(月) 01:12:05
>>115
メッシュの各頂点のうち、カメラに最も近い点までの距離を
カメラの近平面の距離とすればいいんじゃね?
もしくはバウンディングボリュームでもいい。
122デフォルトの名無しさん:2008/02/18(月) 01:56:45
Far Clipping 以前に、絵画しちゃっている時点でちゃんとレンダリングできているのかどうかが心配。
123デフォルトの名無しさん:2008/02/18(月) 02:10:44
>>122
「絵画しちゃっている」という言葉を使い続けている時点で日本語ができているのかどうかが心配。
124デフォルトの名無しさん:2008/02/18(月) 04:04:11
新しく覚えた言葉を使いたい年頃なんだろうねぇ
うんうん、分かるよ
俺も幼稚園の頃そうだった
125デフォルトの名無しさん:2008/02/18(月) 07:05:22
マスタリングDirectXとかいう本買って飛行機のxファイル読み込んで表示して
左右に揺らす。っていうところまで来たんですけど、パラメーターの設定多いわややこしいわ
で泣きそうなんですが、ここさえ乗り切ったら後は楽ですか?
126デフォルトの名無しさん:2008/02/18(月) 08:35:58
>>125
その本は知らんが、正直DirectXの関数は全部そんな感じ
127デフォルトの名無しさん:2008/02/18(月) 08:37:17
>>123
「絵画しちゃっている」という皮肉に本気で突っ込んでいる時点で本当に日本人か心配。
128デフォルトの名無しさん:2008/02/18(月) 09:43:04
>>125
その本おれも買ったけど分かりにくくて結局ネットで解説してくれてるサイト見て勉強した
ある程度分かってから見てみたらあぁこうやって書くといいのか、とか分かって
かなりいい本だけど正直一からDirectX勉強する用には向いてないと思う
内容は初歩的なことだけど解説とか少なくてDirectXまったく知らないと分かりにくい
とりあえずDirectXはWinAPIみたいに最初はつらいけどある程度分かってくると
楽になるからGoogle駆使してがんばれ
129デフォルトの名無しさん:2008/02/18(月) 17:10:42
DirectXは

・引数の指定の複雑さに嫌気がさしてラップクラスを作る
・欲がでてきて、「OpenGLも使える様にすれば汎用的になるんじゃね?」と妄想する
・VectorクラスとMatrixクラスを作って力尽きる

ここまで来て初心者です
130デフォルトの名無しさん:2008/02/18(月) 17:58:46
>>129
それどこの俺?
131デフォルトの名無しさん:2008/02/18(月) 19:53:42
ラップクラスを作るだけで力つきました
132デフォルトの名無しさん:2008/02/18(月) 19:58:20
とりあえず絵画して挫折した
133デフォルトの名無しさん:2008/02/18(月) 19:58:33
似たようなの作っては捨てて後に残るはゴミばかりって感じ
134デフォルトの名無しさん:2008/02/18(月) 20:17:07
DirectXに限らず、無駄なコードを書くのは初心者
135デフォルトの名無しさん:2008/02/18(月) 20:53:29
だが、無駄なコードを書いているときが一番楽しい。
136デフォルトの名無しさん:2008/02/18(月) 21:05:51
勉強には無駄なコード書くのが一番
137デフォルトの名無しさん:2008/02/19(火) 00:17:34
初心者は黙って絵画してろ
138デフォルトの名無しさん:2008/02/19(火) 01:13:20
正直一回作っちゃえばあとはそれをコピペしてちょこちょこっと値かえるだけ
139デフォルトの名無しさん:2008/02/19(火) 08:16:06
まぁ構造的に使いまわせる部分は多そうだよな
実際にはそうそう巧くいかないもんだが
140デフォルトの名無しさん:2008/02/19(火) 12:57:47
セーブファイルを作りたいんですが、文字型配列が上手く書き込めません。
TCHAR a[10];
…略…
fprintf(sfp,"%10c",a);
…略…
ファイルを見ると文字化けしています。
141デフォルトの名無しさん:2008/02/19(火) 13:02:31
ヒント:マルチバイト文字列
142デフォルトの名無しさん:2008/02/19(火) 13:04:02
さらに大ヒント:スレ違い
143デフォルトの名無しさん:2008/02/19(火) 14:46:44
アニメーションメッシュ、スキンメッシュを表示するプログラムはできたのですが、
例えばびっくり箱のような、
両方が含まれているXファイルを表示すると、
アニメーションメッシュのオブジェクト(箱)が変な位置に表示され、
かつアニメーションがされません。
スキンメッシュの方(じゃばらみたいなもの)は正常に表示されます。
1ファイルのアニメーションメッシュ、スキンメッシュ両方を表示する方法を教えてください。
144デフォルトの名無しさん:2008/02/19(火) 15:11:45
まずはデータがどうなってんのか。
145デフォルトの名無しさん:2008/02/19(火) 15:17:15
>>144
DXViewerでは正しく表示できているので、
データには問題ないと思ってます。
146デフォルトの名無しさん:2008/02/19(火) 15:46:10
じゃあDXViewerを参考にすればいいんだな。

解決。
147デフォルトの名無しさん:2008/02/19(火) 17:26:43
相対座標が間違ってるから変な位置に表示されるんだよ
座標計算を見直せ
148143:2008/02/20(水) 00:11:19
解決しました。
頂点ブレンディングをオンしたまま
アニメーションメッシュの描画をしてました。
149デフォルトの名無しさん:2008/02/20(水) 05:57:14
directXの3dを初めて間もない者です。MFCで作成していてCSplitterWnd を使って二つにウィンドウを分割して、片方には画像、片方には3dモデルを表示したいのですが、どうしてもエラーが起こってしまいます。
メニューから画像を読み込もうとすると終了してしまうのです。directxとそれ以外は混在できないのでしょうか?
150デフォルトの名無しさん:2008/02/20(水) 06:58:11
できます
151デフォルトの名無しさん:2008/02/20(水) 08:01:12
ボーンアニメーション再生サンプルって、SDKのどれですかね。
152デフォルトの名無しさん:2008/02/20(水) 14:25:42
>>149
要点が伝わってない、とりあえず画像を読み込もうとしている関数を教えれ。
それと、一部分にDirectXを使うだけならView Matrixでウィンドウ上の一部を設定するだけでいい。
153デフォルトの名無しさん:2008/02/20(水) 15:02:22
>>151
一体どこを探したら見つからないんだってくらいに
Sample Browserにそのまんまのモノが。
154デフォルトの名無しさん:2008/02/21(木) 21:42:14
>>153
まぢですか!?ごめんなさい、そしてありがとうございます。
155デフォルトの名無しさん:2008/02/22(金) 01:25:26
DirectInputができん・・・
パッド数が一個はできたんだけど、二個の場合がイマイチわからん。
LPDIRECTINPUTDEVICE8で作ったデバイスを配列で2個にして、
forで回すだけじゃダメですか?
156デフォルトの名無しさん:2008/02/22(金) 05:26:52
2個それぞれのパッドを
EnumDevicesでちゃんと列挙できてるか?
157155:2008/02/22(金) 18:11:37
>>156
ちゃんと動かないってことはできていないんだろうけど、
基本的に↑で書いたことしか思いつかない。
DIJOYSTATEの変数も配列にしてGetDeviceState()で割り当ててもみたけどうまくいかず・・・

インプット関係のファイルうpしたのでよければ見てくだしあ。
ttp://kossie.net/up/src/kos2386.zip.html
パスは2ch
158デフォルトの名無しさん:2008/02/22(金) 18:55:41
アフォすぎ
159デフォルトの名無しさん:2008/02/22(金) 19:24:52
3Dのワールド空間中にあるキャラクタの座標を、
スクリーン座標として得るにはどうしたらいいですか?

キャラクタ座標(3,10,4) → スクリーン座標(370,300)

のようにスクリーン上での座標を得たいんですが・・。
160デフォルトの名無しさん:2008/02/22(金) 21:43:25
D3DXVec3Project
161デフォルトの名無しさん:2008/02/23(土) 04:16:57
もしかするとDirectX以前の問題かもしれないが・・・
DirectX初期化のデバイスインターフェイスを取得するところで
失敗してしまうのでよければソースコードを見ていただけますか?
(グラフィックボードはGeForce7300GTで作成しています)
DxGraph9.cppのInit()という関数で、とりあえずウインドウモードのみ作成してます。

ttp://www.hsjp.net/upload/src/up12285.zip
162デフォルトの名無しさん:2008/02/23(土) 04:30:00
うあぁぁああZIP壊れてる・・・ソースは以下でお願いします
ttp://toku.xdisc.net/cgi/up/vcc/nm1522.zip
163デフォルトの名無しさん:2008/02/23(土) 08:09:53
DirectX以前の問題だな。
構造体の初期化からやりなおせ。
164デフォルトの名無しさん:2008/02/23(土) 11:20:55
ありがとうございます
助言いただいたとおりDirectXGrahics関連クラスのコンストラクタCDXGRAPH()で
ZeroMemory( this, sizeof(*this) );
を追加すると正常に初期化できました・・・何というミス・・・
165デフォルトの名無しさん:2008/02/23(土) 11:26:30
>>164
ソースを見てないから何ともいえないけど、thisが指す先をゼロクリアはやめとけ。
仮想関数のテーブルを持ってたら…
166デフォルトの名無しさん:2008/02/23(土) 11:33:26
thisを初期化してんじゃねー!www
167デフォルトの名無しさん:2008/02/23(土) 11:57:06
えwwマジですかww数年前に現場で働いてた講師から教わってそれ以来ずっと(ry
じゃあ仮想関数はまだ無いですが今後を考えるとZeroMemoryはやめたほうがいいですね…
ちょっと方法が思い浮かばないのでグーグル先生に聞いてきます
168デフォルトの名無しさん:2008/02/23(土) 12:15:55
方法が見つからないwwやっぱ1つ1つ初期化するしかないんですかね?
D3DPRESENT_PARAMETERS m_D3DPP;
上のソースはこの構造体の未初期化が原因ですが、これがクラス内で定義されていた場合、
コンストラクタでどう初期化すればいいものか…ZeroMemory…駄目ですよね…w
スレ違いで申し訳ないので、最後にヒントだけでもいただけないでしょうか?
169デフォルトの名無しさん:2008/02/23(土) 12:18:50
>1つ1つ初期化
C++では普通はそうする。
でも配列のような分かりやすいPODはZeroMemoryで一気に
ゼロクリアしてもいいと思う。
170デフォルトの名無しさん:2008/02/23(土) 12:33:24
なるほどそこは状況によって使い分けってことか…
考えても仕方ないので色々と試行錯誤してみます
勉強になりました、ありがとうございます
171デフォルトの名無しさん:2008/02/23(土) 13:05:11
>勉強になりました、ありがとうございます

全然理解していないと思われる
172デフォルトの名無しさん:2008/02/23(土) 13:06:02
つーか、ZeroMemoryなんてローカルな関数を教える方がどうかしているだろ。
173デフォルトの名無しさん:2008/02/23(土) 13:10:04
DirectX 自体がローカルだろw
174デフォルトの名無しさん:2008/02/23(土) 13:11:08
まさか、いくらなんでも数年前からずっとDirectXを勉強しているわけじゃないだろ。
175デフォルトの名無しさん:2008/02/23(土) 14:31:22
OpenGLは最新の機能を求め始めたらDirectX以上のカオスだというイメージで怖いんですが
176デフォルトの名無しさん:2008/02/23(土) 14:54:21
イメージどおりです
177デフォルトの名無しさん:2008/02/23(土) 15:00:24
ZeroMemoryじゃなくて、memset使おうぜ
178デフォルトの名無しさん:2008/02/23(土) 15:00:24
DirectXに限らない話なのですが、みなさんは煙の表現をどのようにしているんでしょうか
煙草の煙や、飛行機雲のように細長く伸びる煙を掻きたいのですが、
179デフォルトの名無しさん:2008/02/23(土) 15:19:30
基本的にテクスチャだろ。リアルタイムレンダリングで粒子の計算とか出来んし。
研究分野ではそういうこともやってるが、時間がかかりすぎるのが難点。
180デフォルトの名無しさん:2008/02/23(土) 15:24:35
>>177
将来MS様の構造体の初期化方法が変わったらどうすんだ!

・・・ないね・・・ないw
181デフォルトの名無しさん:2008/02/23(土) 15:29:10
>>180
それだったらZeroMemoryもあやうい
182デフォルトの名無しさん:2008/02/23(土) 17:38:40
STRUCT obj = {};
this->obj = obj;
183デフォルトの名無しさん:2008/02/23(土) 18:34:09
>>179
テクスチャを一番初めに考えたんですが、
角度によって濃さが変わって見えるようにするところで詰まっていました
なにか解決策があるんでしょうか
184デフォルトの名無しさん:2008/02/23(土) 18:39:09
煙をたくさん並べる
185デフォルトの名無しさん:2008/02/23(土) 18:46:39
ビルボードの仕組みでやってるんだよな?
それでも色が変わるならライティングがまずいかカメラに近すぎ。
186デフォルトの名無しさん:2008/02/23(土) 19:38:45
普通は煙にライトなんてかけないだろ
まあ昼夜などの周りの状況に応じて煙の色を変える必要はあるだろうが。
半透明である程度はごまかせる。
187デフォルトの名無しさん:2008/02/23(土) 19:42:55
煙にもライトをかけないと、立体感が出ないと思う
188デフォルトの名無しさん:2008/02/23(土) 19:49:44
ビルボードに立体感要求されてもな
189デフォルトの名無しさん:2008/02/23(土) 21:41:23
スプライトのアルファブレンディングについて質問です。


現在スプライトの点滅処理をしようとしているのですが、
(画像はPNGで背景をPhotoShopの透明部分として出力してあります)
スプライト描画時に

SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 )

と設定してPNG画像自体の透明部分を抜くと
アルファ値によるアルファブレンディングができず、

SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 )

と設定するとアルファ値によるアルファブレンディングはできるのですが、
PNG画像自体の透明部分が抜けません。

SetTextureStageStateの引数を色々調べて試して、
なんとか問題と思われる部分を上記の2つに絞ってみたのですが、
一向に解決できないので、よければアドバイスお願いします
190デフォルトの名無しさん:2008/02/23(土) 21:47:45
>>183
Particle Illusion というソフトが参考になる
ビルボードを重ねて煙などのエフェクトを作っている

ビルボードの中心座標を3Dで記憶しておけば
見る角度がかわってもボリューム感があるようになるよ
191デフォルトの名無しさん:2008/02/23(土) 22:30:11
割と頻出だと思うが
http://watch.impress.co.jp/game%2Fdocs/20051207/3dwa.htm
>疑似ボリュームパーティクルと疑似光散乱
を参照
>>186,188
192デフォルトの名無しさん:2008/02/23(土) 23:29:41
>>191
その元テクスチャはボリュームパーティクル前提だからそっけないけど
普通は元テクスチャの状態で陰影がつけられるからな
まあどうしてもパーティクルで表現したいんなら使うのもありかもね
193デフォルトの名無しさん:2008/02/24(日) 00:26:10
煙にZ値入れてやる奴ってなかったっけ?
ってまあそんなキモイ煙誰も望んでないならあんま頑張る必要ないと思うけどw

ていうか、端折れるところは端折ったらいいと思うよ
ユーザはそんなところ見てないから
グラに関してはサボれるところはできるだけサボる
その代わり全体をよくしようぜ
その裁量がないポジにいるときはグラ頑張ったらいいとおもうけど
そうでないなら頑張る必要ないよ
194デフォルトの名無しさん:2008/02/24(日) 00:50:40
>>189
元画像を抜きではなくてアルファ付きイメージで出力すればいいと思うよ
195デフォルトの名無しさん:2008/02/24(日) 02:58:07
>>189
D3DTOP_MODULATE
196189:2008/02/24(日) 07:15:39
>>194,195

SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE)でできました!
アドバイスありがとうございました!
197デフォルトの名無しさん:2008/02/26(火) 10:02:01
質問です。
ttp://uproda.2ch-library.com/src/lib012542.jpg
このように、キャラクターのグラフィックに他のテスクチャを重ねて表示したいのですが、
どのようにすればいいのでしょうか。
また、キャラクタの輪郭部のみが残って表示されているのですが、
どのように設定するのかわかりません。
アドバイス等、よろしくお願いいたします。
198デフォルトの名無しさん:2008/02/26(火) 11:24:29
>>197
スクエニに通報しますた
199デフォルトの名無しさん:2008/02/26(火) 12:38:16
パレットいじるがいいさ
200デフォルトの名無しさん:2008/02/26(火) 16:33:39
>>197
マスクかけたいとか思ってるかもしれないけどナンセンス。

昔風だとパレット操作
今風だと頂点カラー変更
の予感

ツクールとかの人は、色違いの画像も持ってたり
201デフォルトの名無しさん:2008/02/26(火) 17:28:48
200は何を言ってるんだろう
202デフォルトの名無しさん:2008/02/26(火) 23:26:48
単なる重ね合わせのハナシじゃないのかコレ
203デフォルトの名無しさん:2008/02/26(火) 23:29:46
>>197
マスクとかアルファとかでぐぐれ
DirectX以前にそういう事がわかってないと話にならない
204デフォルトの名無しさん:2008/02/27(水) 04:15:58
HDRレンダリングについて教えてください
1.0を越える光や負の値を浮動小数フォーマットのテクスチャにレンダリングすると思うんですが
そのテクスチャを使ってもピクセルシェーダから出力するとき結局0〜1にクランプされて意味ないのでは?と考えてしまっています
ブルームとかトーンマッピングというのが関係しているのでしょうか?
具体的にどのようなことができるのかわかっていません
初歩的な質問かもしれませんがよろしくお願いします
205デフォルトの名無しさん:2008/02/27(水) 04:33:48
>>204
そこまで用語を知ってるなら、HDRとブルームで検索すれば
いくらでも説明あるだろう。

ブルームも大事だが、一番重要なのは環境マッピングかな。
206デフォルトの名無しさん:2008/02/27(水) 14:31:45
ぐぐってもよくわからなかったので質問したのですが
とりあえずHDRは諦めます
ありがとうございました
207197:2008/02/27(水) 23:20:30
>>198-203
どうにかなりました。ありがとうございました。
208デフォルトの名無しさん:2008/02/28(木) 11:43:09
ttp://www008.upp.so-net.ne.jp/nobel-ayaya/direct.jpg

novemver2007のSDKをインストールしたんですが
DirectXControlPannelでDirectMusicの部分をデバッグモードにしたいんですが
上のようになって変更できません、、、何が原因か予想付く方がいらっしゃったら助けてください('A`)
209デフォルトの名無しさん:2008/02/28(木) 13:59:00
>>208
ヒント:Nov2007のリリースノート
210デフォルトの名無しさん:2008/02/28(木) 14:18:14
DirectMusicなんて意味ないよ
211208:2008/02/28(木) 15:09:18
>>209
ありがとうございます、前バージョンの物を入れたらDirectMusicのモード関しては動かすことが出来ました。
ですが肝心のサンプルプログラムは動かない…

ちなみにそのプログラムはMicrosoft DirectX 9.0 SDK Update (Summer 2003) で書かれているんですが
やはり、他言語のようにDirectXSDKのバージョンが違うとコードによってはエラーになるとかあるんでしょうか?

やっぱりWebでの学習はあきらめて最近の参考書を買って勉強した方がいいのかな、、、
212デフォルトの名無しさん:2008/02/28(木) 15:12:27
DirectXに他バージョンとの互換性など期待しない方がいい
213デフォルトの名無しさん:2008/02/28(木) 22:00:37
direct3d mobileのスプライトを使った小規模なサンプルプログラムがある場所を教えてください
214デフォルトの名無しさん:2008/03/01(土) 12:39:26
画像サイズが2のべき乗になっていない、例えばデジカメの写真などを読み込んで表示したい場合、
どのようにすればよいのでしょうか?
215デフォルトの名無しさん:2008/03/01(土) 13:06:35
読み込んで描画すればいい。
それ以上でもそれ以下でもない。
216デフォルトの名無しさん:2008/03/01(土) 13:23:23
つーか、画像サイズが2のべき乗ってどういう意味だ?
画素数が2のべき乗っていうなら判るがサイズなんてmmで測るかptで測るかでも違うじゃないか。
217デフォルトの名無しさん:2008/03/01(土) 13:44:40
くだらん突っ込みを入れるなよ
218デフォルトの名無しさん:2008/03/01(土) 14:01:42
CreateDeviceした後にウィンドウサイズを変えると描画内容が伸び縮みして描画できる広さが変わらないんですが、
どうすればウィンドウサイズ変えてウィンドウ外の描画内容見たりできますか?
219デフォルトの名無しさん:2008/03/01(土) 14:10:55
まずは描画元のサイズをきっちり管理しろ。
220デフォルトの名無しさん:2008/03/01(土) 15:07:01
描画元??
221デフォルトの名無しさん:2008/03/01(土) 17:53:29
>>216
一般的に画像サイズと言った場合は普通はピクセル数だよ
そんな事を仕事で言ったら笑われるぞ?
222216:2008/03/01(土) 18:41:07
そう? 私の仕事では、まず寸法なんだけど。
「半径100μmだから差し渡し200μmの画像なんだけど、
画素サイズ125nmだと画像1枚何msecで処理できる?」
てなもんで。
# まぁ表示は二の次なんで、このスレのお歴々とは違うのだろうけどねw
223デフォルトの名無しさん:2008/03/01(土) 18:52:32
お前はここが何のスレだと思ってるんだ
224デフォルトの名無しさん:2008/03/01(土) 19:56:07
DirectXスレで画像サイズと聞いて単位mmだと思うのか。
あほですな。
225デフォルトの名無しさん:2008/03/01(土) 19:58:40
普通インチだよな
226デフォルトの名無しさん:2008/03/01(土) 20:02:53
バイトだろ。
227デフォルトの名無しさん:2008/03/01(土) 20:03:03
>>222
まあ君はこんな所で電波発言してないで、画像処理ソフト関係のスレに行けばいいと思うよ

○umの画像とやらが何ピクセルを指すのかわからなきゃDirectX的に何の意味もないしな
228デフォルトの名無しさん:2008/03/01(土) 20:11:44
DTP職の奴と話をすると全く不要な場面でもdpi持ち出すから困る
229デフォルトの名無しさん:2008/03/01(土) 20:21:46
>>219どうゆうことですか?
230デフォルトの名無しさん:2008/03/01(土) 20:28:34
>>218
デバイスを新しいクライアントサイズでResetしろ
231デフォルトの名無しさん:2008/03/01(土) 20:32:31
原稿サイズ、プリントサイズ→ミリ、インチ
画像サイズ→ドット、ピクセル

普通はこう。
画像サイズと単体で聞いてmmとか言い出すのは電波さん。
232216:2008/03/01(土) 20:35:05
惜しい。電波じゃなくてレーザー波なんだ。
233デフォルトの名無しさん:2008/03/01(土) 20:37:38
(・∀・)デテケ!!
234デフォルトの名無しさん:2008/03/01(土) 20:37:50
>>232
つまんね
ごまかしたい気持ちはわかるが、これ以上恥の上塗りする前に消えた方がいいよ
235216:2008/03/01(土) 20:50:18
誤魔化すも何も、扱う画像の光源は215nmレーザだったりするから洒落てみたんですがw
まぁ、自然光では撮像できない世界を知らない人にはそれさえ理解できないか。
236デフォルトの名無しさん:2008/03/01(土) 21:06:16
中二にしてはずいぶん専門的な分野を専攻されているようで
237デフォルトの名無しさん:2008/03/01(土) 21:20:26
ここはDirectXのスレです。。
238デフォルトの名無しさん:2008/03/01(土) 21:47:03
また何の関係もない自分の脳内世界を語るキチガイがでたか。
スレタイ見直してから出直して来いよ。
239デフォルトの名無しさん:2008/03/01(土) 21:51:33
自分が一生懸命考えた爆笑モノの駄洒落が、他人には全く受け入れてもらえずに寂しいんだろ
もうそっとしといてやれよ
240デフォルトの名無しさん:2008/03/01(土) 22:08:28
>>238
出直してこられても迷惑だけどな
>>216みたいな言語障害者はもう来ないでいいよ
241デフォルトの名無しさん:2008/03/01(土) 22:30:23
画像を使わずに、線や矩形や円をスプライトに描画するにはどうすればいいですか?
242デフォルトの名無しさん:2008/03/01(土) 22:32:11
そもそもDirectXにスプライトなど存在しない
243241:2008/03/01(土) 22:58:39
LPD3DXSPRITEとLPDIRECT3DTEXTURE9で画像を描画してるんですが、
(2Dです。3D描画はやったことないです)
画像を描画するやり方しか分からなくて、
デバッグ用に単純な矩形や円を描画するときも、いちいち矩形や円の画像を用意してます。
プログラムで描画する方法があったら教えてほしいです。
244デフォルトの名無しさん:2008/03/01(土) 23:06:19
>>243画像をどうやって表示してるのか知らんけど、Primitive系でよくね?
画像も結構早く描画してくれるし
245241:2008/03/01(土) 23:30:15
>>244
ありがとうございます。
DirectX始めたばかりで、関数も全然知らないんですが、
DrawPrimitiveとかのことでしょうか。

今やってる描画は簡単に書くと、こんな感じです。
LPDIRECT3DDEVICE9 _pDevice;
LPD3DXSPRITE _pSprite;
LPDIRECT3DTEXTURE9 _pTexture;

_pDevice->BeginScene();
_pSprite->Begin(D3DXSPRITE_ALPHABLEND);

_pSprite->Draw(_pTexture, &_rect, &_start, &pos, _colorEffect);//引数は適当に

_pSprite->End();
_pDevice->EndScene();
_pDevice->Present( NULL, NULL, NULL, NULL );

これ以外の描画方法はまだやったことがありません。
Primitive系というのをやってみます。
246デフォルトの名無しさん:2008/03/01(土) 23:39:30
初心者なのになんでチュートリアルすらやろうとしないんだ?
247241:2008/03/01(土) 23:46:44
>>246
SDKに入ってるんでしょうか?やってみます。
初心者用の本を買って、その通りにインストールして設定して、
本の通りに進めてるだけなので、それ以外のことはまだ知らないんです。
248デフォルトの名無しさん:2008/03/01(土) 23:54:39
あんな動かすのに一苦労するようなバージョンもあってないサンプルはイラネ
249デフォルトの名無しさん:2008/03/02(日) 00:17:37
待て。アンダースコア始まりに突っ込むのは禁止だ。グローバル変数とは確定していない。
250デフォルトの名無しさん:2008/03/02(日) 02:05:15
どこの誤爆だ
アンスコがどうしたって?
251デフォルトの名無しさん:2008/03/02(日) 04:45:47
誤爆じゃないっしょ。
ファイルスコープの変数ならアンダーバー+小文字も予約されているけれど、
ローカル変数ならOKっていう、知識を披露するための前振りでしょ。
252デフォルトの名無しさん:2008/03/02(日) 08:26:42
アンスコ=見せパン(見せてもいいパンツ)=グローバル推奨
253デフォルトの名無しさん:2008/03/02(日) 10:13:24
逆だろ。そんなもんコート外で見せるなってことでローカルのみ許可なんだよ。
254デフォルトの名無しさん:2008/03/02(日) 10:26:02
>>245
ttp://www.shader.jp/xoops/html/masafumi/directx9.htm
俺はここを参考にさせてもらった。自前のゲームではSpriteより描画が速かった。
まぁ、どんな物でもいえるわけじゃないだろうが・・・
255デフォルトの名無しさん:2008/03/02(日) 18:08:40
MoveToEx(hdc,0, 0,NULL);
LineTo(hdc,800, 400);

こんな感じで直線引くと最前面に描画されちゃうのですが、
最背面に描画するにはどうやったらいいのでしょう?
256デフォルトの名無しさん:2008/03/02(日) 18:26:46
最初に線描画すればいいんじゃね?
257255:2008/03/02(日) 18:34:04
>>256
if( SUCCEEDED( pDevice->BeginScene() ) ){
MoveToEx(hdc,0, 0,NULL);
LineTo(hdc,800, 400);

画像表示させる関数
pDevice->EndScene();
}

かなりはしょったけど、こうやれってことだよね?
やってるんだけど、どうしても最前面に出てしまう。
258デフォルトの名無しさん:2008/03/02(日) 18:48:34
BeginScene - EndSceneの外で使ってはどうか?
259Visual C++ Runtime Libraryってエラーが出てネットゲーム強制終了:2008/03/02(日) 19:33:06
ネットゲームやっているとhttp://imepita.jp/20080301/780070なエラーが出ます
厨房なのでググッてもよく分かりません。丁寧にお教え願います。
お願いいたします。
260デフォルトの名無しさん:2008/03/02(日) 19:39:48
そのメッセージは 「エラー終了」 としか言いようがないもので、
何らかのエラーが起きて、そこから復帰できなかったか、
あるいは復帰する必要があるのにそういう風にプログラムを組めていなかったか、
といったところだろう、ということしか言えない。

メモリ不足の可能性もあるけど、何らかのバグの可能性もある。
261デフォルトの名無しさん:2008/03/02(日) 19:46:12
>>259
開発元にバグレポート出すといいかも
262255:2008/03/02(日) 20:05:02
>>258
>BeginScene - EndSceneの外で使ってはどうか?
やってみたが結果変わらず・・・。

HDC hdc;//デバイスコンテキスト
HPEN hPen = NULL;//ペン
hdc = GetDC(hWnd);
hPen = CreatePen(PS_SOLID, 1, RGB(255, 255, 255));//ペンの設定
SelectObject(hdc, hPen);//ペンを反映
MoveToEx(hdc,0, 0,NULL);//描画
LineTo(hdc,800, 400);

手順はこれだけなんだが、他に設定しないといけないのだろうか?
ググっても出ないっす。
263デフォルトの名無しさん:2008/03/02(日) 20:29:40
>>259ですが開発元は対処してくれないかもしれません。他に方法ありますか?
264デフォルトの名無しさん:2008/03/02(日) 20:31:05
まず、エラーの出た状況を詳しく。
265デフォルトの名無しさん:2008/03/02(日) 21:17:14
>開発元は対処してくれないかもしれません
なんでだよ

どうせあやしい事してるからだろ
266デフォルトの名無しさん:2008/03/02(日) 21:34:17
>>263
升でもやってんのか?とっととうせろよ
267デフォルトの名無しさん:2008/03/02(日) 21:37:09
そもそも何のゲームやってるかぐらい書けよ。
自分は詳しく書かないくせに丁寧に教えろとか、社会を舐めるなよ小僧。
268デフォルトの名無しさん:2008/03/02(日) 21:37:49
キャプ見ればそのくらい分かるだろ
269デフォルトの名無しさん:2008/03/02(日) 21:41:24
厨房のするネトゲなんて知るかよ
270デフォルトの名無しさん:2008/03/02(日) 21:42:15
そもそもなんでこのスレなんだよ。スレ違いだボケが。
271デフォルトの名無しさん:2008/03/02(日) 21:43:40
よく判らんがずうずうしい教えて君視ね
272デフォルトの名無しさん:2008/03/02(日) 22:08:51
>>262
GetDC()って、IDirect3DSurface9::GetDC()じゃないの?
君が取得しているのは、ウインドウのクライアント領域のHDCであって
Direct3Dが描画するのは、D3Dのレンダリングターゲットな訳だから
レンダリングターゲットのHDCじゃなきゃ駄目じゃないのか?
273255:2008/03/02(日) 23:44:47
>>272
あ〜なるほど。確かにウィンドウのHDCでした。
情報ありがとうございます。
ちょっと調べてきます。
274デフォルトの名無しさん:2008/03/02(日) 23:46:24
仮にバックバッファにした場合でもGetDCで取得したもんに描画できるのか?
いや、でも、フロントバッファには描画できてんだからできんのかな?

俺、もう10年近くDirectX弄ってるけどGetDCと組み合わせてなにやらやったことねぇや
マジで
275デフォルトの名無しさん:2008/03/02(日) 23:52:36
WindowのHDCへ描画とキャッシング
Direct3D側の描画
メッセージループから抜けるタイミングでWindowのHDCのキューがフラッシュ
276デフォルトの名無しさん:2008/03/03(月) 11:18:14
GdiFlushだっけか
普段意識しないな
277デフォルトの名無しさん:2008/03/03(月) 17:49:23
別のパソコン上でDirectXを使ったプログラムを起動しようとするとD3dx9_24.dllが見つからないというエラーが出ます。
そのパソコンはOSはWindowsXPでDirectX 9.0cが入っていますが、DirectX 9.0cにもいくつか種類があると言うことなのでしょうか?

278デフォルトの名無しさん:2008/03/03(月) 17:55:57
そうです
279デフォルトの名無しさん:2008/03/03(月) 23:54:28
>>277
ランタイムライブラリの詰め合わせがMSのサイトのどっかにあるからとってこい
280デフォルトの名無しさん:2008/03/03(月) 23:56:37
281デフォルトの名無しさん:2008/03/04(火) 05:13:54
282デフォルトの名無しさん:2008/03/04(火) 09:56:13
まとめて配布しろよ
馬鹿か?
283デフォルトの名無しさん:2008/03/04(火) 17:16:29
>>282
まとめて配布してんのが>>280-281じゃね?
284デフォルトの名無しさん:2008/03/04(火) 20:02:50
DLLを同梱しろってことでは
ライセンス的に大丈夫かは知らんが
285デフォルトの名無しさん:2008/03/04(火) 21:39:21
ID3DXSprite#Draw(IDirect3DTexture9)で平面を描き、
IDirect3DDevice9#DrawPrimitiveで四面体を描いてるですが、

D3DXMatrixLookAtLH( &matView, &vecEyePt, &vecLookatPt, &vecUpVec );
を使ってどうViewを変えても、四面体がスプライトの奥に見えてしまいます。

vecEyePtのX座標を凄くプラスにしても、凄くマイナスにしても、
Y座標を凄くプラスにしても、凄くマイナスにしても、
四面体がスプライトより奥に見えるのですが、なんででしょうか。
286デフォルトの名無しさん:2008/03/04(火) 21:41:28
Zの問題だろ
287285:2008/03/04(火) 22:00:45
Zも同じです。
vecEyePtのZ座標を、プラスマイナス反転しても、
左右反転するだけで、後は変わらず、
四面体がスプライトの裏側にあるように見えてしまいます。

初めて3D描画をしたので、まあ色々と自信はないんですが。。
288デフォルトの名無しさん:2008/03/04(火) 22:05:54
ディスプレイの表面にマジックで文字を書いて、
顔を近づけたり離したりしても表示されている内容が奥に見えると言っているわけだが、
なんでそんなに頭が悪いの?
289デフォルトの名無しさん:2008/03/04(火) 22:12:41
>>288
例えが悪い

>>287
モニタを下から覗き込んでもパンツは見えないんだよ。
分かったか?
290デフォルトの名無しさん:2008/03/04(火) 22:18:30
>>287
spriteとdrawprimitiveは描画されるタイミングが違うぞ
291285:2008/03/04(火) 22:23:23
言い方が悪かったかもしれませんが、勘違いしてるような。

スプライトは平面だけど、
IDirect3DDevice9#DrawPrimitiveの四面体は立体で、
Z=0平面上にあるわけじゃないです(たぶん)
292デフォルトの名無しさん:2008/03/04(火) 22:30:13
すいません。
本に書いてあるとおり、libファイルを追加しようと
「構成プロパティ」⇒「リンカ」⇒「入力」としたいのですが、
リンカという項目がそもそもありません。
(表示されないのです、C/C++の下には何も無いのです。)
これはVC++のインストールの段階での問題でしょうか??

くだらない質問でもうしわけありません。
293285:2008/03/04(火) 22:38:55
>>290
おお。たぶんそれのような気がします。
位置関係に関わらず、
DrawPrimitiveがSpriteに上書きされてる感じです。

基本2Dのゲームを作りたくて、スプライト描画してたんですが、
エフェクトに3Dを使おうと思ったんです。
スプライトと3Dは同居できないのでしょうか?

>>292
ちょうど参考書に載ってたので。

Visual Studio.NET 2003の場合、メニューより、プロジェクト→プロパティ→リンカ→入力
Visual C++6.0の場合、メニューより、プロジェクト→設定→リンク
294デフォルトの名無しさん:2008/03/04(火) 22:43:06
>>293
ありがとうございます。
ソリューションエクスプローラーからみえる
ファイルのプロパティを右クリックして見ていました。

しかし、本はメニューから選ぶのは書いてなかった・・・。
実は以前はこの本のとおりにやって普通に出たと思うのですが・・・。
なんかちょっと気になるな。
295デフォルトの名無しさん:2008/03/04(火) 22:44:09
スプライトの座標のZを1にする
296デフォルトの名無しさん:2008/03/04(火) 22:45:09
>>293
すいません。
プロジェクトを右クリックだったのです。
なんて馬鹿なんだ。
忘れないようにメモを書いて保存しておきます・・・。
297デフォルトの名無しさん:2008/03/04(火) 23:06:12
>>289
お前天才だな
298デフォルトの名無しさん:2008/03/04(火) 23:16:12
DirectX で点線を描画するには皆さんどうしているのでしょうか?
OpenGL で以下にしていることがDirectXでできなくて困っています。

glEnable( GL_LINE_STIPPLE) ;
glLineStipple( 1, 0xF0F0 );
・・・
glDisable( GL_LINE_STIPPLE );

よろしくお願いします。
299デフォルトの名無しさん:2008/03/04(火) 23:20:58
DirectXでできる細かいことよくわからないからテクスチャ貼っちゃうよ!
300285:2008/03/05(水) 00:44:05
>>295
スプライトのZ座標を色々動かしましたが変わりません。

>>290さんの言うとおり、描画タイミングの問題だと思います。
DrawPrimitiveをカメラで撮った画像に、
Sprite平面をカメラで撮った画像を上書きしてる感じです。
301デフォルトの名無しさん:2008/03/05(水) 00:55:13
>>296
ID3DXLineで似たようなことが出来そうだけどね。
まあ後はShader使うかだな
302デフォルトの名無しさん:2008/03/05(水) 07:46:31
>>300
ID3DXSprite::Endは?
303285:2008/03/05(水) 07:59:43
ID3DXSprite::Endもしてます。
304デフォルトの名無しさん:2008/03/05(水) 08:15:03
Draw、End、DrawPrimitiveという順番で?
305デフォルトの名無しさん:2008/03/05(水) 16:24:21
Zバッファーをオンにしてみたらどう?
306デフォルトの名無しさん:2008/03/05(水) 17:03:08
そもそもスプライトって常に最前面に描かれる仕様じゃなかったっけ?
そういうときはビルボーディングとかやるんじゃなかったかな。
307デフォルトの名無しさん:2008/03/05(水) 17:34:41
スプライトって何ですか?
308デフォルトの名無しさん:2008/03/05(水) 17:40:09
寝てる間に仕事を仕上げてくれる小人さん
309デフォルトの名無しさん:2008/03/05(水) 17:40:38
レモンライムの爽やかなテイスト、強炭酸のシャープでクリアーな喉ごし、純水使用でフルリニューアル。
310デフォルトの名無しさん:2008/03/05(水) 18:03:53
ttp://platz.jp/~moal/tblend.html
このサイト見ると描画する時、画面にアルファ値が書き込まれない
みたいですけど、
・画面にアルファ値を書き込む
・読み込んだテクスチャのアルファデータを変える
のどちらかをやる方ありますか?
311デフォルトの名無しさん:2008/03/05(水) 18:29:21
>>310
描画先がα成分の含まれるフォーマットなら書き込まれる。
312デフォルトの名無しさん:2008/03/05(水) 20:29:16
HLSLの質問ってここでもOKでしょうか?
....\hoge.fx(54): error X4004: program too complex; there are more active values than registers
とかいうエラーが出てコンパイルに失敗します。
HLSL上でのスキニングをやろうとしたんですが、
HLSLコード上での変数宣言をなるべく減らしてもダメでした・・・
こういうときってどうやってレジスタ数を節約すればいいのでしょうか?
313デフォルトの名無しさん:2008/03/05(水) 20:39:48
ボーン数を減らすしかあるまい
頂点シェーダ2.0以上で定数レジスタが256個
4x3行列を使ったとしても使えるのはボーン80本弱か?
ローポリなら十分な数だとは思うが
それ以上のボーンを扱いたいならCPUで計算だな
314312:2008/03/05(水) 21:07:16
>>313
ありがとうございます。
が、ボーン数は28しか指定してないです;;

struct BONE_NODE_STATE_LERP {
  float4 vec4GlobalPositionAndScaling;
  float4 vec4RotationQuaternion;
  float4 vec4BoneBaseOffset;
};
こんな構造体の28個の配列を宣言してます。(28はどうしても必要なんで妥協できないですorz)

for文でブレンド数だけループさせてるとこを
for文使わずにブレンド数に2を指定したらエラーは起こらなくなりました。
for文ってあんま良くないのかなぁ・・・
315312:2008/03/05(水) 21:09:05
意味不明なんで修正
×ブレンド数に2を指定したら
○ブレンド数2に限定して2つ同じ処理書いたら
316285:2008/03/05(水) 21:20:15
>>304
Draw、DrawPrimitive、Endという順でやってました。
Draw、End、DrawPrimitiveの順にしたところ、
今度は逆にスプライトがDrawPrimitiveに隠れるようになってしまいました。
スプライトは3Dと同居できないのかもしれません。

参考書に、ポリゴンにテクスチャーを貼り付ける方法が書いてあったので、
スプライトをやめて、そっちで2D画像を描こうかと思います。
>>321さんの言う、Shaderとはそのことでしょうか。
というかスプライトって実はマイナーなんでしょうか。
317デフォルトの名無しさん:2008/03/05(水) 21:27:02
>>316
2D処理だけやるならSprite使う方が楽
3Dと同居させたいならスプライトもプリミティブ化した方が便利

まあ、例えば3D画面の上に2Dでフレームやら体力ゲージやら
表示させるだけなら同居も可能だし
318デフォルトの名無しさん:2008/03/05(水) 23:41:02
298 だけど
Lineクラスを使うのか?
Pattern プロパティが使えそうな気がするのだが、何を設定すれば良いのか?
調査中...
大量の線があるとき、描画速度は大丈夫か?心配事てんこ盛り...
319デフォルトの名無しさん:2008/03/06(木) 00:01:30
>>318
あんなケッタイなもん覚えるより自分で書いた方が早いって。
既にレスがあるように自分でパターンテクスチャ用意して
頂点のスクリーン座標からUVを算出するだけじゃん。
320デフォルトの名無しさん:2008/03/06(木) 02:01:13
>>313
モデルを分割すりゃいいような気がするんだけど・・・
ぶち込んだメッシュに必要なボーンの情報があればいいわけで・・・
321デフォルトの名無しさん:2008/03/06(木) 21:57:42
>>319
そうなのか...DirectX はなにせ初めてなもんで...
ありがとう、そっちでやってみる。
322デフォルトの名無しさん:2008/03/06(木) 23:42:03
スレッドにした無限ループで描画しています。

Windowの終了ボタンが押されたときは、
ウィンドウプロシージャ内でループ停止フラグを立てた後、
Sleepして1ループ終わるのを待ってから、
デバイスを解放したいんですが、
ウィンドウプロシージャ内でSleepすると、
描画ループ内の、IDirect3DDevice9::EndScene();
も一緒に止まってしまいます。
なんででしょうか?
323デフォルトの名無しさん:2008/03/06(木) 23:50:53
>>322
Direct3DDeviceのマルチスレッドに関する注意は読んだ?
何かドキュメントに色々あった気がするけど。
324デフォルトの名無しさん:2008/03/07(金) 17:15:37
出力されたXファイルを見ていると、たいがいヘッダーの後に
Header {
    1;
    0;
    1;
}
みたいなのが付いているんですが
これはいったいなんですか?
SDKのドキュメント読んでもXファイルテンプレートの項にはどこにも書いてないですし、
いったいどんなテンプレートで書いてあるのかもよくわかりません、。

消しても問題なく動くので、よけいよくわからないのですが…
325デフォルトの名無しさん:2008/03/07(金) 17:29:50
そんなの
出力をしているソフトの製作者に聞け
326デフォルトの名無しさん:2008/03/07(金) 21:50:00
ttp://www008.upp.so-net.ne.jp/nobel-ayaya/my3dlib.rar

15才から始めるDirectX3Dゲームプログラミングという本で学習しています。
↑のコードなんですが、参考書通りに打ってビルドするとエラーが出てしまいます。
エラー通りに型キャストして試すとプログラムが今度は強制終了してしまいます。
本の環境はVC++2005、sdkがfeb2007、自分の環境はVC++2008、sdkがnove2007です。
サンプル通りに打ってダメということは環境の差でしょうか、、、
327326:2008/03/07(金) 21:51:21
書き忘れました、プロジェクトの依存ファイルはd3d9.lib d3dx9.lib winmm.lib、文字セットはunicodeです。
328デフォルトの名無しさん:2008/03/07(金) 21:55:57
>>326
なんでバージョンまでわかってるのに別バージョン入れるんだ?
何もわからない馬鹿ならまずは環境あわせるぐらいしとけ
329デフォルトの名無しさん:2008/03/07(金) 22:09:48
sdkのバージョンの違いの可能性が高いけど、
本に付いてるサンプルもすべて実行できないなら環境の問題、
本のほうは動くなら入力したコードとプロジェクト設定を見直す。後MBCSで試してみるとか。
まぁ本が間違ってる可能性もあるけどな。
330デフォルトの名無しさん:2008/03/07(金) 22:11:06
ちなみにビルド時に出たエラーは何?
331デフォルトの名無しさん:2008/03/07(金) 22:43:34
Vector2をVector3にキャストしますた
332326:2008/03/07(金) 22:43:50
>>328
すいません、、この部分まで正常に動作していたので、バージョンは最新のままにしていました。


>>329-330
このコードより前の分は動きました。
MBCSで試してみましたけどダメでした、、、

エラーは↓です。
c:\documents and settings\*****\デスクトップ\my3dlib\my3dlib.cpp(123) : error C2664: 'D3DXCreateTextureFromFileA' : 2 番目の引数を 'LPCTSTR' から 'LPCSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
c:\documents and settings\*****\デスクトップ\my3dlib\my3dlib.cpp(141) : error C2664: 'IDirect3DDevice9::SetTexture' : 2 番目の引数を 'LPDIRECT3DTEXTURE9 *' から 'IDirect3DBaseTexture9 *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
333デフォルトの名無しさん:2008/03/07(金) 22:46:12
中身が違うものにキャストしてもなw
334デフォルトの名無しさん:2008/03/07(金) 22:48:28
とりあえず、1番目のエラーに関しては、マルチバイト文字セットを使えと
335デフォルトの名無しさん:2008/03/07(金) 23:01:03
>>332
D3DXCreateTextureFromFileAの(LPCTSTR)は不要。
その少し上の配列確保のとこで==が=になってる。
SetTextureのとこの&はいらない。
336デフォルトの名無しさん:2008/03/07(金) 23:09:22
Direct3Dでクリッピングかけるのってどうしたらいいんだ・・・
337デフォルトの名無しさん:2008/03/07(金) 23:15:40
>>335
うわ、、、動きました。
普通にタイプミスとかホント迷惑かけてすいませんでした、、、
じゃあバージョンアップで(LPCTSTR)のキャストが不要になったと考えて良いんですかね。
338デフォルトの名無しさん:2008/03/08(土) 00:50:55
クリッピングといっても千差万別なのだが
339デフォルトの名無しさん:2008/03/08(土) 01:25:30
>>336
自力で
340デフォルトの名無しさん:2008/03/08(土) 01:28:32
>>326
その本、とても15歳で理解できるとは思えないようないいかげんな解説なうえ、
リンカの設定とか、やらないとどんなにがんばってもコンパイルの通らないものの説明が一切ない
アマゾンの評価のほうに設定のしかたがのってたと思う
341デフォルトの名無しさん:2008/03/08(土) 15:21:26
フルスクリーン表示をしたいのですが、
クライアント領域の大きさは固定で、ディスプレイの解像度を変更するか、
クライアント領域をディスプレイ全体に広げて、IDirect3DDevice9::SetTransformで拡大描画するか
迷っています。

それぞれの利点・欠点・特徴や、他にいい方法があったら、
教えてもらえませんか。
ちなみに、作っているのはシューティングゲームです。
342デフォルトの名無しさん:2008/03/08(土) 15:44:58
自分がフルスクリーンにしたい理由が分からないならフルスクリーンにするな。
343デフォルトの名無しさん:2008/03/08(土) 15:47:41
>>341
前者は環境依存
後者は無駄なフィルレート

簡単なんだから両方試してみるのが一番かと
344デフォルトの名無しさん:2008/03/08(土) 15:49:28
開発は最後までデバッグしやすいウィンドウモードでする。
それを少しだけ書き換えて、フルスクリーンでも動くようにするのが基本。
まずはそれをやれ。それで物足りなくなったらそのとき考えろ。
345デフォルトの名無しさん:2008/03/08(土) 16:01:55
>>341
拡大描画はCPUパワー使うべ
346341:2008/03/08(土) 16:13:25
どうもありがとうございます。
処理が重くなると困るので、解像度変更を使おうと思います。

ところで、フルスクリーン、ウィンドウを切り替えるたびに、
デバイスを破棄して、もう一度CreateDeviceしなければいけないのでしょうか。

>>342
ゲームは大画面の方が派手で良いですよ。
347デフォルトの名無しさん:2008/03/08(土) 16:23:33
>>346
>デバイスを破棄して、もう一度CreateDeviceしなければいけないのでしょうか。
そうだべ
ノートPCだと省エネモード起動したら復帰できないべ

>ゲームは大画面の方が派手で良いですよ。
低スペックマシンで動かんべ
348デフォルトの名無しさん:2008/03/08(土) 16:26:45
そこはある程度切り捨てても構わんだろう
349デフォルトの名無しさん:2008/03/08(土) 16:53:34
>>346
CreateDeviceは必要ない
>>347はでたらめ
デバイスリセットするだけで問題ないよ
350341:2008/03/08(土) 16:55:31
>ノートPCだと省エネモード起動したら復帰できないべ
この言葉は初めて使いますが、kwsk

お願いします。
351デフォルトの名無しさん:2008/03/08(土) 16:59:36
>>349
デバイスのロストは2とおりある
一つはMANAGEDで復帰できるタイプ
もう一つはデバイスごとロストするタイプ
この両方を別々にサポートするかデバイスがロストするほうにあわせるか?
でたびたび対立が出来てる

デバイスがロストするほうは条件がよくわからない上に
知らない奴もいるので起きる・起きないで喧嘩になることもしょっちゅう
ただ、BBXの書き込みに綺麗にまとめられてる文があったがいまBBXを見に行ってないため
いまも残ってるかはよくわからない
352デフォルトの名無しさん:2008/03/08(土) 17:01:53
いつの時代の話してんだ
353デフォルトの名無しさん:2008/03/08(土) 17:17:06
え?いま違うの?w
354デフォルトの名無しさん:2008/03/08(土) 17:32:18
デバイスごとロストするってのが起こったことないんだけどなんでだろうか
355デフォルトの名無しさん:2008/03/08(土) 17:33:19
DX10か10.1でその辺解決されるみたいな話があったけど実際どうなんだろ
356デフォルトの名無しさん:2008/03/08(土) 17:35:14
DirectXのC#版では起こらないようになってるんだよな
357デフォルトの名無しさん:2008/03/08(土) 18:04:45
ハードかOSの問題なんじゃね?
そういえばうちのWin98マシンだとResetがうまくいってないっぽいな
まあどうせSetDialogBoxModeとかも正常動作してないからWin98対応は諦めたけど
358デフォルトの名無しさん:2008/03/08(土) 18:11:52
>>354
動いている最中にnViewのモード切り替えるとかすると
Resetでは戻らなかった気がする。
359341:2008/03/08(土) 18:52:34
なかなか面倒な問題ですね。

常に描画前に、IDirect3DDevice9::TestCooperativeLevel()をやって、
D3D_OKなら描画、D3DERR_DEVICELOSTなら待機、
D3DERR_DEVICENOTRESETならResetという感じでしょうか。

うちの環境では、
スクリーンセイバー起動や、ディスプレイの設定変更の場合は、
復帰できるロストでした。
nViewはレアっぽいので、デバイスごとロストはとりあえず放置です。

ただ、フルスクリーン時に、Alt+Tabを押すと、
D3DERR_DEVICELOSTになったままResetできる状態にならないのですが、
この場合はもう一度CreateDeviceするしかないのでしょうか。
360デフォルトの名無しさん:2008/03/08(土) 21:13:56
解像度切り替えとかってデバイスロストしないんだっけ?
これで大丈夫だったらビデオカードの切り替えぐらいしかねぇんじゃねぇかな?>デバイスごとロスト
オンボード→グラボ、グラボ→オンボードとかやってみるのが一番速いかもね
361デフォルトの名無しさん:2008/03/08(土) 21:14:45
SetRenderTargetでレンダターゲットを替えると
ビューポートの設定がロストしてしまうんだが
これは仕様ですか?それともバグ?
362デフォルトの名無しさん:2008/03/08(土) 21:15:44
>>359
>ただ、フルスクリーン時に、Alt+Tabを押すと、
>D3DERR_DEVICELOSTになったままResetできる状態にならないのですが、
>この場合はもう一度CreateDeviceするしかないのでしょうか。
あれ?それでなったっけ?
かなり頻度低かった気がするんだけど?>デバイスごとロスト
363341:2008/03/08(土) 21:35:25
根本的な部分から色々作り直さないといけないかも。鬱だ。。。
まずはちっちゃなプログラムで、実験してみます。
364デフォルトの名無しさん:2008/03/09(日) 11:22:21
復帰できるデバイス消失時に、
IDirect3DDevice9::Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
を行っても、「D3DERR_INVALIDCALL」が返ってしまいます。

以下のことは確認したのですが。
・Resetの引数はデバイス作成時の「D3DPRESENT_PARAMETERS」と同じ(作成は失敗しない)
・TestCooperativeLevel();は「D3DERR_DEVICENOTRESET」を返している
・CreateDeviceしているだけで、リソースは何も作っていない

行き詰まってしまったので、よければ誰かソースを見てもらえませんでしょうか。
http://www.sepia.dti.ne.jp/zigzag/src.zip

※画面の色の設定を変更すると(32ビット→16ビット)復帰できるデバイス消失になります。
365デフォルトの名無しさん:2008/03/09(日) 12:09:27
デバイスはどうやって消失させたんだ?
366デフォルトの名無しさん:2008/03/09(日) 12:11:11
っと、これか
>※画面の色の設定を変更すると(32ビット→16ビット)復帰できるデバイス消失になります。

画面のプロパティから画面情報を変えた場合のロストを復旧させることは基本的にできないはず。
対応するなら、作成したリソースは全部システムメモリに自前で所持して、
Direct3Dの初期化から全部やり直し。
367デフォルトの名無しさん:2008/03/09(日) 13:21:54
>>364
ソースは見たが、D3D8なんでコンパイルは通せなかった。
なので確証なし。
デバイスのリセット前には、D3DPOOL_DEFAULTで作成したリソースは
全てリリースしなければならない。それはやってますか?

>>・CreateDeviceしているだけで、リソースは何も作っていない
例えば、InitBg()でIndexBufferを作っているが、これとかは?

>>366
少なくとも俺の環境ではリセットで復旧出来ているよ。
368デフォルトの名無しさん:2008/03/09(日) 13:34:14
ポストエフェクト用のテンポラリバッファとしてテクスチャを使うケースですが、
今は、これは最初に1回だけ作成して毎フレーム使いまわしていますが
毎フレーム作成・破棄する方にしたいと思っています。
それでテクスチャの作成・破棄って重いでしょうか?
単純にメモリブロックをアロケートするだけなので重くなさそうだと踏んでいるのですが。

※自分でテストすべきなのでしょうが、計測用のベースが無いのでなかなか難しい・・
369デフォルトの名無しさん:2008/03/09(日) 14:30:58
>>366
>画面のプロパティから画面情報を変えた場合のロストを復旧させることは基本的にできないはず。
何の問題も無く出来る。
こんな簡単に出来ることを確かめもせず、
「はず」とかテメエの脳内妄想で見当違いな講釈を垂れて何がやりたいの?
370デフォルトの名無しさん:2008/03/09(日) 14:44:13
>>369
それはドライバ依存だろ?
メモリ破棄されてるのにどう復旧させるんだ?
元になるものが消滅してるんだぞ?
どうせNVIDIAとAMDの最新環境だけテストして終わりなんだろ?
371デフォルトの名無しさん:2008/03/09(日) 14:58:43
>>370
ロストからデバイスを復旧させるのと、破棄されたメモリを元に戻すのが
ごちゃごちゃになっている時点で、根本的に何も分かっていない。
分かっていないのに口を挟むのはやめた方が良い。
372デフォルトの名無しさん:2008/03/09(日) 15:23:56
>>370
デバイスがVRAM上で管理しているメモリはReset前に破棄。
デバイス復帰後イメージ自体はプログラマ側の自己責任で元に戻す。

この過程でメモリ内容が消失していても、デバイスを復帰させる場合の障害にはならないよ。
373デフォルトの名無しさん:2008/03/09(日) 15:26:57
>>371
画面の色かえるとメモリを初期状態にするドライバがあるんだわな
元のデバイスが何だったかすら記録されてない状態で
どうやって復旧させるのか答えてみなよ

あんたが言うロストの復旧が可能というのは
DirectXの関数を呼び出すだけなんだよな?(まさか今更意見かえたりしないよな)
関数は動いてもドライバが初期状態を返してきたら
そのあとどうすんだよ?

もしかしてアンタは全部初期状態でレンダしてんのか?
だからドライバがメモリ破棄しても問題ないのか?

>>372
この話にプログラマ側の自己責任で戻すとかは関係ない
ロストの復旧だけで済むとか言ってる奴がいるんだ
しかも「何の問題も無く出来る」と言い切ったんだ
374デフォルトの名無しさん:2008/03/09(日) 15:28:54
毎回この話題になるとおかしな奴が湧いてくるよな
375デフォルトの名無しさん:2008/03/09(日) 15:31:21
俺も画面プロパティからの変更は記憶があいまい
仕組み的には復帰できない気がするんだけど
32bit→16bitってなんで復帰できるんだろうねw

バックバッファとかマジでどうなってんのかと思う

ちなみにもう1度書いておくとデバイスロストは2通り
1.POOL_MANAGEDの内容が元に戻せる
2.デバイスごとロスト(D3DDeviceシボンヌ、D3DDeviceから作成し直す必要アリ)
この2つは確実に存在するのはわかってるんだけど
この2つがどんな条件で分けられてるのかわからない

これで認識あってる?
ただ、2のほうってたしか表現の違いでごちゃごちゃすんだよな
結果的にはデバイス作り直すしかないんだけど
ポインタの先までまるごと無効になったかどうかは正直覚えてない
作りなおすしかないのはそうだと思うんだけど・・・?
微妙な間違いはあるだろうけどその辺は訂正してくれる形でサポート頼む
376デフォルトの名無しさん:2008/03/09(日) 15:38:03
なんでこれだけ指摘されてもデバイスの復旧と、イメージを元に戻すの混同し続けるんだろう?
あまりにも頭が悪すぎる。
377364:2008/03/09(日) 15:39:06
揉めてるようですが、こちらは解決したので報告します。
原因はマルチスレッドのせいでした。
以下MSDNより。

Direct3D では、IDirect3DDevice9::Reset、IDirect3D9::CreateDevice、
IDirect3DDevice9::TestCooperativeLevel、または IDirect3DDevice9 の
最後の Release の各メソッドは、ウィンドウ メッセージを処理するスレッドと
同じスレッドからのみ呼び出すことができるように設計されている。

なんたること。。。
378デフォルトの名無しさん:2008/03/09(日) 15:39:15
>>375
>32bit→16bitってなんで復帰できるんだろうねw
領域を確保し直しているだけだろ。
内容自体は保証されないんだから。
379デフォルトの名無しさん:2008/03/09(日) 15:40:22
>>378
それってデバイスごと作り直さないといけないタイプ?
POOL_MANAGEDで復帰可能なタイプ?
380デフォルトの名無しさん:2008/03/09(日) 15:41:47
デバイスの普及を不可能にする手っ取り早い手立ては、動作中にビデオカードのドライバを入れ直しでもすれば再現可能。
しかしドライバを入れ直していたら、動作中のプログラムが動かなくなったと文句を言っている奴を見たことはない。
381デフォルトの名無しさん:2008/03/09(日) 15:43:01
>>380
まだそこまでいってなくて
デバイスの復旧が必要な条件がわからないんだ
382デフォルトの名無しさん:2008/03/09(日) 15:46:07
>>381
CTRL+ALT+DELを押してごらん
383デフォルトの名無しさん:2008/03/09(日) 15:47:42
>>379
システムメモリ上に無いデータは、ロストした時点でリソースが破棄されるだけで、
デバイスそのものは作り直す必用はない。
バックバッファは内部的に再確保されているから、内容を書き換えないで出力すると、
ゴミデータが描画されるのが確認出来る。
384デフォルトの名無しさん:2008/03/09(日) 15:52:31
点線描画の件ですが、単純に
PrimitiveType.LineStrip
で点線を描画したいだけなのです。

テクスチャを張って一見点線らしく描画できましたたが、スケールをかけると点線の幅が変わってしまいます。
スケール、ロールを行うシステムなのですが、常に一定間隔の点線描画を得るにはどうやるのでしょうか?

頂点バッファで
CustomVertex.PositionColoredTextured
を使用しましたが、やり方が悪いのでしょうか?
まさかスケールやロールするたびにu, vを計算して設定し直すのではレスポンスが気になりますし...
385デフォルトの名無しさん:2008/03/09(日) 15:56:11
>>383
どっちのパターンに対していってんの?
386デフォルトの名無しさん:2008/03/09(日) 15:57:08
>>384
点をスクリーン座標に変換したあとに描画してみてはどうだろうか?
387デフォルトの名無しさん:2008/03/09(日) 15:57:51
uvはそのつど決める感じで
388デフォルトの名無しさん:2008/03/09(日) 16:05:36
あ、違うか
スクリーン座標上の距離を求めて
そこからUVを決定すればいいんじゃね?
多分、解決ーw
俺は天才だなw
389364:2008/03/09(日) 16:11:54
どうもお世話になりました。
いちお、うちの環境で調べたことを書いときます。
(ビデオカードはGeForce 6600GT)

◆デバイスロスト(復旧可能)になる条件
・ウィンドウモード時にスクリーンセイバー起動
・ウィンドウモード時にディスプレイの設定を変更する(32bit→16bitや、画面90度回転など)
・フルスクリーンモード時にALT + TAB
・フルスクリーンモード時にCTRL+ALT+DEL

◆デバイスロスト(復旧可能)とはどういう状態か
Deviceを作り直す必要はなく、Resetすればまた使える。
POOL_MANAGEDでシステムに作ったリソースは失われない。
POOL_DEFAULTでVRAMに作ったリソースはReset前に解放して再作成する必要がある。

復旧できないロスト(デバイスごと作り直さないといけない状態)は、
一度も起こらず、やり方も分かりませんでした。
390デフォルトの名無しさん:2008/03/09(日) 17:01:24
>復旧できないロスト(デバイスごと作り直さないといけない状態)
オレもなった事ないな
MSのサイトのどこかにドキュメントないかな
391デフォルトの名無しさん:2008/03/09(日) 17:08:33
>>388
たとえばマウスホイールの回転でズームする場合、
マウスホイールのイベントにて、頂点バッファをLockして
u,vを設定し直してUnlock、そして描画ということでしょうか。

DirectXをよく知らないので教えてほしいのですが、
頻繁な頂点バッファの更新はレスポンスに影響しないのでしょうか?
(実際に問題ありかどうかはやって見れば良い話ですが...)
392デフォルトの名無しさん:2008/03/09(日) 17:16:31
>>375の2種類のデバイスロストだが
2のD3DDeviceしぼんぬは無いだろう。これはいわば都市伝説だな。
ID3DDevice9は、GPUに結びついているとはいえ
実態はメインメモリ上のデータにすぎない。
GPUがあろうがなかろうが、ドライバを消そうがどうしようが
こいつ自体が死ぬ直接的な理由にはならんだろ。

分けるとすれば、reset()で救済できるロストと救済できないロストに
なるんじゃないか?
393デフォルトの名無しさん:2008/03/09(日) 17:28:29
例えば、D3Dアプリケーション起動中に
GPUの[プロパティ]->[トラブルシューティング]->[ハードウェアアクセラレータ]を
最大からLv2ぐらいまで落とすと、デバイスはロストしっぱなしになるが
元に戻すと何事も無く復活する。何気にスゲーなD3Dは。
394デフォルトの名無しさん:2008/03/09(日) 18:27:48
>>392
単純に
POOL_MANAGEDで復活可
POOL_MANAGEDで復活否(これができない状態を俺はデバイスごとロストだと思ってる(勘違いの可能性アリ))

ってわけられると思うけどその辺の境目はみんなの中でどうなってんの?
395デフォルトの名無しさん:2008/03/09(日) 19:40:52
391だけど、やってみたらやっぱり遅い...当然か...
毎回u,vを計算し直して頂点バッファにセットして描画はでは遅すぎますね。
396デフォルトの名無しさん:2008/03/09(日) 19:48:18
すいません質問です。

2D用にテクスチャを貼った四角ポリゴン(800x600)を作成したんですが、
Z字に頂点を並べてポリゴンを作ったときにノイズがでます。N字に並べた時はでません。
両方とも出来上がるポリゴンは同じだと思うんですけど、何か違うのでしょうか?

http://up2.viploader.net/pic/src/viploader595819.jpg
397デフォルトの名無しさん:2008/03/09(日) 19:55:38
Win32APIを使い、C++でプログラムを組んでいます。(DirectXも使っています。)

//質問
PCゲームなど、セーブ、ロード画面に演出の一つとして使われている
現在のウィンドウ画面を小さくして表示しているサムネイル画面?
について質問です。
やり方がわかりません。そういうAPIが用意されているのでしょうか?
教えてください。
398デフォルトの名無しさん:2008/03/09(日) 20:10:54
>>397
自分で縮小して表示するだけ
399デフォルトの名無しさん:2008/03/09(日) 20:28:09
インターネットがつなげない友人に頼まれて、directXをフラッシュメモリに入れて

フラッシュメモリ
↓コピー
友人のパソコン

としたのですが、インストールできませんでした。
directXはインターネットが繋げないとインストールできないのでしょうか?
400デフォルトの名無しさん:2008/03/09(日) 20:28:48
元データの段階で表示されてるパーツの小さいのをサムネイル用に用意する
401デフォルトの名無しさん:2008/03/09(日) 20:33:06
>>398
Saveフォルダに、その画像が保存してあったりするので、それはないかと。
その画像をサムネイル画面として表示しているのでは?
そのやり方さえもわからないので。
402デフォルトの名無しさん:2008/03/09(日) 20:34:54
>>401
縮小して保存してるんだろ
403デフォルトの名無しさん:2008/03/09(日) 20:36:00
>>401
自分で縮小してその画像を保存すればいいだろ。
どれだけ頭が悪いんだ?
404デフォルトの名無しさん:2008/03/09(日) 20:37:54
>>400
現在表示しているウィンドウ画面の保存のしかたは、
どうすればよいでしょうか?
405デフォルトの名無しさん:2008/03/09(日) 20:40:09
>>404
DIBにイメージをコピーして好きな画像フォーマットに変換して出力しろ。
406デフォルトの名無しさん:2008/03/09(日) 20:52:50
>>405
DIBとは??
407デフォルトの名無しさん:2008/03/09(日) 20:53:53
BMPのこと
408デフォルトの名無しさん:2008/03/09(日) 20:57:14
表示するキャラや背景の画像データがあるじゃないですか
それを画面の表示状態と同じように並べるじゃないですか
それを縮小するじゃないですか
それを保存すればいいんじゃないですか?
409デフォルトの名無しさん:2008/03/09(日) 21:02:04
>>406
ググれば分かるような単語ですら調べようともせず質問するお前は、プログラマには向いていない。
迷惑にしかならないから、もうやめておけ。
410デフォルトの名無しさん:2008/03/09(日) 21:16:11
>>395
アルファブレンドのアルファ値を設定するようにUVも決まらんものですか?
まあ、それでもダメなら次の手を

ところでいまって
頂点と線一つ一つすべてに対して計算してんの?
例えば100〜200まではこの点線テクスチャ、
200〜300まではこの点線テクスチャ、
300〜400まではこの点線テクスチャ
 ・
 ・
 ・
っていうように使ってみたらどうよ?
411デフォルトの名無しさん:2008/03/09(日) 21:19:54
>>396
パースペクティブコレクトでググルとなんかわかるか?
いや、違ったらスマンコ
412デフォルトの名無しさん:2008/03/09(日) 21:48:57
>>410
>アルファブレンドのアルファ値を設定するようにUVも決まらんものですか?
>頂点と線一つ一つすべてに対して計算してんの?

スクリーン座標系でほぼ点線の間隔が同一になるように各頂点に対してu,vを
計算しました。これ自体も点数が多いのでレスポンスの観点から問題ですね。

>例えば100〜200まではこの点線テクスチャ、
>200〜300まではこの点線テクスチャ、
>300〜400まではこの点線テクスチャ

各頂点は全て3次元的に折れています(各点間は微小です)ので
具体的にどのようにやるのか私には解りかねます...
ロールも3次元的に行いますので、スクリーン座標で点線間隔が一定で
リアルタイム表示というのはDirectXはそもそも無理なのでしょうか?

OpenGLからDirectXへというのはこのあたりに弊害があるのでしょうかね???
413デフォルトの名無しさん:2008/03/09(日) 21:58:51
>>412
>各頂点は全て3次元的に折れています(各点間は微小です)ので


1枚目(網目が超大きい)
u0.0            u0.5            u1.0
− − − − − − − − − − − − −
2枚目(網目が大きい)
−−−−−−−−−−−−−−−−−−−−
3枚目(網目が細かい)
----------------------------------------

ってテクスチャ用意して
スクリーン座標上の点間の距離を調べて
uv(0,0)-uv(1.0,0.0)で見た目等間隔になるように適当に比率だして
繋げりゃいいんじゃねぇの?
414デフォルトの名無しさん:2008/03/09(日) 22:15:03
初めてWinAPIとDirectX触ったんだけど、
ウィンドウが表示されて感動した。

半日格闘してたから涙ものです。
415デフォルトの名無しさん:2008/03/09(日) 22:17:53
大半はウィンドウ表示して
「で、どうすんの?」ってなって挫折する
416デフォルトの名無しさん:2008/03/09(日) 22:20:22
>>413
すみません。
私自身がまだよく理解できていない思うのですが、
今1つのテクスチャでスクリーン座標上で距離を調べてu、vを
設定しているのですが、
それを3つのテクスチャでどのように繋げれば高速描画になるのかが
解りません。アホですみません。
(プログラムを見たら解ると思いますが...)
417デフォルトの名無しさん:2008/03/09(日) 23:18:16
>>416
  0〜100ならテクスチャ1
100〜200ならテクスチャ2
200〜300ならテクスチャ3
みたいな一定の距離で使用するテクスチャを切り替えちゃう誤魔化し技w
これならuvを弄らないしテクスチャの切り替えだけでいけるから
擬似的に速くなるんじゃないかと思ったわけ

ところで頂点シェーダでuv設定する方法で上手くいかんかった?
この程度楽勝速度だと思うんだけど
418デフォルトの名無しさん:2008/03/10(月) 09:35:43
コンピューターおばあちゃん乙
419マイク ◆yrBrqfF1Ew :2008/03/10(月) 15:58:42
お前ら久しぶり。
420デフォルトの名無しさん:2008/03/10(月) 16:11:40
スレ汚しすいません。同じ質問させてもらいます...

インターネットがつなげない友人に頼まれて、directXをフラッシュメモリに入れて

フラッシュメモリ
↓コピー
友人のパソコン

としたのですが、インストールできませんでした。
directXはインターネットが繋げないとインストール、更新できないのでしょうか?
421デフォルトの名無しさん:2008/03/10(月) 16:16:08
ここはプログラム板です。
その手の質問はPCゲーム板にでも投げて下さい。
422デフォルトの名無しさん:2008/03/10(月) 16:36:27
DirectXには現在のゲーム画面を保存するのに、D3DXSaveSurfaceToFile()
がありますが、これは今現在の画面をそのまま(またはその一部を)保存します。
そうではなく現在の画面を縮小拡大して保存するようなものはありますでしょうか?
WIN32APIで用意されているStretchBlt()は試しましたが画像がひどかったので。
423デフォルトの名無しさん:2008/03/10(月) 17:11:28
>>422
また>>409って言われるぞ
424デフォルトの名無しさん:2008/03/10(月) 17:11:33
サーフェイスに縮小描画すればいいじゃん。
StretchBlt使わないで自分で補間縮小すればいいじゃん。
425デフォルトの名無しさん:2008/03/10(月) 17:58:04
>>422
マルチしてる暇あったら自分で調べろよ(w
426デフォルトの名無しさん:2008/03/10(月) 18:09:41
directXのカメラの画角指定は対角画角ですか?
水平画角ですか?
どなたかよろしくお願いします。
427デフォルトの名無しさん:2008/03/10(月) 19:33:32
428デフォルトの名無しさん:2008/03/10(月) 19:35:08
429428:2008/03/10(月) 19:36:04
430デフォルトの名無しさん:2008/03/10(月) 20:21:06
最近できたInstantActionってブラウザゲームのサイト、どういうしくみなんだろ。
インストールされるのは小さいプラグイン1個なのに実行されるゲームは明らかにDirect3D製。
XBAPをゲーム寄りに進化させた感じ。
Direct3Dのサーフェイスをそのままブラウザに転送してる?
431デフォルトの名無しさん:2008/03/10(月) 20:51:34
ShadowMapなどを2のべき乗サイズでテクスチャに記録して
1024x768の画面に使う場合
縦横の比率が違うことによって誤差は出ないのでしょうか?
それとも気にしなくていい程度なのでしょうか?
432デフォルトの名無しさん:2008/03/10(月) 21:35:03
>>430
JOGLなんじゃないの
433デフォルトの名無しさん:2008/03/10(月) 21:53:26
>>417
0〜100・・・と言われているのはスクリーン座標系での距離ですよね。
ロールしたら全ての点(とりあえずテストで数十万点)のスクリーン座標変換び距離計
していますが、これだけでとても使えるレベルの速度ではありません。
(テクスチャを張るだけの場合は、スケール、ロールは全く問題ない描画速度でした。)

※ちなみに今までのシステムはC++&OpenGLですが、今後のWindowsの状況から
 C#&DirectXも対応すべきではとのことで調査しています。
 何のシステムかは察しが付くかもしれませんが...

>>ところで頂点シェーダでuv設定する方法で上手くいかんかった?

このあたりも私にはよく解りませんが、スクリーン座標系でのuv計算自体で
リアルタイムの描画は難しいという感じです。
(OpenGLと同等の)点線はあきらめムードです。
点線でなければならないこともないかなとメンバーで話し合っています。
434デフォルトの名無しさん:2008/03/10(月) 22:13:04
質問失礼します。DirectX9の初期化を終えたところなんですが、
何も重たいような処理をしていないのにFPSが36前後しか出ず、
さらに前回の描画画面がウインドウを再起動しても残ってる状態になります。
FPSを20とかに落とすと問題無いのですが原因が全く掴めません・・・。
ソースを晒しておくので、もしよければ見ていただいてもいいでしょうか?
(フォントはまだ表示できないので、同フォルダ内にテキストでFPSが保存されます)
ttp://www.uploda.net/cgi/uploader1/index.php?file_id=0000298763.zip
435デフォルトの名無しさん:2008/03/10(月) 22:34:35
コンパイル出来ることぐらい確認しろよ。
なんで関数がダブってるんだ?
436デフォルトの名無しさん:2008/03/10(月) 22:43:52
うわー本当ですね・・・まぁ見ての通りなので説明するまでも無いとは思いますが
投稿前に修正でコピペした分で関数名が二重になっていたようです。
確認不足ですみません、修正版を再度アップしました。
ttp://www.uploda.net/cgi/uploader1/index.php?file_id=0000298777.zip
437デフォルトの名無しさん:2008/03/10(月) 22:43:56
ちゃんとzipを解凍してソースをみてやるお前に惚れた
438デフォルトの名無しさん:2008/03/10(月) 22:55:01
>>432
無料で遊べる4本のゲームの内、一本だけ
「DirectX9のShaderバージョンが不足している〜.exe」ってメッセージが出て動かなかったから、
Direct3Dを使ってることは間違いないと思う。
パフォーマンスもJavaやFlashより高い。
インターネット一時フォルダか何かにexeをダウンロードして実行させてる感じ。
439デフォルトの名無しさん:2008/03/10(月) 23:02:41
>>434
ぱっとみ、そんな問題なさそうな気がする
D3DPRESENT_PARAMETERSの初期化が甘いのが気になった
初期化してないから、Zバッファが自動作成有効になってないから画面がみだれるんじゃね?
FPSが遅いのはわからん
俺の環境では60FPSでてた
440439:2008/03/10(月) 23:05:48
補足
1秒ごとにテキスト書き出してるみたいだけど、それがFPSの足ひっぱってるとかない?
441デフォルトの名無しさん:2008/03/10(月) 23:06:49
>>439
なるほど、Zバッファあたりが怪しいのですか
私の環境でも稀に60FPSになりますがDebugフォルダを消して再ビルドすると
かなりの高確率で38〜36FPSになります(VisualStudio.NET2003にて)
起動時が60FPSなら起動後もずっと60で、36FPSなら同様にずっと36のままなので、
どうも気になる・・・とりあえずZバッファ辺りを見てみます、ありがとうございます
442デフォルトの名無しさん:2008/03/10(月) 23:07:47
>>440
Core2Duoマシンなので処理性能ならば恐らくは大丈夫かと思います。
443デフォルトの名無しさん:2008/03/10(月) 23:10:44
>>442
ファイルへのIOはHDへのアクセスがあるので、CPUの性能はあんまり関係ない。
とはいえ、Core2Duo使ってるPCならボロHD使ってることはないと思うけど、
ファイルへのIOはメモリアクセスに比べて何十倍も遅いので、バッファ使うなどした方がいい(中身みてないけど、使ってる?)
444439:2008/03/10(月) 23:11:41
>>441
ZバッファはFPSには関係ない
なんか前回のウィンドウが残るとか書いてたからそれのほう

ためしに
if( nowTime - lastTime >= 1000 ){
この条件の処理の最後に
lastTime = ::timeGetTime();
入れたらどうなる?
445439:2008/03/10(月) 23:16:51
while ( timeGetTime()*6 - UpdateTime < CHECK_TIME ) { // フレーム時間(16.66*6 = 100)を越えるまで
この処理もなんかおかしい気がする
timeGetTime()は0スタートではないので、そのまま*6はおかしい
446デフォルトの名無しさん:2008/03/10(月) 23:21:24
関係ないけど、thisをZeroMemoryするのはヤメトケ…
447439:2008/03/10(月) 23:24:16
ごめん>>445は問題なさそうやね

というわけで、俺的結論は、FlipのときにVsync同期しているため、
ぎりぎりタイマでタイミングとっているところで、ちょっとでもずれると次のフレームへ持ち越しになるから
処理落ちがおきてるのかと
Vistaとかなら、強制で同期するので

・・・と思うんだけどどうでしょ?
448デフォルトの名無しさん:2008/03/10(月) 23:26:17
>>443
あ、CPUはあんまり関係無いんですねw
ファイルに書き込むときは
 char str[32]; sprintf( str, "FPS:%.2f\n", fps );
という感じでfloat型をchar型の配列に格納してますが、これが怪しいのでしょうか…

>>444-445
書いた後気になったんですがやっぱりウインドウの方ですよねwすみません
んーtimeGetTime()*6もか…なんか次から次へと怪しいところが(苦笑
アドバイス頂いたFPSの方を試してみましたが、今のところは問題なく60FPS出てます
もう少しテストを続けてみます

>>446
確か仮想関数があるとどうとか聞いたような…
直しておいたほうがいいなぁ…指摘ありがうございます
449434:2008/03/10(月) 23:42:12
>>445
60FPS出るようになったーとパソコンを再起動したら再発しましたwworz
明日はもっと性能の低いパソコンに触る機会があるので
そちらの方でも一度試してみてまた報告したいと思います。
(もしかするとこのパソコンがおかしいだけかもしれないので)
ともかく、アドバイスくださった皆様方ありがとうございました
450デフォルトの名無しさん:2008/03/11(火) 00:32:04
>>449
timeBeginPeriodしてる?
451デフォルトの名無しさん:2008/03/11(火) 01:05:47
>>450
返答ありがとうございます。・・・どうもしていないっぽいですね。
色んなDirectX関連のサイトのサンプルやソースを実行しても60FPSだし問題無かったので
指定しなくても大丈夫なんだと気にも留めて無かったんですが、
timeBeginPeriodとtimeEndPeriodを指定すると見事に60FPSになってます。
Sleep(1)の部分で余分に待機してたってことでしょうかorz
勉強不足で申し訳ないです・・・どうもありがとうございます。
452デフォルトの名無しさん:2008/03/11(火) 01:11:22
タイマーの精度ってそんなに違ってくるのか
俺のPCじゃ問題無かったけどな
>>451OSはXP?
453デフォルトの名無しさん:2008/03/11(火) 01:17:36
>>452
XPです。
454デフォルトの名無しさん:2008/03/11(火) 09:08:49
>>452
NT系のOSはtimeBeginPeriodしないと1ms単位にならん。
98系はしなくても1ms単位だったのでNT系で動作が可笑しくなる場合は其処が原因。
455デフォルトの名無しさん:2008/03/11(火) 09:50:00
いや、笑いどころじゃないんだから無理に漢字にするなよ。
456デフォルトの名無しさん:2008/03/11(火) 10:36:47
ウチのマシンはSleep(1)使っても2ms休む
457デフォルトの名無しさん:2008/03/11(火) 15:22:46
QueryPerformanceCounterってどうなの?
458デフォルトの名無しさん:2008/03/11(火) 20:09:41
「どうなの?」とは、無能極まりない発言としか言いようがない。
459デフォルトの名無しさん:2008/03/11(火) 20:43:48
中身はRDTSCだからメニーコアだとたまに想定外の数値が返ってくるよ

と嘘を書く俺よりはマシかもしれない
460デフォルトの名無しさん:2008/03/11(火) 21:06:11
>>458
「としか言いようがない」って言い回しは視野がせまく
多面的な思考が出来ない事を表している。
人生やり直せとしか言いようがない。
461デフォルトの名無しさん:2008/03/11(火) 21:12:10
>>460
「としか言いようがない」って言い回しは視野がせまく
多面的な思考が...
462デフォルトの名無しさん:2008/03/11(火) 21:22:28
463デフォルトの名無しさん:2008/03/11(火) 21:24:20
無言よせとしか言うようがない。
464デフォルトの名無しさん:2008/03/11(火) 23:13:19
日本語のお勉強スレはここですか?
465デフォルトの名無しさん:2008/03/12(水) 00:45:57
>>459
スレッドごとに利用するCPUをアフィニティマスクで
1つに固定すればおかしな値が帰ってこなくなるよ。

スレッドAはCPU1、スレッドBはCPU2、スレッドCはCPU2みたいな感じで全部指定
466デフォルトの名無しさん:2008/03/12(水) 02:02:37
言いようがないとしか言いようがない言いようがない。
467デフォルトの名無しさん:2008/03/12(水) 12:12:18
そんなことよりそろそろDirectX初心者スレに戻ろうぜww
って話題が無いから外れてるのか
468デフォルトの名無しさん:2008/03/12(水) 14:23:12
質問です。

GetBackBuffer や GetSurfaceLevel といった、IDirectSurfaceXを取得する関数。
これらは取得に(結構な)時間がかかるのでしょうか?
それとも(参照カウントを増やしたうえで)ポインタを返すだけなのでしょうか?

前者ならば一度GetBackBufferしたポインタを保持しておくのですが、
そうなるとデバイスロスト時に解放しないとならず、1手間かかります。

後者ならば描画前に確保し、描画し終わったらすぐにReleaseするようにすれば楽そうです。
469デフォルトの名無しさん:2008/03/12(水) 14:29:34
>>468
後者
470デフォルトの名無しさん:2008/03/12(水) 15:04:53
>>469
ありがとうございます。
なるほど、例えばpSwapChain->GetBackBufferでとれるIDirectSurface9は、
pSwapChainが自身の生成時にカウント1で保持しているわけですね。

参照カウントなので後者だろうなとは予想していたのですが、確信がありませんでした。ありがとうございます
471デフォルトの名無しさん:2008/03/12(水) 15:17:07
デバイスロスト>デバイスリセットの際、
せっかく最初に行なった
pDevice->SetRenderState
だとかの設定まで全て初期化されてしまうようなのですが
以前の設定=ロスト直前の設定に簡単に戻すことは出来ませんか?
472デフォルトの名無しさん:2008/03/12(水) 22:40:36
テクスチャを2次元的に拡大して表示した時に貼っつけた画像にアンチエイリアシングかけるのって
SetRenderStateでD3DRS_DITHERENABLEにTRUE設定とはまた別なんでしょうか?
どうもかかってないみたいなんですが・・・
473デフォルトの名無しさん:2008/03/12(水) 23:53:13
それ生ポリ用
SetTextureStageState
474デフォルトの名無しさん:2008/03/13(木) 00:11:35
>>471
RenderStateの設定部分だけを関数にでもしておけばいい。

>>472
D3DRS_DITHERENABLEは補間をディザ法で行うという設定。
TRUEにしたら、ザラザラの画像になるだけ。
今時のビデオカードが対応してるかは分からんが。
475デフォルトの名無しさん:2008/03/13(木) 00:25:14
>>473
それらしいのが見つからないんですが・・・?
476デフォルトの名無しさん:2008/03/13(木) 00:38:01
>>471
無理
全部覚えておくのが定石らしい
けど俺はデバイス作り直してルーチンもう一回通しなおして再設定しなおしてるw
でもこれバグり安いからどうせ1から作ってるなら絶対辞めたほうがいいw
477デフォルトの名無しさん:2008/03/13(木) 00:43:29
こんな時こそえふぇくとふぁいる
478デフォルトの名無しさん:2008/03/13(木) 00:50:22
みんな1つのモデルに
普通(?)に描画するときと
フォグかけたときとαかける必要があるときと
その他色々変化するときと
1つのモデルが描画方法によって色々必要な情報変わるときって
シェーダまわりどうしてる?
479デフォルトの名無しさん:2008/03/13(木) 04:20:12
日本語でおk
480デフォルトの名無しさん:2008/03/13(木) 06:14:54
こんな時こそえふぇくとふぁいる
481デフォルトの名無しさん:2008/03/13(木) 07:32:19
>>479
やったこと無い人はわからないだろうね
482デフォルトの名無しさん:2008/03/13(木) 14:03:47
情報が色々変わるときシェーダーまわりどうしてる?とか言われてもなw
くくりが大きすぎるんだよw

「ゲームってどうやってつくるの?」と同レベルの質問だぞw
483デフォルトの名無しさん:2008/03/13(木) 16:28:57
Xファイルで読み込んだメッシュなどの表示をやっていて思ったのですが、
何かしら
「これから描画するメッシュは、全て50%半透明にする」
ための命令はないものでしょうか?

2D系でありがちな graphics->setAlpha(128); みたいな命令に相当するものです。
484デフォルトの名無しさん:2008/03/13(木) 16:39:44
そんなのシェーダ使えば一発
485デフォルトの名無しさん:2008/03/13(木) 17:04:12
なるほど、シェーダの分野でしたか。
逆に言うとシェーダが出現する前(DirectX7の頃)はどうやってたんでしょうね。
486デフォルトの名無しさん:2008/03/13(木) 19:30:22
directX アルファブレンド
で検索すれば腐るほどでてくるだろ・・・
487デフォルトの名無しさん:2008/03/13(木) 20:22:29
>>478
俺にもパッと見日本語が不自由な人にしか見えん・・・

やりたいことがよくわからんが
それぞれをテクニックにまとめといて
切り替えるだけじゃだめなのか?
488デフォルトの名無しさん:2008/03/13(木) 21:42:17
2D系でありがちな graphics->setAlpha(128);

まずこんな処理自体普通のエンジンにはありえないだろ・・・。
一括で全部半透明とかやりたきゃ別のバッファに書いてそれを半透明で書け。
489デフォルトの名無しさん:2008/03/13(木) 21:57:40
fpsを計測しようと思ってタイマーをセットして測ってみたら、負荷を変えても60fps固定でした。
すごく重くすると60fpsを下回ります。
どうもディスプレイのリフレッシュレートに合わせているようなので、D3DPRESENT_PARAMETERSを
いろいろいじってみましたが、改善されませんでした。
どのようにすればフレーム描画後、すぐに次のフレームを描画しにいくようにできるでしょうか?
490デフォルトの名無しさん:2008/03/13(木) 22:04:19
どう色々いじったのかを説明しないということは、
ここに書いたのはあくまで独り言で、他人の協力などいるか馬鹿野郎という主張だよね?
491489:2008/03/13(木) 22:16:26
すみません、いろいろやったうちの
PresentationIntervaメンバ変数をD3DPRESENT_INTERVAL_IMMEDIATEにする
でできてました。
試したときはちょうど60fps付近になったので、変わってないと思ってしまいました。
(解像度を下げてFPSが大きくなるのを確認しました)

失礼しました!
492デフォルトの名無しさん:2008/03/13(木) 23:17:53
>>487
想像力たんねーな
そんだけだったら疑問がでるわけねーだろ

αかけながらフォグかかってるとかよ
α+フォグが入ったシェーダ作んなきゃならねーじゃん

こうやって変化つけないでシェーダ作り続けると
ノーマル+フォグ
ノーマル+フォグ無し
α+フォグ
α+フォグ無し
ちょっと点滅したい+フォグ
ちょっと点滅したい+フォグ無し
メタルっぽくしたい+フォグ
メタルっぽくしたい+フォグ無し
屈折したい
反射したい
ライト2個
ライト3個
 ・
 ・
 ・
ってちょっとしたもん表示するのにすげー数のシェーダができるじゃねぇか
みんなどうしてんだマジで
493デフォルトの名無しさん:2008/03/13(木) 23:18:51
>>488
ありえなくはないっしょ
別バッファ用意するよりは一括α指定の方がはるかに高速だし
494デフォルトの名無しさん:2008/03/13(木) 23:20:53
>>492
何さまですかあなた?
想像力が足りないから、自分の質問が他人に理解不能な事もわからないんですよw
495デフォルトの名無しさん:2008/03/13(木) 23:39:28
496デフォルトの名無しさん:2008/03/13(木) 23:51:44
>>492
1パス目:Zバッファのみレンダリング
2パス目:ライト系のみレンダリング
3パス目:スキン系のみレンダリング

俺は、こんな感じに各シェーダをカテゴリに分けて
マルチパスでレンダリングしてるよ。
そうすれば、ピクセルライト、頂点ライト、反射、屈折などそれぞれ専用のShader1つで済む。
半透明に対応するには、それぞれのステージにグローバルなパラメータとして追加するしかないかな。
フォグは4パス目として追加でいけるか。
まあ俺の環境はShader2.0しか動かないんで、こうするしかないのが正直なところだが。
497デフォルトの名無しさん:2008/03/14(金) 00:30:23
どうせこの馬鹿のことだから、こうやって教えてやっても
そんなこときいてねーよとか言い出しそうだがね
498デフォルトの名無しさん:2008/03/14(金) 01:14:38
>>496
まとめて描画する場合と比べてかなり遅くね?
シェーダのコピペで済むならやったほうがよくね?
499デフォルトの名無しさん:2008/03/14(金) 01:26:37
>>496
Seleneとかいうライブラリは同じシェーダー数の問題で
すべてのパターンのシェーダーを用意してた。
500デフォルトの名無しさん:2008/03/14(金) 01:31:27
用途と実行環境に応じて自分で決めろよ
501485:2008/03/14(金) 10:17:48
ちょっと質問の意図がうまく伝わっていなかったようなので再度。

例えば村人のモデルを、Xファイルから読み込んだとします。
10人描画するにはXファイル管理クラスのDrawを呼ぶだけですからは非常に楽なのですが、

とあるアイテムを使うと「全ての村人が透けて見える」ゲームになるとします。
そうなると、私の知識では「村人データの全てのマテリアルのα値を、半減させてから描画」という(そこそこ)手間のかかることをやることになります。

IDirect3DDeviceなりに設定として「これから描くポリゴンは全て、”本来のマテリアルのα値×設定したα値”で描画しろ」
とやることはできないのでしょうか?
502デフォルトの名無しさん:2008/03/14(金) 10:29:44
>>501
だからそれはAPIに対して求めることじゃないだろ・・・。
そうしたいのであればそうなるように自分でエンジンを組め。
503デフォルトの名無しさん:2008/03/14(金) 10:29:48
最初からXファイルのマテリアルのAlphaを0.5fにして、
普段は
SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);

半透明にするとき
SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);

Xファイルじゃなくてただのプリミティブでこれやったことがあります。。。
504デフォルトの名無しさん:2008/03/14(金) 10:33:11
>>502
いや、無いなら無いでよかったんです。
そこそこ使いそうなので、何か効率的な方法が(ネイティブで)用意されてたら嬉しいなと思った程度でして。

ゲームだと、無敵になったら半透明とか、キャラに近寄りすぎたら(視界を妨げないように)半透明とか
昔からそこそこ需要がありそうだったので、IDirect3DDevice自体にそんな機能があっても不思議じゃないなぁと思いまして。

(そもそも、マテリアルの値を書き換えると戻すのが面倒)

>>503
面白いアイデアですね
(当然状況限定ですが)とてもスマート

とりあえず、今ならシェーダの切り替えで上手くいくようですし、シェーダ勉強しながら頑張ります
505デフォルトの名無しさん:2008/03/14(金) 10:34:04
俺もキャラの半透明化とかで欲しいなとDX7の頃に思ったことあるな
>>502 APIに求めても罰当たらないレベルだと思うが
506デフォルトの名無しさん:2008/03/14(金) 10:42:38
俺の感覚ではXファイルの存在自体が既にAPIの範疇超えてるな
507デフォルトの名無しさん:2008/03/14(金) 10:45:15
全てのポリゴンは、唯一のテクスチャーをテクスチャーステージの0に持つようにする
んで、その唯一のテクスチャーを切り替えて、α値にしてみたらどうだ?
当然乗算設定でARGB(任意, 255, 255, 255)にしておく。
508デフォルトの名無しさん:2008/03/14(金) 13:46:22
テクスチャなんかで切り替えるくらいなら、普通はTFACTORを使う。
っていうか、今なら頂点シェーダで処理するのが普通だと思うが。
509デフォルトの名無しさん:2008/03/14(金) 14:12:46
TFACTORの存在をはじめて知った。
便利だなこれ
510デフォルトの名無しさん:2008/03/14(金) 14:16:27
>>502とか、知らないなら答えなけりゃいいのになんで偉そうに嘘回答してんだろ
511デフォルトの名無しさん:2008/03/14(金) 15:19:54
テクスチャステージは8つまでDirectXで使える。とあるのですが
実際使える数はステージ数は、グラボによって減るとのこと

いままでは1ステージしか使っていなかったのですがそろそろ2ステージくらいは使いたいところ
現状「5年前のPCでもXステージくらいは対応してるだろ…JK…」って下限のステージ数はいくつくらいでしょうか?

1つもなければテクスチャを張れないので、1ステージもないグラボってのはないとは思いますが…。
512デフォルトの名無しさん:2008/03/14(金) 15:25:49
511です
自己解決しました。

探していたら
ttp://www.netsphere.jp/dxinfo/query.asp?source=gr_90_caps
というページを発見しました。

ステージは3.テクスチャは2というのが「相当古いものでも安心」な数のようですね。
513デフォルトの名無しさん:2008/03/14(金) 21:52:40
TFACTOR使う前提ならPSは使わないって事か
514デフォルトの名無しさん:2008/03/14(金) 22:36:23
>>485
D3DRS_BLENDFACTORの方が
TFACTOR類を使うよりは、君の希望する形に近いと思う。

>>498
最初はそれにしてた。フラグメントシェーダも試してみたりした。
でも如何せん制限がきつすぎて断念した。
それに対しマルチパスは制限が少ない。
例えば、ライト数に上限がないし。
それにマルチパスって、そんなに重くないと思うんだよな。
毎度毎度無駄な頂点トランスフォームが発生するが、
そこはボトルネックじゃないと思うし。まあ想像だけど。
515デフォルトの名無しさん:2008/03/14(金) 22:46:15
ライト数に・・・上限がない・・・?
516デフォルトの名無しさん:2008/03/14(金) 22:47:41
GPUパワーの限りパス数を重ねられるってことじゃないか
517デフォルトの名無しさん:2008/03/14(金) 22:56:24
そんな事したら頂点数に関係なくバッチ数の問題でCPUが死ぬだろ。
518デフォルトの名無しさん:2008/03/14(金) 23:54:43
>>512
首が痛くなったw
519デフォルトの名無しさん:2008/03/14(金) 23:59:11
ワロタw
520デフォルトの名無しさん:2008/03/15(土) 02:29:43
>>514
DrawPrimitive呼びまくるの?
521デフォルトの名無しさん:2008/03/15(土) 03:26:04
質問するなら敬語つかえや小僧
522デフォルトの名無しさん:2008/03/15(土) 03:41:28
>>521
http://jp.youtube.com/watch?v=XAKroNeQhf0
これがほしいってなんではっきり言えないの?
523デフォルトの名無しさん:2008/03/15(土) 05:58:38
助けてほしいなら日本語つかえや子猫
524デフォルトの名無しさん:2008/03/15(土) 09:24:22
>>523
ぶち殺すぞヒューマン(`・ω・´) シャキーン
525デフォルトの名無しさん:2008/03/16(日) 01:45:09
//この頂点で四角を作って、
vertices[] ={{ 0, 0, 0, COLOR }, { width, 0, 0, COLOR }, {-width, -height, 0, COLOR }, {width, -height, 0, COLOR }};

//以下のView変換をすると、
D3DXVECTOR3 vecEyePt( width/2, height/2, -300.0f ); //カメラ(視点)位置
D3DXVECTOR3 vecLookatPt( width/2, height/2, 0.0f );//注視位置
D3DXVECTOR3 vecUpVec( 0.0f, -1.0f, 0.0f ); //上方位置
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vecEyePt, &vecLookatPt, &vecUpVec );
PDevice->SetTransform(D3DTS_VIEW, &matView );

四角を斜め下から見てる感じになります。

verticesはZ=0平面上にあって、
カメラ位置のx,y座標と、注視位置のx,y座標が同じだから、
四角を正面から見る形になると思うんですが、
何か勘違いしてるのでしょうか?

ちなみにWorld変換はしてません。
526525:2008/03/16(日) 01:54:00
すいません、四角を作ってませんでした。
なかったことで。
527525:2008/03/16(日) 02:01:16
いや、四角は作ってるんですが、
長方形を作ってるつもりが、斜めった四角を作ってました。
528デフォルトの名無しさん:2008/03/16(日) 02:03:23
馬鹿がくだらん設定値弄ってないで
まずは(0,0,0)でうまくいくことを確認しろよw

いるよなw
「〜だから〜なはず」とか偉そうに言っててそうならない
調べてみたら結局ただの設定間違いしてるのw
まず、はじめにやることってあるじゃない?

って嫌味の一つでも言われないと人は学習すらしない
オレモナー・・・orz
529デフォルトの名無しさん:2008/03/16(日) 02:49:45
かなり眠かったんで、大目に見てやってください。
530デフォルトの名無しさん:2008/03/16(日) 17:04:35
メッシュを拡大表示すると法線も大きくなってしまってメッシュが暗く表示されてしまうって話を聞いたことある人いる?
どっかで聞いたんだがぐぐってもでてこないし勘違いだったかなぁと悩んでる
531デフォルトの名無しさん:2008/03/16(日) 17:14:57
D3DRS_NORMALIZENORMALSか、シェーダでやる。

法線を正規化する必要があるのならやるべきというだけだが
高速化と称して正規化をサボって問題が出て何か喚いていた阿呆がいたのだろう。
532デフォルトの名無しさん:2008/03/16(日) 17:28:40
インストールの時

内部システムエラーが発生しました
Windowsフォルダ内にあるDXError.logとDirectX.logを参照し原因を分析してください

とでるんですが、具体的に何をすればいいんでしょうか?
533デフォルトの名無しさん:2008/03/16(日) 17:30:50
DXError.logとDirectX.logをテキストエディタで開き、エラーの原因を探る
534デフォルトの名無しさん:2008/03/16(日) 18:29:40
エラーっぽい行をコピペしてググレば英語なり日本語なりで情報が得られる。
535デフォルトの名無しさん:2008/03/16(日) 19:04:12
>>531
d
思い出した、そうだこれだわ
「負荷かかるならいいや〜」ってことでメッシュの極端な拡大縮小はしないようにすることにしてたの忘れてた
536デフォルトの名無しさん:2008/03/17(月) 22:24:57
法線マップので作った凹凸が逆になってしまうところがあります。
左右対称のパーツで、それぞれの頂点が持つUV座標も対称的に同じです。
法線マップにより凹になるようにシェーダ処理をしたところ、片方はちゃんと凹に、もう一方は凸に
なってしまいます。
どうすれば解消できるでしょうか??
モデル作成にはメタセコイアを使いました。
法線マップは白黒で高低を表した高さマップをD3DXComputeNormalMap関数に与えて作成しています。

ご助言、よろしくお願いします。
537デフォルトの名無しさん:2008/03/18(火) 19:43:31
頂点相対座標を自動で作ってくれる3Dソフトってあるんですか?高額ソフトじゃないので
538デフォルトの名無しさん:2008/03/18(火) 22:36:26
>>537
日本語でおkとしか言いようがない
539デフォルトの名無しさん:2008/03/19(水) 00:03:06
>>536
そのモデルのタンジェントスペースの行列式を求め
値が0以下なら法線に-1を掛ける
540デフォルトの名無しさん:2008/03/19(水) 00:46:19
普通はbeginthreadexとかでループさせるもんですか?
それともpeekmesseageとかでループさせますか?

ゲーム内のオブジェクトとかどうやって管理しますか?
クラスをvectorに叩き込んで適当に追加したり削除したりでいいんですか?

ネタじゃないです
マジレスお願いします
541デフォルトの名無しさん:2008/03/19(水) 00:47:59
ゲ製作板で聞け
542デフォルトの名無しさん:2008/03/19(水) 00:51:18
>>540
人それぞれ設計それぞれ好みそれぞれ
543デフォルトの名無しさん:2008/03/19(水) 18:29:40
質問です。
現在Xファイルの読み込みや表示などをやっています。

階層メッシュの表示。
Xファイルスキンアニメーションの表示
などはとりあえずできたのですが、この段階でXファイルについて疑問がわきました。

Xファイルは1マテリアルに複数のテクスチャーをもてないのでしょうか?
D3DXMATERIALを見てもテクスチャ名は1つしか入れるスペースがありませんし…。
バンプマッピングや、2枚以上のテクスチャーを張る表現などを、ツール側で設定済みにしてXファイルに吐き出したい(そして読みたい)のですが。

Xファイルの読み込みには
D3DXLoadMeshHierarchyFromX
などのDXUのヘルパ関数を使っています。

Xファイルは自由に拡張が可能なのはおいておいて、(LightWaveなどから普通に吐き出せる)一般的なフォーマットでの話です。
544デフォルトの名無しさん:2008/03/19(水) 19:06:41
解像度変わっても2Dの画面上のサイズとか座標をそのまま表示出来るようにしたいんだけどどうすりゃいい?
545デフォルトの名無しさん:2008/03/19(水) 21:20:58
そのままの意味がわからんけど
解像度に合わせてウィンドウを拡大縮小したいって事?
546536:2008/03/19(水) 22:46:42
>>539
ありがとうございます。
しかし、その方法でうまくいきませんでした。

いろいろいじっていると、

(接ベクトル)
(従法線ベクトル)
(法線ベクトル)

と並べて作っている頂点座標系変換行列のうち、
従法線ベクトルに-1をかけると凸凹が逆になることが分かりました。

このことをヒントにもう少し探ってみたいと思います。

教えていただいた、行列式の判別の意味を理解したいのですが、
その理論を知るのによい本やサイト、あるいは学術分野名など、
ご存知でしたら教えていただきたいです。
行列式は機械的な求め方を学んだことがあるだけで、それを
こういった判別処理にうまく利用するということに興味があります。
よろしくお願いします。
547デフォルトの名無しさん:2008/03/19(水) 23:29:59
Xファイルを読み込み、表示できたのですが、
読み込んだXファイルを操作するにはどうすればいいのでしょうか?
(回転や移動ではなく、たとえば腕を動かすようなモーション的なものです)
548デフォルトの名無しさん:2008/03/19(水) 23:46:24
>>543
その前に使い方について質問
お前、XFileなんて可逆変換できると思ってんの?
多分一発XFileにした時点でそのモデルデータはもうゲーム専用なわけよ
つまり、モデリングソフトのフォーマットからXFileには一方通行なわけ

正直、XFileってのは扱いにくい
古いフォーマットだから色々足りないしね
なので必要なデータだけもぎ取ったらXFileは捨ててしまって
取得したデータを自作フォーマットに変換して使ったらどうか?と思うんだがどうだろうか?
549デフォルトの名無しさん:2008/03/19(水) 23:47:13
>>547
スキンメッシュのサンプルをみろ
550デフォルトの名無しさん:2008/03/19(水) 23:52:16
Xファイルは拡張可能って何の幻?
最近のDirectX SDKを見ろよ。
Microsoft自身がXファイルの拡張なんか使わず、違うフォーマットを使ってるじゃないか
551デフォルトの名無しさん:2008/03/20(木) 00:00:42
Xフォーマットはゲーム用のフォーマットじゃなくて書籍のサンプル用のフォーマットだぞ
552デフォルトの名無しさん:2008/03/20(木) 00:21:24
質問には応えず、質問者をこきおろすその態度に絶望するわ
553デフォルトの名無しさん:2008/03/20(木) 00:34:00
Xファイルの代わりにどのようなフォーマットのファイルを使えばいいのでしょうか?
554デフォルトの名無しさん:2008/03/20(木) 00:34:51
>>548
アドバイスありがとうございます。

プログラム内で独自フォーマットに変換してしまうのは、難しくありませんし、有効だと思います。
ですがその前に「Xファイルは1マテリアルに複数のテクスチャーデータを持たせて出力できるのか」が問題です。

もしできないのであれば、Xファイルを使う価値は少ないので、別のフォーマットを使うことになるでしょう。
555デフォルトの名無しさん:2008/03/20(木) 00:46:46
>>553
フォーマットそのものを自作します。
方法は自分で考えましょう。
556デフォルトの名無しさん:2008/03/20(木) 01:09:56
つーかXファイルが持ってるのはテクスチャデータじゃなくて
ただのファイル名、文字列なんだからXファイルフォーマット拡張しないで
で複数のテクスチャ渡したいなら適当に二つの文字列渡してプログラム側で
分割すれば良いんじゃね?

hoge.dds:bump.dds

じゃいかんのん?
557デフォルトの名無しさん:2008/03/20(木) 01:26:27
グラフィッカにどう説明するつもりだそれ
558デフォルトの名無しさん:2008/03/20(木) 01:44:21
>>554
いや、その問題もズレてるでしょ?
君がターゲットにしているソフトがXFileに対応してるかどうか?が問題じゃない?
俺の経験だとXFileにも方言があって、そのすべてに対応しているローダなんてみたことない
たとえXFileのリファレンスに忠実であっても自分のターゲットのソフトが対応してなきゃなんの意味もない

そこを踏まえてXFileのどの方言に対応してどう扱いたいのか?ってのを
まず作る前に決めたほうがいい

一番いいのはXFileから必要なデータだけとってしまって
自作のフォーマットにして保存してしまうのが一番楽だ
559デフォルトの名無しさん:2008/03/20(木) 02:11:18
>Xファイルは1マテリアルに複数のテクスチャーデータを持たせて出力できるのか
ここだけ知ってる人間が答えてあげればいいだけのハナシじゃないの

残念ながら俺は答えられないけど、
560デフォルトの名無しさん:2008/03/20(木) 02:44:44
いっそテクスチャファイル名の代わりにエフェクトファイル名を出力しちゃえ
561デフォルトの名無しさん:2008/03/20(木) 02:52:24
>Xファイルは1マテリアルに複数のテクスチャーデータを持たせて出力できるのか

マルチテクスチャが流行りだした頃からのFAQだけど不可能。
無理矢理拡張フォーマットを持たせて格納することも不可能じゃないけど
世のXファイル描画ライブラリはそんなのを面倒見てくれないしなぁ。
それでもやる意義があると思うならがんばって。
562デフォルトの名無しさん:2008/03/20(木) 08:32:53
>>561
なるほど、残念です。
他のもっと汎用的な形式に乗り換えることを検討します。

>>560
おもしろいアイデアですね。
でも結局のところ「1枚目のテクスチャのUVと、2枚目のテクスチャのUV」が別個に必要ですから、
Xファイルが(基本的に)サポートしてないと意味が薄いんですよね
563デフォルトの名無しさん:2008/03/20(木) 11:23:46
>>546
タンジェントスペースの作り方にもよるが、
普通、反転する可能性のある軸は従法線だった。
なのでその方法が正しいです。つーか俺のライブラリもそうなってたw

行列式の使用方法は、俺は、
ゲームプログラミングのための3Dグラフィックス数学という本で学んだ。
ここでも何度も紹介されているし、俺もお勧めです。
Gemsまではいらないと思うが、こいつは3Dプログラマ必読と思う。
564536:2008/03/20(木) 14:11:49
>>563
おお、すごくためになりそうな本です。
教えてくださってありがとうございました!
565デフォルトの名無しさん:2008/03/20(木) 15:33:05
一回のDrawPrimitiveUPで10万頂点描画するのと1000頂点を100回描画するのはどっちが速いんでしょうか?

566デフォルトの名無しさん:2008/03/20(木) 15:37:05
>>565
前者の方が圧倒的に速い
567デフォルトの名無しさん:2008/03/20(木) 15:53:56
1画面分の頂点の移動も全て計算してから一回で描画しても速いんですか?
1000頂点を一回描画する間に次の1000頂点の移動を計算させておいた方がよくないですか?
568デフォルトの名無しさん:2008/03/20(木) 15:56:58
最初の質問と前提が違うじゃん
並列処理した方が速いかどうかは移動に使う計算量によるだろっていうか自分で計測しろよ
569デフォルトの名無しさん:2008/03/20(木) 16:00:31
なるほど仕組みがわかってきました。まじありがとうです
570デフォルトの名無しさん:2008/03/20(木) 16:24:05
簡単に言うと
>>565の状況だと頂点演算の処理やピクセル演算の処理は当然どっちも同じなんだが
DrawPrimitiveUP自体と其れに伴うステートの変更が相当重い処理になるのでCPUで差が出る。
571デフォルトの名無しさん:2008/03/20(木) 17:00:12
でも大抵は画面に表示されない部分はクリッピングされることが多いので
分割したほうが大抵いい結果になる
どうしても画面にすべて表示されてしまう場合のみまとめて描画が役に立つかも
2Dゲーのマップチップとか弾幕STGなんかを作るときに出る問題
572デフォルトの名無しさん:2008/03/20(木) 17:06:04
当然状況にもよるけど
ロボットものをパーツ1個1個をモデルにするよりも
1モデルにしてボーンで動かす方が軽かったりする。
573デフォルトの名無しさん:2008/03/20(木) 17:14:55
HLSLでテクスチャーを渡す場合、
ID3DXEffect#SetTexture
を使うしかないのでしょうか?

単に
IDirect3DDevice9#SetTexture
で設定されているテクスチャーを使いたいのです。
574デフォルトの名無しさん:2008/03/20(木) 17:16:58
HLSLで〜という質問の仕方は変でした。
HLSLでPixelShaderを書いているのですが〜です。

固定のシェーダだとIDirect3DDevice9#SetTextureで情報を渡しているわけなので、気になりまして。
内部でm_pKoteiShader->SetTexture を呼び出しているのかもしれませんが。
575デフォルトの名無しさん:2008/03/20(木) 17:31:46
HLSL内でsamplerに対して固定機能のテクスチャを拾ってくるという指定も出来る。
576デフォルトの名無しさん:2008/03/20(木) 18:09:42
>>575
ありがとうございます。
どうやらsampler_stateの中の
Texture = <名前>;
を省略すれば固定機能のテクスチャを見てくれるようなのですが、これですと
SetTexture(0, 略); のものしか拾えそうにありません。

正しく(0以外のものも)拾うにはどうしたらいいのでしょうか?
MSDNあたりも調べてみたのですが見つけられませんでした。
(省略すれば〜というのもなんとかんく閃いただけです)
577デフォルトの名無しさん:2008/03/20(木) 18:12:54
sampler Sampler0 : register( s0 );
sampler Sampler1 : register( s1 );

これの欠点は固定機能で対応していないとダメなこと。
つまり固定機能的には8ステージまでしかなかったら
いくらシェーダーで16枚対応していて8までしか有効にならない。
578デフォルトの名無しさん:2008/03/20(木) 18:29:27
ありがとうございます。
s0 とはHLSLではない、それ以前のシェーダアセンブラにおけるレジスタ値ですね。

sampler register の複合で検索をかけたら、いろいろでてきました。
これで「PixelShader未対応環境」での動作の統一(統一といって、省略になるものが多いでしょうが)が楽になりそうです
579デフォルトの名無しさん:2008/03/20(木) 18:36:24
丁度やってるところが話題にあがってるなー
横槍で質問していいかな

sampler SampNormal : register( s1 ) = samper_state
{
AddressU = Wrap;
AddressV = Wrap;
};

こんな感じで、固定シェーダのものを真似しつつも一部だけ変える。みたいなことできないかな?
580デフォルトの名無しさん:2008/03/20(木) 18:47:07
>>579
俺はこれしか知らんなぁ
他にスマートな方法があったら誰か教えて

technique T
{
pass P
{
// Texture0
addressU[0] = clamp;
addressV[0] = clamp;
minFilter[0] = point;
magFilter[0] = point;

// Texture1
addressU[1] = clamp;
addressV[1] = clamp;
minFilter[1] = point;
magFilter[1] = point;

pixelshader = compile PIXELSHADER_TARGET FpMain();
}
}
581デフォルトの名無しさん:2008/03/20(木) 20:37:49
2DでUP系と頂点バッファ使うのじゃどっちが早いのかは謎やね
俺は2Dも3DもDrawIndexedPrimitiveでまとめてやってるけど
582デフォルトの名無しさん:2008/03/20(木) 20:40:40
ゲームを作っていて、なるべく沢山の人がプレイできるようにするには
なるべく古いバージョンのVSやPSを使ったほうがいいですよね?

でも、バンプマッピングをやったところどうしてもPS2.0が必要になってしまいました。
PS2.0ってどの程度普及してるもんでしょう?
対応グラボ一覧などを見ても「一般的なライトユーザーは、で、結局どのあたりのグラボを持ってるんだろう?」
となってしまって基準を決めかねてます

みなさん自分でシェーダを利用したプログラムを書くとき
どの程度のバージョンで決め打ちしてますか?
583デフォルトの名無しさん:2008/03/20(木) 20:49:09
>なるべく古いバージョンのVSやPSを使ったほうがいいですよね?

PSはまだまだ使えん
メーカー製のPCだとPS非対応が多い
584デフォルトの名無しさん:2008/03/20(木) 20:49:57
>>582
固定機能のみ、2.0対応、3.0対応でそれぞれシェーダーを用意する。
そのへん勝手にやってくれるライブラリもフリーであるし。

3DゲームならDirectX10対応もしておきたいところだと思う。
ライブラリ部分なんて1回作っちゃえばあとは使いまわしだし。
585デフォルトの名無しさん:2008/03/20(木) 21:40:41
アイマスみたいなアニメ調。
つまり可愛いトゥーンレンダリング&輪郭線って、PSないと不可能だよな?
PS未対応はかなりきついぜ
586デフォルトの名無しさん:2008/03/20(木) 21:48:47
不可能じゃない
パフォーマンスはおそらくシェーダを使った時より劣るだろうけど
587デフォルトの名無しさん:2008/03/20(木) 22:39:07
テクスチャだけそれっぽいのにしてuvで調節する技があったよな
588デフォルトの名無しさん:2008/03/20(木) 23:31:44
DirectShowと戦うスレ Part 3
http://pc11.2ch.net/test/read.cgi/tech/1205912209/
589デフォルトの名無しさん:2008/03/20(木) 23:32:21
そうか、不可能じゃないか…。

そういえば、輪郭線は「キャラをほんのちょっと太らせて、ポリゴンの表裏を逆転。さらに輪郭線色に塗ったもの」
を用意して、キャラに重ねておけばできたなw

トゥーンは何か方法あったっけ?
ライトとの角度をUVに変換する方法は、固定機能には無かったと思う
590デフォルトの名無しさん:2008/03/20(木) 23:44:57
>>589
ある
591デフォルトの名無しさん:2008/03/21(金) 00:18:45
>>590
せっかくだから、良かったら教えてくれ
プログラマブルシェーダで今やっちまってるけど、古い技術にも興味ありまくり
592デフォルトの名無しさん:2008/03/21(金) 00:24:40
593デフォルトの名無しさん:2008/03/21(金) 00:58:51
やっぱ今からやるならDirectX10なのかな
9とは別物なの?
594デフォルトの名無しさん:2008/03/21(金) 01:01:26
10はVista以降じゃないと使えないけどそれでいいのなら
595デフォルトの名無しさん:2008/03/21(金) 02:21:55
そしてVistaへの移行は恐ろしく緩やか
596デフォルトの名無しさん:2008/03/21(金) 03:09:26
いつも切り替わりの時思うんだけどすごいゲームとかソフトが出たら一瞬で世界中が移行するよなw
597デフォルトの名無しさん:2008/03/21(金) 03:32:07
一般にセルシェーダのゲームって、正直画面汚くね?
598デフォルトの名無しさん:2008/03/21(金) 04:20:59
>>597
開発者のオナニーだよな
誰もいいと思ってねぇよなアレ
599デフォルトの名無しさん:2008/03/21(金) 11:03:08
セル調なのはいいけど、アニメーターが使用する配色と甚だかけ離れてるからね
汚いというか違和感が強い
600デフォルトの名無しさん:2008/03/21(金) 13:02:25
最近のはそうでもないと思うけどな
ttp://www.watch.impress.co.jp/game/docs/20080303/dbz.htm
601デフォルトの名無しさん:2008/03/21(金) 13:12:57
すごいな・・・よく作ったと思う。
にしてもドラゴンボールって今でも新規獲得できんのかね?
602デフォルトの名無しさん:2008/03/21(金) 14:03:50
SDK付属のスキンメッシュのサンプルに余分なものがゴテゴテついててなかなか解読できないんですが、いい解説サイトないでしょうか?
コンパイルすれば動かせる状態のソースと解説つきなものが理想なんですが、そういうサイトって大抵DX8世代で困っています。
603デフォルトの名無しさん:2008/03/21(金) 14:55:23
>>602
ああ、俺もつい先週、まったく同じ境遇だったw
スキニングだけ見たいのに、シェーダだのなんだの邪魔なものが多いんだよなw(当時シェーダ使ったことなかったから混乱しまくった)

あのソース、
・CAllocateHierarchyを別のh/cppに持ってく
・m_SkinningMethodでの分岐をやめて、継承関係で分岐させるようにする(動的に描画方法をチェンジはできなくなるけどね)
とやると、恐ろしく短いソースになる。
その後は解説もいらないくらいわかりやすいから、やってみ。
604デフォルトの名無しさん:2008/03/21(金) 15:11:47
輪郭線の抽出。というものに取り込んでいるのですが、
VSを使って「カメラ方向から垂直に近い角度を向いてしまっているポリゴンを黒くすることで実装しようとしました
ttp://tpot.jpn.ph/t-pot/program/22_toon2/index.html

ですが、ハイポリだと綺麗にでるのですが、ローポリだとさっぱりです。
考えてみれば唐突に折れて裏にまわってしまっている場合、黒く塗れるポリゴンがないまま見えなくなってしまいます。

別のアプローチ方法としてはどのようなものが考えられるのでしょうか?
605デフォルトの名無しさん:2008/03/21(金) 15:31:52
>>565
そもそもDrawPrimitiveUPで一回で描画できる頂点の上限が
10万を超えているハードって普通にあるのかなぁ。
俺がいままで扱ったことあるGPUって高々10程度なので
あてになる情報ではないけど、少なくともこの経験の範囲では
65000ぐらい以上の頂点を描画させようとするとDrawPrimitiveUPが
失敗して描画しなかったような気がする。
606デフォルトの名無しさん:2008/03/21(金) 15:42:09
Zバッファに輪郭抽出のフィルタかければいいんじゃない
607デフォルトの名無しさん:2008/03/21(金) 15:44:32
上は604へのレスです
608デフォルトの名無しさん:2008/03/21(金) 16:05:08
Zバッファですか。
カメラからの深度差を使えば、確かにくっきりでそうですね。

質問した後も色々調べてみたのですが
・輝度差
・カメラからの深度
・法線
・マテリアルIDの相違
といった色々な方法があって、決定版というのはないようですね。

そんな中、これは(処理は遅そうですが)かなり面白いなと思いました
ttp://www.twin-tail.jp/contents/vsdx8/d3d/011/index.htm
609デフォルトの名無しさん:2008/03/21(金) 16:07:45
裏に回る境界のラインを上書き
610デフォルトの名無しさん:2008/03/21(金) 16:54:28
>>604
一番簡単なのが、面を裏返しにして、法線方向に膨らませて描画。
ただし、メッシュに不連続な部分(隣接する面で法線が共有されていない)があると駄目。

あとは法線と深度をテクスチャに描画して、輪郭抽出フィルタを使うという方法もある。
611デフォルトの名無しさん:2008/03/21(金) 16:55:48
>>605
>65000ぐらい以上の頂点を描画させようとするとDrawPrimitiveUPが
>失敗して描画しなかったような気がする。
あー、なんか俺も昔そんな覚えあんな
巨大マップを一つのモデルで描画しようとしたときにそうなったw
無駄だったから分割したけどw
そこでオクツリーってキーワードを知った勉強になったと思う
612デフォルトの名無しさん:2008/03/21(金) 17:38:55
device->SetRenderState(D3DRENDERSTATETYPE,TRUE);
ってやつを9.0でやりたいんですけど、どれがそれに当たるんでしょう?
それともこれは廃止されて別のインターフェイスに同等のものがあるんでしょうか?
613デフォルトの名無しさん:2008/03/21(金) 17:55:14
Xファイルとはもう決別して、他のモデルデータ形式を使いたいんだけどお勧めないですか

FBXは一応やってはいるのですが、モデルの描画まではFBXSDK見ながらやったのですが
スキニングアニメに必須なボーン関係で苦戦中
有名どころのこのサイトでも同じような場所で更新とまってるし…
ttp://marupeke296.com/FBX_main.html
そもそも情報がSDK以外に少ない

サイトでも本でも良いので、モデルデータの読み込みの情報がある程度で揃ってる形式ないでしょうか。
614デフォルトの名無しさん:2008/03/21(金) 17:57:36
↑書き忘れ
Xファイル+マルチテクスチャーくらいでとりあえずゲームつくりには使えるかなと思ってます
615デフォルトの名無しさん:2008/03/21(金) 18:07:55
>>612
IDirect3DDevice9::SetRenderStateは普通にあるけど?
616デフォルトの名無しさん:2008/03/21(金) 18:21:04
IDirect3DDevice9::Resetで、ウィンドウフルスクリーンを切り替えようとすると、
D3DERR_INVALIDCALLが返され、失敗してしまいます。

ウィンドウ、フルスクリーン共に起動時の初回デバイス作成は上手くいきます。
デバイス作成のパラメータはこんな感じです。
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
if(fullScreen) {//フルスクリーンモード
D3DDISPLAYMODE dispMode;
Pd3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &dispMode);
d3dpp.Windowed = FALSE; //ウィンドウモード
d3dpp.BackBufferCount = 1; //バックバッファ数
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//フロント/バック切り替え方式
d3dpp.BackBufferFormat = dispMode.Format; //バックバッファ形式
d3dpp.BackBufferWidth = 800;
d3dpp.BackBufferHeight = 600;
d3dpp.EnableAutoDepthStencil = TRUE; //深度ステンシルバッファ
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; //深度ステンシルバッファ形式
} else {//ウィンドウモード
d3dpp.Windowed = TRUE; //ウィンドウモード
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //バックバッファ形式
d3dpp.BackBufferCount = 1; //バックバッファ数
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//フロント/バック切り替え方式
d3dpp.EnableAutoDepthStencil = TRUE; //深度ステンシルバッファ
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; //深度ステンシルバッファ形式
}
Pd3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &d3dpp, &PDevice);

ウィンドウフルスクリーン切替時は、作成したLPDIRECT3DTEXTURE9を解放して、
デバイス作成時と同じD3DPRESENT_PARAMETERSでResetしています。
なんで失敗してしまうのでしょうか?
617612:2008/03/21(金) 18:48:38
>>615
間違えた・・・
device->SetRenderState(D3DRS_COLORKEYENABLE,TRUE);

です。カラーキー
618デフォルトの名無しさん:2008/03/21(金) 18:55:53
>>616
hDeviceWindow が NULL のようだけどそれでいいの?
619デフォルトの名無しさん:2008/03/21(金) 19:00:19
>>617
カラーキーはDirect3Dには無い。
代わりにαブレンド(またはαテスト)を使う。
抜きたい部分と抜きたくない部分でα値を0.0/1.0に設定しておく。

D3DXCreateTextureFromFileExにはカラーキーを与えれば勝手に
α値を設定してくれる機能があるからそれを使えば簡単。
620616:2008/03/21(金) 19:28:10
LPD3DXSPRITEを解放していないせいでした。
>>618
どうもありがとうございます。
念のためhWndも設定しておきます。
621612:2008/03/21(金) 20:22:09
>>619ありがとうございます!これで透明部分の向こう側も見えるようになりました!
ところで半透明を使う時ってレンダリングの順をうまくこちらで調整するしかないんでしょうか?
622デフォルトの名無しさん:2008/03/21(金) 20:43:06
>>621
するしかない
623デフォルトの名無しさん:2008/03/21(金) 21:19:01
>>621
安心しろ
そんなもの気にならなくなるぐらい描画順に関しては弄り倒すハメになるからw
624612:2008/03/21(金) 21:40:54
>>622,623
アリガトウゴザイマス
ゲームで使うポリゴンモデルってメッシュで表示するの?よく動く場合はPrimitiveとかですか?
625デフォルトの名無しさん:2008/03/21(金) 22:47:53
メッシュだよ。
ただ、メッシュ読み込もうにも色々ファイルに種類があってな・・・
どれを使ったものやら

教科書的にはXファイルでいいんだが、ゲーム作るとなると・・・
626デフォルトの名無しさん:2008/03/21(金) 23:04:21
613でも話題にあがってるが、FBXの情報サイトは少ないなー
SDKがあるとはいえ、まだまだ情報足りん…
627612:2008/03/21(金) 23:58:39
>>625
モデルの読み込みって自前で処理するしかないんでしょうか?(コピペも含めて)
メッシュってことは表示する時はSubSet()呼ぶ手な感じになるのかな・・・
628デフォルトの名無しさん:2008/03/22(土) 00:35:14
ゲーム用途で言えばFBXはゴミデータが多くパージングにも
無駄が多くなりがちなのでウンコとしか言いようがない
629デフォルトの名無しさん:2008/03/22(土) 01:24:25
全然関係無い話で恐縮なんだけどさ
なんかいつの間にかfopenとfreadでテキストファイル読み込んだら
最後に

����ォォォォォォォォ・・

とか付くようになってんだけどなんで?
VC++2008Exp OS:VISTA

ただ、バグってるだけかな?w
それともなんか変更あった?w
630デフォルトの名無しさん:2008/03/22(土) 01:30:23
それ・・・ 呪いだよ・・・
631デフォルトの名無しさん:2008/03/22(土) 01:32:51
自己レス
読み込んだサイズでメモリ確保するときに
+1するの忘れてただけw

会社のお便利ライブラリに毒され過ぎたw
632デフォルトの名無しさん:2008/03/22(土) 01:35:11
メモリの問題じゃなくて呪いだってば(w
633デフォルトの名無しさん:2008/03/22(土) 01:48:11
フォ����ォォォォォォォォ・・
634デフォルトの名無しさん:2008/03/22(土) 01:50:04
>>629
文字コードが SJIS じゃないんじゃない?
635デフォルトの名無しさん:2008/03/22(土) 01:50:30
あるいはその逆?
636デフォルトの名無しさん:2008/03/22(土) 02:20:46
天狗の仕業じゃ
637デフォルトの名無しさん:2008/03/22(土) 02:30:08
フフフフフフフフフフ
638デフォルトの名無しさん:2008/03/22(土) 02:33:03
って、自己解決してたのか・・・
639デフォルトの名無しさん:2008/03/22(土) 03:39:21
IDirect3DDevice9::SetRenderState() はどのタイミングで実行すればいいんでしょうか。
変更しないものは最初に一度やるだけでいいのか、
それとも描画のたびに呼んだ方がいいんでしょうか?
640デフォルトの名無しさん:2008/03/22(土) 07:29:34
なるべく呼ばないほうがいい
641デフォルトの名無しさん:2008/03/22(土) 10:46:47
>>639
多分、DrawPrimitiveが実行されるまでステートの変更なんてグラボにアクセスしないだろうし
ちゃんと設定したいステータスが設定できるように組め
642デフォルトの名無しさん:2008/03/22(土) 11:33:18
固定機能で出来る範囲のことは、シェーダより固定のほうが速いんすかね?
具体的には、単純な表示、トランスフォーム(固定で出来る単純なブレンドも含む)辺りなんですが
643デフォルトの名無しさん:2008/03/22(土) 12:22:52
昨今のGPUはシェーダーで固定機能をエミュレートしているので実質違いはない。

644デフォルトの名無しさん:2008/03/22(土) 13:19:29
GPUから固定機能シェーダが(しかしこれも最後まで、適当な呼び名がなかったな。なんとかならんのか)
非搭載になったのって、GeForce6xxxぐらい?
645デフォルトの名無しさん:2008/03/22(土) 15:10:28
出来る限り呼び出し回数を減らすように描画を工夫するのが望ましいが
何度か呼んだ程度で重くなったりするようなものでもないからじゃんじゃん使ってOK
646642:2008/03/22(土) 16:25:43
>>643-644
ありがとでやんす。比べても差が無かったのは、テストの仕方が悪いだけかと思ってました。
シェーダ一本でいくっす。
647デフォルトの名無しさん:2008/03/22(土) 17:47:05
草や木を植えるのに1本ずつDP呼んだりしなければ基本的にはOKだわね
648602:2008/03/22(土) 18:36:48
>>603
ありがとうございます、かなり短くなりました。
それでも結構ソース多い・・・
649デフォルトの名無しさん:2008/03/22(土) 19:34:12
テクスチャにするファイルってなんか条件あるの?

エロゲキャプったJPGだと読み込んでくれなかったぜ
650デフォルトの名無しさん:2008/03/22(土) 20:35:25
シラベロウ
651デフォルトの名無しさん:2008/03/22(土) 20:36:25
わかったぜ!

2の乗数で、縦横が同じ大きさの画像なら大体問題なさそうだな!
652デフォルトの名無しさん:2008/03/22(土) 20:48:36
>>651
そこらへんの制約は色々複雑なのでD3DCAPSをちゃんと調べれ
653デフォルトの名無しさん:2008/03/22(土) 21:04:49
ただ、出す分には楽だけど限界を調べようとすると面倒だな
必死に滲まない方法とか最大サイズをスレに聞きに来てた初心者に悪いことしたと思った
たしかに面倒だ
ものによってフィルタOFFにできない(これはあきらめるしかない)とか、
そんときのuvとか面倒だなーと思った
0.5ずらしとかやるよりもとりあえずクランプにしておいて
色々とあきらめるのが最善の方法だな

ただ、マップチップ構成でフィルタOFFにできないってのは
結構悲惨な絵になるなw(ま、どうしようもねぇけどw)
654デフォルトの名無しさん:2008/03/23(日) 00:35:07
固定シェーダでノーマルマップって使えますかね?
バンプができてるようなので、できなくはないのでは・・?と思っているのですが
655デフォルトの名無しさん:2008/03/23(日) 00:43:16
テクスチャ貼れたけどぐんにゃり曲がってるぜ、なんなんだこれ?
656デフォルトの名無しさん:2008/03/23(日) 00:49:31
>>654
なくはないがクオリティを気にしないのが前提条件
657デフォルトの名無しさん:2008/03/23(日) 00:55:39
oプラズマですo
658デフォルトの名無しさん:2008/03/23(日) 10:49:26
現在、DirectMusicを使ってwavファイルを再生させてるけど、
何のエフェクトもかけていないのに変にエコーがかかったような音が出る。
どうにもらちがあかないのでここに来たけど、
なんか時間が短い単純なwavファイル再生ならDirectSoundがよさそうだね。
そんで質問ですけど、どっかにDirectSoundのいいサンプルないですか?
SDKのサンプル見たけど、なんかいろんなことをやってて難しそう。(それが標準なのかもしれないけど)
659デフォルトの名無しさん:2008/03/23(日) 11:07:17
MS特有のサンプルコードの読み辛さはあるかもしらんが、あんなもんだよ。
最新のSDKにはXAudio2っていうよりシンプルなオーディオAPIがあるからそっちもどうぞ。
660デフォルトの名無しさん:2008/03/23(日) 12:57:43
654です
固定シェーダ(これの呼び方まちまちすぎ)のノーマルマップについて
あるということでしたので調べているのですが、さっぱりひっかかりません
どなたかよさげなページか、SDKの対応するサンプルなりを教えていただけませんでしょうか
661デフォルトの名無しさん:2008/03/23(日) 13:02:27
>>660
DirectX7のコロのSDKにはサンプルがあったと思う。
ただ固定機能でも対応しているのってNVIDIAのGeForceととATIのRadeonだけだったはずだが。

「固定機能=全機能保障」と思ってるなら大間違いだぜ。
シェーダーのように最低ラインが定められていないから、
テクスチャステージが1つしか使えなくて減算合成が出来なくてもポリゴン1枚出るなら固定機能サポートを謳える。
662デフォルトの名無しさん:2008/03/23(日) 13:13:09
>>661
あちゃー、固定機能=最低ライン保証のつもりでした
ゲームを作ってるんですが、どうしてもピクセルシェーダを避けたいなと思いまして。
どうしてもPSが必要なのはバンプ(ノーマル)マップだけなんですよ
他は普通のライティングくらいしか行なっていないので。

んー、PS1.1以上必須って条件はいれたくないなぁ・・
663デフォルトの名無しさん:2008/03/23(日) 13:19:44
>>662
PS1.1は正規化が出来ないのでノーマルマップをやるなら2.0からであろう。
そういう場合は素直に2.,0対応なら其れを使い、未対応ならノーマルマップなしで描画するように
ライブラリ部分で自動的に切り替えるのが一番よろしいかと思う。
664デフォルトの名無しさん:2008/03/23(日) 13:32:44
え、normalizeって1.1でできないでんですか?
PixelShader = compile ps_1_1 PS_NORMA();
665デフォルトの名無しさん:2008/03/23(日) 13:33:41
途中送信失礼しました。

え、normalizeって1.1でできないでんですか?
PixelShader = compile ps_1_1 PS_NORMAL();
と1.1コンパイルを指示した上で、
float3 N = normalize(Normal);
とやっても特にエラーでずにきちんと表示されてしまうのですが
666デフォルトの名無しさん:2008/03/23(日) 13:40:38
normalize - HLSL

--------------------------------------------------------------------------------

正規化されたベクトル x / length(x) を返します。x の長さが 0 の場合、結果は無限となります。

構文

ret normalize(x)

ここで

名前 In/Out テンプレートの型 成分の型 サイズ
x in ベクトル float 任意
ret out 入力 x と同じ float 入力 x と同じ次元

最低限必要なシェーダのバージョン
この組み込み関数は、次に示すバージョン以降のシェーダでサポートされています。

頂点シェーダ ピクセル シェーダ
vs_1_1 ps_2_0
667デフォルトの名無しさん:2008/03/23(日) 13:46:19
とても失礼しました。
normalizeはPS1.1で使っておらず、VS1.1で使ってました。
PSですと確かにダメでした。
668デフォルトの名無しさん:2008/03/23(日) 13:53:32
質問
HLSLでcompiale ps_1_1 でコンパイルした場合と、ps_2_0でコンパイルした場合で見え方が違うのですが
そんなことありえますか?
バンプマップでマイクロソフトの古いサンプルを参考に

float4 PS_BUMP(VS_BUMP_OUTPUT In) : COLOR
{
float3 N = 2 * tex2D(SampNormal, In.TexNormal) - 1;
float3 L = 2 * In.Light - 1;
In.Color.xyz *= tex2D(Samp, In.Tex).xyz * max(0, dot(N, L));
return In.Color;
}
という式なのですが、1_1だと黒っぽく。2_0だと全体的に白っぽくなります。
669デフォルトの名無しさん:2008/03/23(日) 14:01:05
1.1は固定小数点で計算されているので内部的に丸められて-1〜+1より外の値は丸められる。
2.0は16/24/32Bitのfloatで計算されているのでちゃんとした結果になる。

固定は-2.0〜+2.0かもしれん。忘れた。
最近のDirectX9では1.x系は事実上破棄されているのでもHLSLでもコンパイルできん。
670デフォルトの名無しさん:2008/03/23(日) 14:10:10
なるほど、1.1では丸めこみのせいか・・・
互換性がないのもなんだかなぁ・・・
671デフォルトの名無しさん:2008/03/23(日) 14:18:01
サーフェイス座標系に変換して、ライト方向をPSより前にノーマライズしておけば
PSでライト方向をノーマライズする必要がなくなるから2.0より前でもバンプできね?
672デフォルトの名無しさん:2008/03/23(日) 14:21:24
>>671
頂点で正規化してもラスタライズで線形補完されるから
PSにきたときには長さが変わってる。

さらに法線マップ自体もドットバイドットなんてフィルタリングありでは不可能なので
どっちもPSで正規化しないと完全に正しいライティングにはならなかったりする。
673デフォルトの名無しさん:2008/03/23(日) 14:34:36
なるほど・・・
そこまで細かいのやったことないから気づかなかったわ
674デフォルトの名無しさん:2008/03/23(日) 15:24:12
質問いいでしょうか
HLSLでVSを書いた場合に受け取れるNORMALについてです
この法線、normalizeせずに普段から使っていて特に問題が起きていないのですが、ノーマライズされているものなのでしょうか?

法線についていま勉強中で、勘違いでなければ拡大を行なえば法泉も変化が起こり
全体的に大きくするほど黒くなってしまうと予想しているのですがそうなりません

pDev->SetRenderState(D3DRS_NORMALIZENORMALS, FALSE);
を設定してあります
法線情報の入りXファイルからメッシュは作成しています
pDev->SetTransform(D3DTS_WORLD, &matWorld);で1.0倍〜100倍にしてみましたが、変化は見られませんでした
675デフォルトの名無しさん:2008/03/23(日) 17:05:11
SetRenderState(D3DRS_NORMALIZENORMALS, FALSE);はシェーダーを使う場合には関係ない。
普通なら法線はデータ的に正規化されているのでそのままシェーダーで使っても
問題にならないがボーンの変形や拡大縮小をした場合に法線が1.0じゃなくなって
ライティングがおかしくなるようなときはnormalizeしたほうがよい。

NVIDIAのGF6からならfp16使っているとnormlize()は1クロックで
終了するので実質まったくペナルティはなかったりする。
676デフォルトの名無しさん:2008/03/23(日) 17:21:14
俺もいまだにどういう時にnormalizeするべきなのかが「やってみなけりゃ」わからん
法線関係って3Dでは絶対学ぶべきもののはずなのに、つっこんで説明してるサイトとかが見当たらないんだよな
677デフォルトの名無しさん:2008/03/23(日) 17:36:05
ベクトルに計算施した後、向きベクトルだけ欲しい時に正規化するもんじゃないの?
他にするべきタイミングがあるって事?
678デフォルトの名無しさん:2008/03/23(日) 17:41:28
多分俺の理解度がまずいんだと思うが、例えばライトとのディレクションライトとの角度が欲しいとき
dot(PolyNormal, LightDirection)するだろ?
この時、それぞれはNormalizeされてなきゃダメなのか?とか
PolyNormal : NORMAL は正規化されてる保証があるのか?とかが曖昧で
679デフォルトの名無しさん:2008/03/23(日) 17:47:50
基本的に頂点シェーダーの入力データは頂点バッファの中身そのまま。
頂点バッファに入ってるデータが正規化されているなら頂点シェーダーでも正規化されてる。

法線が正規化されてないと困る場合(主にライティング)に正規化する。
キューブマップとかは方向さえあればいいので正規化はいらん。
680デフォルトの名無しさん:2008/03/23(日) 17:53:10
>>679
サンクス
ってことは、拡大縮小とかゆがみとかやっても頂点バッファのものがくるわけか・・・
モデルの法線は正規化済み&ライト方向も正規化済みなら、
XYZの倍率が全て同じな拡大・縮小を使ってる限りは、ライティング時も正規化はいらないわけね
681デフォルトの名無しさん:2008/03/23(日) 18:11:36
>>676
ライティング処理等で予め正規化されていることを前提に計算が省略されている
場合に正規化しておく必要がある。
ベクトルの内積からcosを求める式のうち、分母の部分は正規化されていれば
必ず1になるから省略できて内積=cosになる。

法線は入力データの段階で正規化されているのが普通なので、この省略された
計算式で実行時の負荷を軽くするのが普通。
682デフォルトの名無しさん:2008/03/23(日) 18:12:40
>>680
拡大縮小は頂点シェーダでやるんだから、頂点シェーダの入力は
拡大されてるわけないだろw
683デフォルトの名無しさん:2008/03/23(日) 18:13:59
質問です
pDevice->SetMaterialで与えられたアンビエント色やスペキュラー色を
HLSL側で受け取るにはどういうふうに書けばいいのでしょうか?
684デフォルトの名無しさん:2008/03/23(日) 18:15:01
SetMaterialを使わずにシェーダ定数で渡す
685デフォルトの名無しさん:2008/03/23(日) 18:19:39
あら、シェーダ定数使うしかないんですか
上の方(>>577あたり)でうまく固定側からテクスチャ情報とかはもってこられるみたいなので
似た感じでいけるかと思ったのですが残念
686デフォルトの名無しさん:2008/03/23(日) 19:17:46
HLSL内でシェーダー定数を固定機能にSetMaterialして、
頂点シェーダーではなく固定機能を呼び出すように指定すれば
レンダリングの流れはシェーダーの有無に関係なく一本化できる。
687デフォルトの名無しさん:2008/03/23(日) 19:25:32
そうなるとエフェクトファイルの範疇になるけどね。
688デフォルトの名無しさん:2008/03/23(日) 19:45:35
スプライト描画で24ビットのビットマップファイルを描画してるんですが
これを描画処理の実行時にグレイスケールで描画することはできますでしょうか
689デフォルトの名無しさん:2008/03/23(日) 19:49:13
ピクセルシェーダ使えるならどうとでも。
固定機能ならテクスチャに高度抽出の係数入れて
合成演算にDOT3とか。他に方法あったっけ。
690デフォルトの名無しさん:2008/03/23(日) 19:50:14
いやん。高度>輝度
691デフォルトの名無しさん:2008/03/23(日) 20:24:46
きど
692デフォルトの名無しさん:2008/03/23(日) 21:22:02
固定シェーダのやってることを理解しようと思って、HLSLで下記を書いてみたのですが
どうしても固定シェーダの見え方と一致しません
どこが間違ってるかわかりますでしょうか?
スペキュラーはFALSEにしてあります。

まず、グローバル変数はこう設定されています。
I_a == D3DLIGHT9.Ambient;
I_d == D3DLIGHT9.Diffuse;
MaterialAmbient == D3DMATERIAL9.Ambient;
MaterialDiffuse == D3DMATERIAL9.Diffuse

VSは下の通りです。ライトはローカル座標系にしてあります

VS_OUTPUT VS(
float4 Pos : POSITION,
float3 Normal : NORMAL0,
float2 Tex : TEXCOORD0
)
{
VS_OUTPUT Out = (VS_OUTPUT)0;
Out.Pos = mul(Pos, mWVP);
Out.Color = I_a * MaterialAmbient + I_d * MaterialDiffuse * max(0.0f, dot(Normal, LightDir));
Out.Tex = Tex;
return Out;
}
693デフォルトの名無しさん:2008/03/23(日) 21:32:04
すいません。すごい速さで自己解決しました

D3DRS_DIFFUSEMATERIALSOURCE
などの設定がマテリアル指定になっていませんでした。
固定シェーダのライティングまわりの必要設定、サンプル系サイトからひっぱってくると
D3DRS_DIFFUSEMATERIALSOURCEとか設定していないですね・・・
マニアック設定なのかなんなのか・・

MeshView(SDKについてくるXファイル閲覧ツール)でも設定はデフォのD3DMCS_COLOR1を見るみたいですね
694デフォルトの名無しさん:2008/03/23(日) 21:34:48
正直固定機能の勉強をしても仕方ないと思うけどね。
DirectX10では完全に存在が抹消されているし、
今後も復活することはまずないだろうし・・・。

シェーダー関係は他の環境でも役に立つけど固定機能は・・・


>>689
DOT3はハードを選ぶよ
695デフォルトの名無しさん:2008/03/23(日) 21:49:04
>>694
VS、PS使えない環境では必要!!

って言いたいところだが、VSはソフトウェア設定でやりゃそこそこの速さで動くんだよな。
PSはハードじゃないとどうにもならないがw
696デフォルトの名無しさん:2008/03/23(日) 21:49:49
仕方ないってことはないと思うが。
固定機能にある機能のほとんどは、3DCGの基本そのものだし。
それを1つずつ自分でシェーダ書いてみるってのは、学習の仕方としては
理想的な方法だろう。
697デフォルトの名無しさん:2008/03/23(日) 21:53:53
俺も気になって今ぐぐってみたが
D3DRS_DIFFUSEMATERIALSOURCE
でひっかかるページの少ないことw

マテリアル使うようなところまでやってるなら、シェーダはプログラマブルだろう!
って感じなのかね?
698デフォルトの名無しさん:2008/03/23(日) 21:54:00
皆さんATiのR2VBという機能は知っていましたか?
これを使えば俺のRadeon9600も、もう少し先にいけるかもしれねェ・・
699デフォルトの名無しさん:2008/03/23(日) 22:16:16
>>698
そんなの使うより、ビデオカード買い換えてVTF使った方が…
9600つながりでGeForce9600GTがいいだろう。
700デフォルトの名無しさん:2008/03/23(日) 22:24:34
>>699
VTFはATIのカードだとHD2000系からじゃないとサポートしてないぞ。
NVIDIAだとGF6からサポートしてるんだけどねぇ。
701デフォルトの名無しさん:2008/03/23(日) 22:25:09
スマソ、9600ってGFの変なヤツの方か・・・
702デフォルトの名無しさん:2008/03/23(日) 22:26:52
>>698
R2VBはATI的にはプッシュしたかったんだろうけど、
DirectX10ではStreamOutという名前で対応する全ハードウェアで利用できる。
703デフォルトの名無しさん:2008/03/24(月) 06:37:39
古いの使いたがる人にDX10を勧めるのは嫌がらせか
704デフォルトの名無しさん:2008/03/24(月) 09:07:38
R2VBなんてDX10以上にレアだろw
705デフォルトの名無しさん:2008/03/24(月) 15:13:55
DirectX9で質問があります
3D空間にz比較を行いながら一定幅の線を引く方法について質問があります

SetTransform(D3DTS_VIEW,
SetTransform( D3DTS_PROJECTION,
でビューマトリクスと射影マトリクスを設定して
D3DXLINEのDrawTransformで設定するマトリクスに位置などに相当するマトリクスを設定してみたのですが、
ビューマトリクスと射影マトリクスが有効になりません、何か他に設定する箇所とかあるのでしょうか?
706デフォルトの名無しさん:2008/03/24(月) 18:12:26
>>705
普通のモデルの表示はできてるの?
それと変わらないと思うんだけど・・・>設定
707デフォルトの名無しさん:2008/03/24(月) 20:07:59
D3DXLINEは使ったことないから適当に言うが、たぶん描画するときに
行列初期化されてるだろう。
1つの行列にまとめてからDrawTransformに渡したらできないかな?
708705:2008/03/25(火) 03:22:51
>>706
普通のモデルは表示できています

>>707
ビュー射影マトリクスを位置マトリクスに掛けてDrawTransformに送ってみた所想定してる位置へ表示されました
D3DXLINEだと、SetTransform(D3DTS_VIEW等の影響が無いと言うことなのでしょうか?
単位マトリクスを
SetTransform(D3DTS_VIEW,
SetTransform( D3DTS_PROJECTION,
に設定しても同様でした

表示はできたのですが、zバッファの処理が行われていません
ビューの設定等が無効になってる影響なのでしょうか?D3DXLINEをググっても使ってる人自体が殆ど居ないのですが、
3D空間に線を引く処理は他で代替できたりするのでしょうか?
709デフォルトの名無しさん:2008/03/25(火) 07:15:31
>>708
普通、DrawPrimitiveのD3DPT_LINESTRIPを使ったりする
710デフォルトの名無しさん:2008/03/25(火) 22:36:39
すみません、質問です。
昔作ったゲームがDirectX9.0bで出来ていまして、再開発のため環境を同じにしたいのですが、DirectX 9.0b SDKって今ダウンロード出来ますかね?
Microsoftのダウンロードページがリンク切れになっているみたいで・・。
やはりむりなんでしょうか?
711デフォルトの名無しさん:2008/03/25(火) 23:46:14
>>710
まだダウンできるみたいだけど?
日本語サイトからじゃなくて英語サイトのダウンロードセンターからダウンすればよろし
712デフォルトの名無しさん:2008/03/25(火) 23:59:29
>>711
うーん、探したのですがここしか見つからなく、リンク切れになっているんです・・・
http://www.microsoft.com/downloads/details.aspx?FamilyID=bc7ddedd-af62-493d-8055-5e57bab71e1a&displaylang=en
713デフォルトの名無しさん:2008/03/26(水) 03:35:30
質問です。
メタセコイアで書き出したXファイルのみアルファブレンドが適応されません・・・。
描画直前でマテリアルの値を直接指定してもなぜかメタセコイアで書き出したXファイルのみアルファがかかりません。
アドバイスお願いします・・・。
714デフォルトの名無しさん:2008/03/26(水) 09:03:42
>>712
いっそ9.0cか10で手直しするか一から作り直したら?
趣味でやってるなら、古い規格にしがみついててもいい事無いよ。
715デフォルトの名無しさん:2008/03/26(水) 09:05:20
SetRenderStateで、α値の参照を何にしてる?

Xファイルのやつはマテリアルにα値を持ってるんじゃない?
それ以外は頂点カラーにα値を持ってるんじゃない?

それで、α値の参照を(大抵のサンプルサイト同様)頂点カラーとテクスチャーからの乗算にしてると見た
参考になるのは>>693
716デフォルトの名無しさん:2008/03/26(水) 09:51:52
>712
正規のOS使ってるなら普通に落とせるだろ
717102:2008/03/26(水) 09:56:39
夜にクリックした時はリンク切れてたけど、今は繋がるね
718612:2008/03/26(水) 22:24:27
ジョイパッドからの入力をバッファで取得しているんですが
POVで十字キーの入力を判定する時
DIDEVICEOBJECTDATA構造体のdwDataメンバにセットされるデータから
どの方向キーが押されたかを判断することはできますが、離された時は常に-1しか
帰ってこないので判定がうまくできませんでした。この部分って既存のソフトたちは
どうしているんでしょう?何かの方法で離されたキーを得られるのか
それとも-1が来た時は十字キー全てを離した事にするのか
719デフォルトの名無しさん:2008/03/26(水) 22:24:58
前の名前がついたまま・・・
720デフォルトの名無しさん:2008/03/27(木) 01:18:15
まぁいいじゃまいか
721デフォルトの名無しさん:2008/03/27(木) 06:16:23
DIJOYSTATEしか使ったこと無いからよくわからんけど…
ヘルプにこんなことが書いてあったぞ↓

rgdwPOV
 視点ハットなどの方向コントローラ。この位置は、北から (ユーザーの正面側)
時計回りの実角度の 100 倍で表される。中心位置は通常 ?1 と報告されるが、
「注意」を参照すること。5 つの位置しか持たないインジケータの場合、コントローラの
値は ?1、0、9,000、18,000、または 27,000 のいずれか 1 つの値をとる。

POV インジケータの中心位置を 65,535 と報告するドライバもある。
POV インジケータが中心位置にあるかどうかは、次のようにして確認する。

BOOL POVCentered = (LOWORD(dwPOV) == 0xFFFF);
722デフォルトの名無しさん:2008/03/27(木) 06:18:06
文字化けしてる ?1 は -1
723612:2008/03/27(木) 08:50:12
ありがとうございます。となると、やはりDIJOYSTATEも組み合わせるしかなさそうですね。
724デフォルトの名無しさん:2008/03/27(木) 22:08:09
なんでDIJOYSTATE?
POVがセンタの時は-1の値をとるってだけだろ
725デフォルトの名無しさん:2008/03/27(木) 22:12:45
何が問題なのかわからない俺
726710:2008/03/27(木) 22:26:17
>>716
>>717
あ、ほんとです。今ダウンロード出来ました。
お騒がせしましたm(_ _)m

>>714
ごもっともです。
再開発といっても画像表示の大きさを変えるくらいで、今回はコンパイルできるだけで良かったのですが。
やっぱ次のは10覚えて出直しますか。。
727デフォルトの名無しさん:2008/03/28(金) 05:02:26
>>709
ありがとうございます。
問題なく実装することができました。
728デフォルトの名無しさん:2008/03/28(金) 12:09:10
ダイレクトサウンドバッファで短い効果音を頻繁にStop()Play()としてるとたまに
0バイト目にポジションをあわせてるのに途中から再生されているように聞こえるんですが、
これはどういった現象がおきているんでしょうか?また、解決方法はありますでしょうか?
729デフォルトの名無しさん:2008/03/28(金) 12:18:28
>>728
プライマリバッファに残ってるサウンドが再生されてしまう
無音のサウンドを無限ループで再生させておくと楽
730612:2008/03/28(金) 19:13:35
なるほど。でもプライマリバッファって実体あるんですか?なんか無いって書いてあった気が・・・
731デフォルトの名無しさん:2008/03/28(金) 19:33:59
無音のデータを読み込んで、最初に無限ループで再生してみましたが
やはり、音が中途半端でした。そういうことではないんですか?
732デフォルトの名無しさん:2008/03/29(土) 01:43:55
DirectX9.0c SDKを使ってますが
D3DXMATRIXA16 から D3DXVECTOR3 を算出する機能はありますか?
XNAでいうところの Vector3.Transform に相当するものです
733デフォルトの名無しさん:2008/03/29(土) 02:06:36
D3DXVec3Transform系
734デフォルトの名無しさん:2008/03/29(土) 02:11:29
>>733
アリガトウゴザイマス、
D3DXVECTOR3TRANSFORMで探してました
通りでないわけです

C#+XNAから転向してきたものですが、
同じ機能探すのに地味に苦労するでつ
735デフォルトの名無しさん:2008/03/29(土) 03:09:48
>>734
×どおり
○どうり
736デフォルトの名無しさん:2008/03/29(土) 08:50:24
原点を中心にした球の表面上にまばらにポイントスプライトを位置させたいのですが、
x、y、zそれぞれの軸でランダムに回転させた行列を合成して行うと、密度に偏りが出てしまいます。
何か良い方法はないでしょうか??
737デフォルトの名無しさん:2008/03/29(土) 09:48:40
D3DXMATRIXA16 から D3DXVECTOR3 を算出できるなら
その逆もできますか先生?
738デフォルトの名無しさん:2008/03/29(土) 11:33:58
無理じゃね?ベクトルから行列を導くってことでそ
739デフォルトの名無しさん:2008/03/29(土) 12:27:30
部品が揃えば可能
740デフォルトの名無しさん:2008/03/29(土) 13:31:15
不可能
741デフォルトの名無しさん:2008/03/29(土) 13:42:59
>>738
>>740
初心者は黙ってろ
742デフォルトの名無しさん:2008/03/29(土) 14:11:51
いや、この質問のみなら不可能って回答であってるだろw
739のほうがベターだとはおもうけど
743デフォルトの名無しさん:2008/03/29(土) 14:46:48
>736
D3DXVECTOR3 v;
v.z = 2.0f * rand()/RAND_MAX - 1.0f;
FLOAT r = 1.0f - v.z * v.z;
FLOAT a = 2*D3DX_PI * rand()/RAND_MAX;
r = sqrtf( r );
v.x = r * cosf( a );
v.y = r * sinf( a );
これでランダム単位ベクトルになるから、
好きな長さに拡縮するといいわよ。
744736:2008/03/29(土) 15:19:27
>>743
できました!
ありがとうございました!

この計算の仕方を解説したサイトや本ってありますか??
とても興味深いです!
745デフォルトの名無しさん:2008/03/29(土) 15:29:32
>>743
それも偏ってね?
746デフォルトの名無しさん:2008/03/29(土) 15:39:20
見事の偏ってるなw
XYZに成分分けしてランダムを行なってる時点でダメだと思うが
747デフォルトの名無しさん:2008/03/29(土) 15:52:03
結局「極」になる部分に星が固まるよな?>>743でも。
748736:2008/03/29(土) 15:54:55
少なくとも、各軸でランダム回転させる行列をかけあわせるよりは遥かにまばらになってますよ。
749デフォルトの名無しさん:2008/03/29(土) 15:55:09
一応ヘリクツだけ書いとくわね。

例えば、スイカを等間隔に輪切りにすると、それぞれの皮の面積は同じになるのね。
z を乱数で求めるということは、その輪切りのうちの一つをチョイスすることになるのね。
後は皮の上の位置をランダムに求めるわけだけど、
皮の幅はほぼ0だから、円の角度を乱数で求めれば終わりね。

Blenderのプラグインでも使われてるけど、実際どうなのなのかしら。(randuvec って関数ね)
ttp://projects.blender.org/plugins/scmsvn/viewcvs.php/trunk/blender/source/blender/python/api2_2x/Noise.c?root=bf-blender&view=markup の randuvec
750デフォルトの名無しさん:2008/03/29(土) 15:57:16
>>749
でも、結局それでも上下(輪切りにされた皮の上下端)にかたまっちゃうよな
素直に四元数使ったほうがいいんじゃね?
751デフォルトの名無しさん:2008/03/29(土) 16:01:25
だれか731お願いします
752デフォルトの名無しさん:2008/03/29(土) 16:09:22
>>749
>スイカを等間隔に輪切りにすると、それぞれの皮の面積は同じになるのね。
ならんならん。
753デフォルトの名無しさん:2008/03/29(土) 16:15:44
なるなる。
754デフォルトの名無しさん:2008/03/29(土) 16:18:08
>>752
前提ちゃんと読んでやれ。
限りなく細ければほぼ一緒になると

ただ、無視できるほど細くはならなさそうだけどな
755デフォルトの名無しさん:2008/03/29(土) 16:23:54
積分の授業はここですか
756デフォルトの名無しさん:2008/03/29(土) 16:24:25
>>754
胴周りの輪の面積:極付近の輪の面積は、限りなく細くすると無限:1に近づくぞ。
簡単な積分だから計算してみれ。
757デフォルトの名無しさん:2008/03/29(土) 16:25:50
一様分布な乱数を生成する関数があればいいの?
758デフォルトの名無しさん:2008/03/29(土) 16:26:05
>>756
比率じゃなくて差を取れば0に近づく。
まあ見解の相違だね。
759デフォルトの名無しさん:2008/03/29(土) 17:15:54
馬鹿でもわかるようにおしえてくれませんか
760736:2008/03/29(土) 17:55:17
>>749
ありがとうございました!
761デフォルトの名無しさん:2008/03/29(土) 18:28:56
それは輪切りじゃなくて、放射状に切っているんじゃないのか?
輪切りだと、中心では2πr*wだが両端ではπw^2になるぞ。
762デフォルトの名無しさん:2008/03/29(土) 19:37:42
SHADEの神の人が教えてくれた技
最初は均等に配置する
それをランダムに移動する
これで解決

まさにSHADEの神
763デフォルトの名無しさん:2008/03/29(土) 20:00:36
10と11だと1も差があるけど、1.1と1.0だと0.1しか差がない

ってことなのね
764デフォルトの名無しさん:2008/03/29(土) 22:08:31
解像度800*600でウインドウモード400*400の画面を作って
そのあとに画面のサイズを変更したいのですが、
SetWindowPosで画面のサイズを変えて
g_d3dpp.BackBufferWidth = x;//変更するxy代入
g_d3dpp.BackBufferHeight = y;
g_lpD3DDEV->Reset(&g_d3dpp);でリセットしてここまではエラーは
出ないのですが
g_lpD3DDEV->GetRenderTarget(&pBackbuffer)で強制終了してしまいます。
Resetでバックバッファをリセットしてると思いますが、
その後pBackbufferが使えなくなるようです。Reset後にバックバッファ
を使えるようにするにはどうすれば良いでしょうか?
それか根本的な他の間違いがありますか?


765デフォルトの名無しさん:2008/03/30(日) 02:44:28
すんません。教えてください。
D3DPT_TRIANGLESTRIPで四角形のポリゴン作って、それにテクスチャを張った。
そうすると、テクスチャが中央当たりで斜めにずれて見えてしまいます。
よくよく見てみると、四角形ポリゴン作るときの三角形の境界でずれてるみたいなんです。
描画するときの座標もuvも確認したけど問題なさそう。
ずらさずに表示したいんですけど、どうすればいいんでしょう。
766デフォルトの名無しさん:2008/03/30(日) 09:45:30
>>765
4頂点を演算して求めると誤差が出る可能性はあるけど
そういう現象は起きたことないから、正常に動作するサンプルを
ヒントにしたほうが解決早そう。
767デフォルトの名無しさん:2008/03/30(日) 10:11:56
一枚の四角ポリゴンでは問題出たことないんだけど
複数の四角ポリゴンで床をタイル敷き詰めしたら繋ぎ目が
見えて困ったことがありますよ。数値を調整して
やっつけ仕事で片付けましたが。
テクスチャを上手く貼るのって簡単なようで案外難しいような・・・。
768デフォルトの名無しさん:2008/03/30(日) 11:36:09
もしかして2Dでやってるならrhwを1.fにしないとダメ
769デフォルトの名無しさん:2008/03/30(日) 12:13:35
あと描画座標を-0.5fしないとだめ
770デフォルトの名無しさん:2008/03/30(日) 14:11:29
ID3DXANIMATIONCONTROLLERを利用してXファイルのロードから単一アニメーションの再生まではなんとか漕ぎ着けたのですが、
人体モデルをアニメーションさせるとして、例えば歩行アニメーションをしながら、顔の向きだけ任意の方向を向くようにするにはどうしたらよいのでしょうか?

正面を向いたまま歩行するモーションと、直立したまま顔が上下左右を向くモーションを作り、
これをSetTrackEnableやSetTrackWeightを使って合成して再生するという感じでよいのでしょうか?
もしくは、顔が含まれるボーンだけ顔が上下左右向くモーションを再生しつつ、それ以外のボーンでは歩行モーションを再生するという考え方でよいのでしょうか?

またこの手の手法の呼び名は何というのでしょうか?
771デフォルトの名無しさん:2008/03/30(日) 14:18:53
>>765に回答お願いします。
772デフォルトの名無しさん:2008/03/30(日) 14:33:16
とりあえず君が問題ないとか思ってる糞ソースを公開しなさい
その方が早い
773デフォルトの名無しさん:2008/03/30(日) 14:43:32
実行結果も貼るぁ!

ずれてるってのが
パースペクティブコレクトとか
アドレッシングモードのことを想像させるが

単に座標の設定間違ってるだけかもしれんし
正直、何がどうなってるのかよくわからん
774デフォルトの名無しさん:2008/03/30(日) 14:49:58
ゲーム的に使うならボーンの階層は全てのモデルで決めうちで作っておいて、
胸、首、頭のボーンを直接拾ってきてプログラム的に任意の方向に向けるという方法のほうが便利
775デフォルトの名無しさん:2008/03/30(日) 14:56:04
>>764にも回答お願いします。
776デフォルトの名無しさん:2008/03/30(日) 15:23:10
765です。
ソース公開しました。

ttp://www.hsjp.net/upload/
up14498.zipってのがそうです。
解凍すると、parm.bmpという絵があるのですが、
それの表示結果が同フォルダ内のexec.bmpです。
左下から右上にかけてななめにずれてしまいます。
777デフォルトの名無しさん:2008/03/30(日) 17:32:01
>>731にも回答お願いします。
778デフォルトの名無しさん:2008/03/30(日) 17:37:49
765です。
rhwを1.0にして描画座標をスクリーン座標にするか、
描画座標を0.1みたいなきりのいい数字にするとうまくいくみたいです。
描画座標はスクリーン座標→ワールド座標に変換してるので結構半端な数字になるんですよね。
それだとうまくいかないみたい。
FLOATの丸めで変な数字になっているのかな。
779デフォルトの名無しさん:2008/03/30(日) 17:40:59
三角形の頂点を結ぶ方向も関係あるとか聞いたことがあるな
780デフォルトの名無しさん:2008/03/30(日) 21:36:22
>>777 ポジションを先頭に持ってく関数はないんですか?
781デフォルトの名無しさん:2008/03/30(日) 21:46:12
>>780ポジションというのはプライマリバッファのですか?
782デフォルトの名無しさん:2008/03/30(日) 22:38:14
セカンダリだろ。
自分でシークしないと先頭位置には戻らないんじゃなかったか?
783デフォルトの名無しさん:2008/03/30(日) 23:17:24
>>782
再生時にはSetCurrentPosition(0)を必ず呼び出してから再生してます。
784デフォルトの名無しさん:2008/03/30(日) 23:40:02
再生直前にボリューム0%にして
再生直後にボリューム100%にしてみたら?

ついでにセカンダリをLOCALSOFTWAREフラグで生成。
785デフォルトの名無しさん:2008/03/31(月) 00:20:35
質問させて頂きます、
HLSLのtex2Dprojとかtex2Dとかでテクスチャの範囲外を指定したときって、
返ってくる値は黒で固定なんでしょうか?
これを白にすることはできないのでしょうか。
786デフォルトの名無しさん:2008/03/31(月) 00:28:03
基点と終点のVECTOR3があったとして
基点から終点を見たときのXYZ軸の角度を取得するのは
どうすればいいでしょうか?
787デフォルトの名無しさん:2008/03/31(月) 00:28:11
すみません勘違いしてました、785は無視してくださいorz
788デフォルトの名無しさん:2008/03/31(月) 00:38:39
>>786
XYZ軸の角度ってのはXYZ軸をそれぞれ中心とする回転の角度???
だとすると
基点がA(Xa, Ya, Za)、終点がB(Xb, Yb, Zb)だとすると
X軸中心の回転角度を取るにはYZ平面に2つのベクトルを投影して
その2つの間の角度を取ると考えれ。
つまり(0, Ya, Za)と(0, Yb, Zb)の内積を出して、それの逆余弦を取る。
別にYとZの2次元ベクトルでやってもいいけど。
(内積→逆余弦の意味はわかるよね?)
789デフォルトの名無しさん:2008/03/31(月) 00:47:43
>>788
三角関数でそれぞれの軸の角度は算出できるのですが
DirectX的にそういうマクロとか関数があるのかと思って
質問した所存であります
ありがとうございまつた
790デフォルトの名無しさん:2008/03/31(月) 00:50:54
>>784
目から鱗です!ちゃんと再生できました。家のハードがダメということでしょうか?
なぜなのか分からない・・・ちなみに音量はコメントアウトしても大丈夫でした。


それと関係ないですがウィンドウを一回最小化してからまた呼び出すと
タスクマネージャーのメモリ使用量が10メガから3メガに減ります。
これって監視がうまくできてないだけなんでしょうか?リークじゃないですよね・・・?
791デフォルトの名無しさん:2008/03/31(月) 00:57:33
>>790
基本的にサウンドのハードウェア処理は信用に値しない。
グラフィックのように眼に見えて比較されるわけでもなし、
DirectSoundなんて適当でいいっすよ。ってところだろう。
結局スピーカー次第ですよね、というオチもあるし。
792デフォルトの名無しさん:2008/03/31(月) 01:04:38
音ゲー製作をしています。
PCによって再生開始時の個体差があるためか、どうしても音楽と画面とのずれが出てしまうのですが、何か良い方法はないでしょうか?

なお、音楽再生にはDirectShowを使用していますが、他のライブラリに変更も可能です。
2倍速再生などが簡単にできるという理由でDirectShowを選んだのですが・・。

少し抽象的な質問な上、DirectShowはもはやDirectXではない(笑)ですが、音ゲーにとって致命的な問題に突き当たってしまったもので・・
よろしくお願いします。
793デフォルトの名無しさん:2008/03/31(月) 01:11:58
個体差があるのはDirectShowだからとかじゃなくて?
あれ別スレッドに投げて再生してるから遅延があるんだと思ってたけど。
794デフォルトの名無しさん:2008/03/31(月) 01:13:49
あーあれ別スレッドだったんですか、、すみません無知で・・。
ということは、DirectMusicなどを使えばいいんでしょうか?
795デフォルトの名無しさん:2008/03/31(月) 09:38:52
なぜそこでDirectMusicなんだ・・・DirectSound使え
796デフォルトの名無しさん:2008/03/31(月) 11:04:44
DirectAudioじゃないのか?w
797デフォルトの名無しさん:2008/03/31(月) 15:17:55
>> 795
あーすみません。昔読んだ本に音楽はDirectMusic、サウンドはDirectSoundを使うとの記述があったような気がしていたので・・。
たぶん、DirectSoundでストリーミング再生すればよいのですね。
助かりました。ありがとうございました。

>> 796
今はSoundとMusicが統合されてAudioになっているみたいですね。
将来的にはXBoxとライブラリを統合するだとかなんだとか、いつの間にかややこしいことになっていましたw
798デフォルトの名無しさん:2008/03/31(月) 15:42:21
3Dのバンプマップについて質問なのです
とりあえずテクスチャーステージを2つ使って「通常のテクスチャー」「法線情報テクスチャー」を使いバンプを行なっています

で、気づいたのですが、私の作ってるゲームはディレクションライトの方向が固定です。
その場合「通常テクスチャー(ライティングを考慮して影をつけたもの)」をライティング計算済みポリゴンに適応すればまったく同じ結果が得られるような気がします。
この認識は正しいでしょうか?

・ライト方向の変化ができない
・スペキュラー反射を適用できない
・テクスチャーを一定方向でしか貼れない(影方向に矛盾がでてしまうので)

とは思っていますが、広い土のフィールドを表現するには十分かなと思うのですが
799デフォルトの名無しさん:2008/03/31(月) 15:42:52
あ、あと光の強さも変えられませんね。
800デフォルトの名無しさん:2008/03/31(月) 18:47:20
>>798
地形のように、光源との位置関係がまったく変化しないのならば問題ない。
801デフォルトの名無しさん:2008/03/31(月) 20:06:21
DirectInputで

byte keys[256];
Device->GetDeviceState(sizeof(keys),&keys);
でキーの状態を取得したあと

if(keys[DIK_LEFT] & 0x80)
とかでキーの判定をするコードを良く見ますが

& 0x80 が何を表してるかわからんです

if(keys[DIK_LEFT])
でも期待通りの挙動をするんでなおさら意味不明です

& 0x80 が何なのかおしえてください
802デフォルトの名無しさん:2008/03/31(月) 20:17:12
意味も何も、そういう仕様で作られているから、としか言いようがない。
最上位ビット以外が何か別の目的で使われる可能性もあるから、
一応マスクはしておいたほうがいいんじゃないかな。
803デフォルトの名無しさん:2008/03/31(月) 22:13:54
>>801
よくわからんけどサンプルがそう書いてあったから・・・って奴多いと思うよ
俺もそうだしw
あとは俺が昔いた会社の先輩みたいにヘルプを全部読んだ後でないと
プログラム組めないとかいう難儀な性格してる奴ぐらいしか知らないと思う
考えるのも面倒だしサンプルどおりって感じじゃないだろうか?

ちなみにヘルプには

キーボードのバッファリング データ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/input/using/devicedata/bufferedkeyboarddata.asp
キーの状態変化データは、DIDEVICEOBJECTDATA 構造体の dwData メンバに格納されている。
dwData の下位バイトだけが有意である。上位ビットはキーが押されたときに設定され、キーが離されたときに消去される。
言い換えれば、(dwData & 0x80) がゼロでないとき、キーが押されていることになる。

って書いてあったw
俺も「へー」って感じ「へー」ってw
別に最上位ビットである意味ってないっぽいなw
>>802がいう通り「そうなってるから・・・」ってこと 残念w もっと高度な理由があればよかったファンタジー
804デフォルトの名無しさん:2008/03/31(月) 22:29:10
>>764にコメントよろ
805デフォルトの名無しさん:2008/03/31(月) 22:47:37
>>804
pBackBufferってReset後に再取得してる?
前から保持してる奴ならResetかけた瞬間に死んでるから駄目じゃね?
806デフォルトの名無しさん:2008/03/31(月) 22:58:06
って使ってんじゃなくて取得してんのか?w
>>805はスルーしてくれ
スマンコ
807デフォルトの名無しさん:2008/03/31(月) 23:17:08
>>806
再取得はどうやるんですか?ヒントだけでもお願いします。
808デフォルトの名無しさん:2008/03/31(月) 23:35:46
>>807
そのレスは間違いだ

ところで
HRESULT GetRenderTarget(

DWORD RenderTargetIndex,
IDirect3DSurface9 **ppRenderTarget
);

単に引数の設定が間違ってるだけじゃね?

とかもうなんでもテキトーに言ってみるテスト
809デフォルトの名無しさん:2008/04/01(火) 02:15:03
質問です、
128×128のARGB(255, 132, 130, 66)で塗り潰したBMPを用意しました(@)
また、CreateTextureしLockRectしてARGB(255, 132, 130, 66)で塗り潰したテクスチャを用意しました(A)
前者と後者を同じ関数(ID3DXSprite::Draw)で塗り潰したのですが、何故かほんの少しだけ色味が違います。
これは何故なのでしょうか?
810デフォルトの名無しさん:2008/04/01(火) 03:35:30
訂正、塗り潰したではなく表示したです。
811デフォルトの名無しさん:2008/04/01(火) 03:41:24
>>801はビットマスクとか知らない人なんじゃないかと予想
812デフォルトの名無しさん:2008/04/01(火) 06:43:27
VS2008の後DirectX9SDK入れても新規プロジェクトにDirectXウィザードがないんですけどどうなってるんですか?
813デフォルトの名無しさん:2008/04/01(火) 07:51:44
長く標準的に使われるものと、打ち捨てられ廃止されるものを見抜くスキルもなくては
Microsoft製品を使っていられない

814デフォルトの名無しさん:2008/04/01(火) 08:54:42
ちょwこの入門書オワタwww
815デフォルトの名無しさん:2008/04/01(火) 09:19:13
>>810
それぞれのテクスチャの格納先は24ビット以上?
そして表示先も24ビット以上?
816デフォルトの名無しさん:2008/04/01(火) 10:43:37
>815
確認してみると画面モードは16ビットになっていました(デバッグ時にテストの為に変更していたのを忘れていました)
また、画像フォーマットはAはA8R8G8B、@はUNKNOWNだったので@をA8R8G8B8に修正しました。
ですが、それでもほんの少しだけ色味が違います。パラメータは同じなのですが………。
817デフォルトの名無しさん:2008/04/01(火) 10:48:29
訂正です、@とAの画像フォーマットは逆でした。
そして、ほんの少し色味が違うとレスしましたが、
ふとビットマップのRGBを確認したところ16ビット→32ビットに解像度を変化させた為か、
RGB(128,128,64)となっており、Aの塗り潰す色を変えたところ色味が同じになりました!
ありがとうございます、助かりました。
818デフォルトの名無しさん:2008/04/01(火) 21:23:52
>>808 ヒントアリがトン
819デフォルトの名無しさん:2008/04/02(水) 00:16:36
シェーダのことで質問なんですが
頂点シェーダからピクセルシェーダに渡すfloat4の位置というのは
射影変換後のx=-1〜1, y=-1〜1, z=?, w=z?の位置で
ラスタライザでx, y, z, wがwで除算されて
ピクセルシェーダに渡される、という認識で合っているんでしょうか?

射影変換後のzとwってどうなっているんでしょう
z=0, w=1じゃだめなんでしょうか?
820デフォルトの名無しさん:2008/04/02(水) 02:17:01
近頃のロボゲーで出てる3Dで直線状の、
透明感のあるレーザーを表現するにはどうしたらよいですか?
バーチャロン1とか3D初期のころのゲームは
円柱をスケーリングしてるだけみたいでしたが
近頃のはビルボードでやってるんだかなんだか知りませんが
透明感があるけど芯の部分は色が濃くなってボリューム感があったりします
半透明の円柱を伸ばしてみてもイマイチな質感しか得られません
821デフォルトの名無しさん:2008/04/02(水) 02:27:26
ポリライン
822デフォルトの名無しさん:2008/04/02(水) 03:04:11
シェーダの使用前提にできるなら、
円柱にピクセルシェーダでグローかけるとよりボリューム感出せるね
823819:2008/04/02(水) 04:10:13
解決しました
みなさんありがとうございました
824デフォルトの名無しさん:2008/04/02(水) 10:49:16
VC++のヘルプとDirectXの日本語ヘルプを一つにしてF1キーで両方から探すよう設定することはできますか?
825デフォルトの名無しさん:2008/04/02(水) 12:01:32
なんかうちのCreateTextureFromFileExしょっちゅうしくじるんだけど
みんなのところもそうなのかなぁ・・・
826デフォルトの名無しさん:2008/04/02(水) 12:08:04
自分の環境ではしくじらないですよ?
根本的なとこにミスがあるのでは?
827デフォルトの名無しさん:2008/04/02(水) 12:13:13
>>825
その決して自分を疑わな(ry ry)かすべきでは?
828デフォルトの名無しさん:2008/04/02(水) 12:18:48
「自分より中の人の方が頭がいい」が基本
829デフォルトの名無しさん:2008/04/02(水) 15:37:03
>>826-828
う・・・分かっていても相手を疑いたくなる俺はクソグラマ・・・
マルチスレッドは関係ないよね?関数自体は常に専用のスレッドから呼ばれるし、
返り値が0x88760827なんだけどこれって引数おかしい!だっけ?
830デフォルトの名無しさん:2008/04/02(水) 16:27:06
今調べてみたら
Createxxx 呼び出しから D3DERR_DRIVERINTERNALERROR が返された場合、それは致命的エラーとは見なされない。
ドライバは、このエラーを D3DERR_UNSUPPORTED または D3DERR_OUTOFMEMORY エラーと同様に扱う。
とのこと、
・・・・・どうしろってんだ。
このエラーで失敗した場合は成功するまで何回もチャレンジすればいいのかなぁ・・・
831デフォルトの名無しさん:2008/04/02(水) 16:33:32
とりあえず、そういう風に作ったら、マルチスレッドでも動くようになりました。2回くらい連続で失敗したりもしてたので
マルチだとタイミングによって具合が悪くなるのかも?
832デフォルトの名無しさん:2008/04/02(水) 16:37:32
GPUが落ちかけてるか(電源容量不足)
熱で飛びかけてる(廃熱不足)
833デフォルトの名無しさん:2008/04/02(水) 17:21:39
>>832
?それは上に対してのレスですか?どういうことでしょう?
834デフォルトの名無しさん:2008/04/02(水) 17:33:43
メモリー壊れてねーか?
memtest走らせてみ
俺も昔、外的要因に左右されないプログラムなのに起動すると時々結果が違うってことがあって
調べたらメモリーがイカれてた。
835デフォルトの名無しさん:2008/04/02(水) 17:51:05
>>833
CREATEを試みたが何かハード的なエラーが検出されたため
GPUが処理を中止させたのかなと
836デフォルトの名無しさん:2008/04/02(水) 18:51:41
>>834
マルチスレッドの時しか起こらないんだけど、メモリー壊れてるのか・・・?

今再現コード作ってみるから試してみれ
837デフォルトの名無しさん:2008/04/02(水) 18:54:11
しかとかよ
まあいいけどね
838デフォルトの名無しさん:2008/04/02(水) 19:21:41
>>837
すまん。

何言ってんのかよく分からなかったから再現コードでやってもらおうと思ったんだが、再現できん
相性問題ってやつも絡んでくるのだろうか・・・
839デフォルトの名無しさん:2008/04/02(水) 19:23:53
は?824だよ聞くだけよっていってんだよ
840デフォルトの名無しさん:2008/04/02(水) 19:30:51
あなたは>>824で? 「聞くだけよん(はあと」? ……って言ってんだよ???
841デフォルトの名無しさん:2008/04/02(水) 19:31:54
ばかじゃん
842デフォルトの名無しさん:2008/04/02(水) 19:32:31
>>839が何を言ってるのかわからない
843デフォルトの名無しさん:2008/04/02(水) 19:34:58
836だが
ttp://www7.axfc.net/uploader/93/so/File_5112.zip.html
これやってみてくれ、log.txtに○回目って出たらしくじってる。
一枚の画像で何回しくじったかを吐き出してる。
内容は気にしないでくれ
844デフォルトの名無しさん:2008/04/02(水) 21:59:30
>>843
「DirectInputDevice8作成に失敗」ってのが出るが実行・操作はできた
最初27回目まで出たけど、その後は3回ぐらいやってもスラッシュが増えるだけだった

操作は移動とジャンプだけか?
845デフォルトの名無しさん:2008/04/02(水) 22:00:23
×「DirectInputDevice8作成に失敗」
○「DirectInputDevice8オブジェクトの作成に失敗」
846デフォルトの名無しさん:2008/04/02(水) 22:06:31
0回目:88760827
1回目:88760827
2回目:88760827
・・・
99回目:88760827
@loadImage(Image\kurew_000.bmp)imgerr=88760827

イメージファイル読み込み失敗ってエラーも出るし、なんか根本的に駄目だな
この規模だったらまだなんも恥ずかしいことないから、ソース晒してみたらどうかね
847デフォルトの名無しさん:2008/04/02(水) 22:23:43
たまに「0回目:88760827」が出るな
DirectInputのエラーは毎回出るが普通に動く。
848デフォルトの名無しさん:2008/04/02(水) 22:31:58
DirectInputの方はジョイパッドが刺さって無くても出るようになってました。多分そのせいでしょう。
>>844操作はそんなもんです。強いて言うなら左右早押しでダッシュくらいです。
しかしこの結果にはショックを隠しきれない。ソース類27個あるけど見てくれますか?
849デフォルトの名無しさん:2008/04/02(水) 23:02:29
基本的なこと聞くが、D3Dのデバッグランタイムはなんも言ってこんのか。
850デフォルトの名無しさん:2008/04/02(水) 23:36:45
>>849
すいません・・・どうやるんでしょう?
851デフォルトの名無しさん:2008/04/02(水) 23:47:15
>>850
んーとな、、SDKユーティリティのDirectX Control PanelでRuntimeをDebugに選択、
Debug Output Levelを最大に設定。あとはVC++上でデバッグ実行しつつ出力ウィンドウに注目。

Direct3D APIがエラーコードを返してくるような時には、まともな詳細メッセージが期待できる。
852デフォルトの名無しさん:2008/04/02(水) 23:58:20
BCCだけどなんとかできた。そして、おまいら知ってたか、マルチスレッドでやる時はな・・・
D3DCREATE_MULTITHREADEDって言うフラグを指定すればいいんだと!

あばよ!!
853デフォルトの名無しさん:2008/04/03(木) 00:03:23
そんなもん指定したことないけど、まともに動いてるよ俺の。

ところで基本中の基本だが、Direct3Dの初期化と利用は同一スレッドだけに限ってるだろうな?
WinMainスレッドでD3Dを作成し、_beginthreadしたスレッドで利用とか勘弁だぞ。
一見まともに動くが、デバイスリセットは必ず失敗するわ、その際のエラーは「引数が異常」だわ、ほんと地雷だわ
854853:2008/04/03(木) 00:05:18
あ、わかった。
テクスチャーの読み込みを別スレッドでやってるだろ?
855デフォルトの名無しさん:2008/04/03(木) 00:05:53
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>852 マルチスレッドでやる時はな・・・D3DCREATE_MULTITHRE痛ッ
856デフォルトの名無しさん:2008/04/03(木) 00:16:22
>>854
じゃあ、作成したスレッドでゲーム動かしてMainスレッドで画像取得と貸した方がいいのかな・・・
みんなはどうやってるんだろう。

あ?何叩いてんのさ。いてーだろ
   _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>855
857デフォルトの名無しさん:2008/04/03(木) 00:19:15
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>856
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>856
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>856
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>856
  _, ,_  パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>856
858デフォルトの名無しさん:2008/04/03(木) 00:19:46
次の話題お願いします
859デフォルトの名無しさん:2008/04/03(木) 01:35:48
    _, ,_   ,, パシッ
  ( ‘д‘) ノn 
        ヽ(-_ - )

     _, ,_
 ∩(* (   )∩ ん…



   +         +
 +   ( `Д´) ハァハァ    +
    (  つ   _, ,_          +
     ),ィ⌒(;‘д‘)  ああっ…  +
   (_(__人__,つ 、つ
860デフォルトの名無しさん:2008/04/03(木) 01:43:31
>>859
なんでそうなるの?w
861デフォルトの名無しさん:2008/04/03(木) 08:30:45
どーでもいいが
これマルチスレッドにする必要ねーだろ
スライスぐらい自己管理しろよ
862デフォルトの名無しさん:2008/04/03(木) 09:36:58
>>856
画像取得が、画像のロードだとするなら、それは別スレッドでやっちゃいかんと…。
863デフォルトの名無しさん:2008/04/03(木) 10:23:55
高性能CPUの時代にマルチスレッドとか旧時代の遺物だろ
処理の流れが複雑で予測できなくなるだけで百害あって一利なし
864デフォルトの名無しさん:2008/04/03(木) 10:25:52
マルチコアやPS3Cell時代に何をいうてますのん?
865デフォルトの名無しさん:2008/04/03(木) 11:02:55
つまりどういうこと?
866デフォルトの名無しさん:2008/04/03(木) 11:38:10
つまりD3DCREATE_MULTITHREADEDをお忘れなくということ
867デフォルトの名無しさん:2008/04/03(木) 14:15:11
>>863
処理の流れが予測できる部分で使えよ。
画像の読み込みとか。
868デフォルトの名無しさん:2008/04/03(木) 14:50:32
>>863 は未来人なんだろう
869デフォルトの名無しさん:2008/04/03(木) 23:16:32
マルチスレッドっていってもCPUたかが2つだろ?
ゲーム画面とチャットウィンドウでも気持ちよくだしてもらおうとか
思ったらなにもしないほうがいいんでない?
870デフォルトの名無しさん:2008/04/03(木) 23:22:06
何もしないほうがいいかどうかはゲームデザイン次第。
少なくともCPUが二つあるなら二つを効果的に使うほうが早い。

使えるかどうかは本人の技量次第。
871デフォルトの名無しさん:2008/04/03(木) 23:48:14
CPUが二つあることを前提にしてプログラムを組むと
汎用性がなくなって、ハード制限が厳しくなるんだよな

まあオプションで細かく設定させるようにすればいいわけだけど
結局別パターンの処理を用意しないといけないし、
ユーザー側にもそれなりの知識が要求される
872デフォルトの名無しさん:2008/04/04(金) 00:18:26
>>870
CPU2つ使っちゃったらチャットウィンドウだせないじゃん
ヘルプも読みにくいし勝手なことすんなよって感じじゃね?
フルスクリーンのFPSとかそんなのしか使い道なさげじゃん?
共存せなあかんよ。共存。
873デフォルトの名無しさん:2008/04/04(金) 00:20:33
何このアホなやりとり
874デフォルトの名無しさん:2008/04/04(金) 00:28:00
>>871
二つあることを前提にしてもWindowsで作ってるならシングルコアPCでもそのまま動くだろ・・・。

>>872
じゃあシングルコアのPCでゲーム起動したら他は何もできなくなるのか?
MS−DOSの話は誰もしてないぞ?
875デフォルトの名無しさん:2008/04/04(金) 00:28:35
うわ、まるでスレッドの数だけCPUを占拠して他のプロセスが動かなくなるとでも思っているかのようだ。
876デフォルトの名無しさん:2008/04/04(金) 01:57:38
そりゃ実行中には占拠するだろ。
CPU二つなら同時実行できるけどそうでなければマルチの意味がないし。
877デフォルトの名無しさん:2008/04/04(金) 03:03:39
>>871
CPUは1つでもマルチタスクを処理できます。
ですが、シングルスレッドで動いてるアプリをマルチコアで高速化はできません。

マルチスレッドにするとマルチコアCPUで高速化できます。
当然、シングルコアでもマトモに動くように開発を進めるでしょう。
878デフォルトの名無しさん:2008/04/04(金) 04:31:34
まあ、マルチスレッドで組まれたプログラムは通常はシングルだと重くなるんだけどね
マルチコアだからこそ意味があるのがマルチスレッド処理なわけで
879デフォルトの名無しさん:2008/04/04(金) 05:29:55
他アプリとの同時実行を考えると、
1アプリで無駄にCPUをこき使うのはあまり好ましくないですね。
880デフォルトの名無しさん:2008/04/04(金) 05:50:57
なんだかこのスレ読んでると単純なワーカースレッドまで全否定してるみたいで恐ろしくなる
881デフォルトの名無しさん:2008/04/04(金) 06:02:33
CPUの割り当てはプロセス毎にユーザー側で設定可能で全く問題ないはずなんだが
882デフォルトの名無しさん:2008/04/04(金) 06:08:07
そんな知識のあるユーザーがどれだけいるのかと
883デフォルトの名無しさん:2008/04/04(金) 07:18:38
何スレッドに分けるか可変にして、CPUの数見て分ければいいだけやん
884デフォルトの名無しさん:2008/04/04(金) 08:53:59
なんだか、判っていない連中が多いようだ。
CPUをこき使うプロセスだとて、実際にはOSなどの優先順位の高いプロセスにCPU時間を譲ることになるわけなんだが。
885デフォルトの名無しさん:2008/04/04(金) 09:23:09
ファイルの裏読みとかシングルコアのPCつかっててもやるだろjk
シングルコアだと総合的な速度は低下する可能性はあるが、
今後はマルチコアが主流になっていくんだし、
応答性をあげるためにはマルチスレッド化が必須な場合もある。
886デフォルトの名無しさん:2008/04/04(金) 10:35:06
そろそろDirectXの話に戻ろうぜ
887デフォルトの名無しさん:2008/04/04(金) 10:56:54
マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳
マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳
888デフォルトの名無しさん:2008/04/04(金) 11:51:25
じゃあちょっとDirectXと絡めて。

上でも出たように、マルチスレッドの場合はD3DCREATE_MULTITHREADEDを指定する必要がある。
ローディング画面(←アニメーションつき)でのテクスチャーの読み込み程度でしか使うつもりがない場合、全般的に性能が(どの程度かは不明だが)低下するこのオプションは指定したくないだろう。

どのように解決する?
889デフォルトの名無しさん:2008/04/04(金) 11:59:20
画像のロードは別スレッドにて自前で行い、
テクスチャのロックだけDirect3D用のスレッドで行う。
890デフォルトの名無しさん:2008/04/04(金) 12:22:34
マルチスレッド使わない奴は低脳
891デフォルトの名無しさん:2008/04/04(金) 12:26:23
きめえw
892デフォルトの名無しさん:2008/04/04(金) 14:22:32
とある行列を、Y軸回転成分、Z軸回転成分、X軸回転成分にわけることはできるでしょうか?
つまり
D3DXMatrixRotationYawPitchRoll
の逆をやりたいのですが
893デフォルトの名無しさん:2008/04/04(金) 15:36:11
>>892
何が言いたいのかよくわからんが
行列(D3DXMATRIX)のメンバはそれぞれ
_11,_12,_13 X軸の方向ベクトル
_21,_22,_23 Y軸の方向ベクトル
_31,_32,_33 Z軸の方向ベクトル
_41,_42,_43 位置座標
を意味してるんだぜ?
物体がどっち向いてるかなんて1発でわかると思うんだが
894デフォルトの名無しさん:2008/04/04(金) 15:51:43
>>893
なんです…と…
895デフォルトの名無しさん:2008/04/04(金) 15:59:30
俺も知らんかった・・・
D3DXの便利関数に慣れすぎると基本がおろそかになるってのは本当だな…
そういう基礎中の基礎を教えてくれるお勧めページないか?
896デフォルトの名無しさん:2008/04/04(金) 16:05:39
昔からDXのヘルプに書いてあるだろうに
いったいどの次元の人達なんだよ
897デフォルトの名無しさん:2008/04/04(金) 16:12:06
DXのヘルプを熱心に読んでから入る人なんてほとんどいねーだろ
俺はどこで知ったんだったかなー
898デフォルトの名無しさん:2008/04/04(金) 16:26:55
ちなみにDirectXのヘルプにんなことは書かれてないよw
899デフォルトの名無しさん:2008/04/04(金) 16:35:28
ヘルプはたまに関数リファレンス調べるくらいだなぁ
俺はマルペケつくろーどっとコムで知った
900デフォルトの名無しさん:2008/04/04(金) 16:36:34
>>898
やっぱり読み取れなかったのか?
901デフォルトの名無しさん:2008/04/04(金) 16:37:57
>>900
昔ざっとヘルプ見回したことあるけど、そんなもん見たことないぞ
俺もなんとなーく知ってたが

他人を馬鹿にして悦に浸るのにこのスレはふさわしくないだろ
俺の見落としだったら謝るから、URLでもはっつけてやれ
902デフォルトの名無しさん:2008/04/04(金) 16:46:10
ttp://marupeke296.com/DXG_No39_WorldMatrixInformation.html
とりあえずマルペケだとこのページだな
分かりやすい
903デフォルトの名無しさん:2008/04/04(金) 16:52:40
>>901
>>893のように学校の生徒に教えるような書き方じゃないよ
URLって言われてもヘルプにURLなんてないんじゃないの?
4×4のマトリクスについて説明してるところだよ
x'=(m11*x)+(m21*y)+(m31*z)+(m41*1) とか書いてあるところ
これ見て考えればわかるじゃん
ここはゲ製板じゃないから読み取れるものとして書き込んたんだが
やっぱり初心者スレだからスレ違いか
904デフォルトの名無しさん:2008/04/04(金) 16:53:16
>>902
ありがとうございます。
とても分かりやすいですし、他のコラムも面白そうなので一通り読んでみます。
905デフォルトの名無しさん:2008/04/04(金) 16:54:25
>>903
痛すぎる。
MSDNオンラインも知らないお前が初心者を脱却してるとは思えん。
906デフォルトの名無しさん:2008/04/04(金) 17:16:29
まぁまぁ。
下を見て自分の位置を確認するのは結構だけど
たまには上のほうも向いてみようぜ。
907デフォルトの名無しさん:2008/04/04(金) 17:35:27
このスレに求められるもの
・正確な情報
・的確な回答

求められないもの
・相手は自分よりも劣っているという思い込み
・「ヘルプに書いてあったはず」といった、不確かな情報
908デフォルトの名無しさん:2008/04/04(金) 17:38:29
>>907
求められないもの
・自分は間違ってないと主張したがる人
909デフォルトの名無しさん:2008/04/04(金) 17:47:52
ヘルプに書いてあるし、MSDNオンラインなんてものはありません!!
910デフォルトの名無しさん:2008/04/04(金) 18:03:16
とりあず、基本に戻って
>1を10回読み直してみるのはどうだろう?
911デフォルトの名無しさん:2008/04/04(金) 18:46:03
というかマトリクスの中身を見続けてれば自然に発見できるもんじゃね?
要素が各軸の方向ベクトル示してるのなんて
912デフォルトの名無しさん:2008/04/04(金) 18:58:10
ここは行列初心者のスレではありませんよ?
913デフォルトの名無しさん:2008/04/04(金) 20:01:42
別に教えたくない人はスルーすればいいんだから、喧嘩すんなよ
914デフォルトの名無しさん:2008/04/04(金) 22:13:51
ひょっとして荒れてる?

Vector4 の W が何を表してるかわからないのでおしえてください 
915デフォルトの名無しさん:2008/04/04(金) 23:16:20
>>893
本当にそうなってるっけ?
XYZ3つのベクトルと位置座標からそれを作るときはよかったけど
マトリックスからベクトルに分解するときもそれでいけたっけ?
916デフォルトの名無しさん:2008/04/04(金) 23:17:29
>>914
なんか同次座標とかいう奴
俺もよく知らないで使ってる
917デフォルトの名無しさん:2008/04/04(金) 23:18:21
>>914
同次ベクトルでググれ
918デフォルトの名無しさん:2008/04/04(金) 23:19:58
>>917
昔、散々ググッたけど見る説明見る説明尽く意味不明だった希ガス
なんか書き手もよくわかってないのが文面から透けて見える
919デフォルトの名無しさん:2008/04/04(金) 23:28:44
同次ベクトルは一次変換で並進を表現できるようにするってだけののもの。
なんてことはない。
ttp://ranobe.com/up/src/up265377.jpg
920デフォルトの名無しさん:2008/04/04(金) 23:42:29
>>919
悪い
意味がわかんない

何と比べてどういいの?ってのと
できれば(X、Y)から(X、Y、W)にしていいことってのを説明してほしい
921デフォルトの名無しさん:2008/04/04(金) 23:45:04
128バイトになるからベクトル演算による高速化が行いやすいんだろう。
922デフォルトの名無しさん:2008/04/04(金) 23:50:58
こういう一次変換を複数行いたい場合、
この変換行列の積を持っておきさえすれば、
一回の一次変換で変換できる。
923デフォルトの名無しさん:2008/04/04(金) 23:58:15
同次座標がなんぞやとは説明出来ないが
XYZのベクトルをW平面に射影したものだとイメージするとわかりやすい
W=1の平面から観るXYZベクトルと
W=100の平面から観るXYZベクトルは違ってみえるが
実際は同じものである、みたいな
924デフォルトの名無しさん:2008/04/05(土) 00:02:11
まあ、その変換行列の積ってやつも下が0001だから
別に無理に保持する必要は無いんだがな。
同次ベクトルは数学的に優れたトリックではあるけど、
実用的には0とか1とかを実際にメモリ上に持っている必要は無い。
925デフォルトの名無しさん:2008/04/05(土) 00:32:57
>>923
もっとわからなくなった責任とれ
926デフォルトの名無しさん:2008/04/05(土) 00:58:11
128バイト境界に揃う事で何か利点はありそうな気はする。
927デフォルトの名無しさん:2008/04/05(土) 01:03:22
SIMD演算
928デフォルトの名無しさん:2008/04/05(土) 01:04:36
結局 >>921 ってことだな。
929デフォルトの名無しさん:2008/04/05(土) 01:40:59
>>893
41、42、43は使ってたけど

11〜33はワケワカランのでほっといたw
930デフォルトの名無しさん:2008/04/05(土) 04:00:07
よくわからんがクォータニオンとか軸回転とはちがうんすか?
931デフォルトの名無しさん:2008/04/05(土) 11:04:51
任意の方向を向いてる飛行機に”左に向け”っていう指示を出した時に
クォータニオンなら直接処理できて、軸回転はややこしやってことじゃね?
932914:2008/04/05(土) 11:21:17
まだよくわからんです
結局Wって何なんでしょうか?

Vector2 は XY 座標で2次元の座標を表し
Vector3 は XYZ 座標で3次元の座標を表し
Vector4 は XYZW で何を表すんでしょうか?

というか主にどんなときに使うんですか?
933デフォルトの名無しさん:2008/04/05(土) 11:22:29
だから w は並進を一次変換で表現するためのダミー変数だって言ってるじゃん。
934デフォルトの名無しさん:2008/04/05(土) 11:38:51
グラボでどうやってるかは知らんが、
とりあえず CPU 側で計算する場合は SIMD 使えば
4 ワードになるから高速に計算できる。
935デフォルトの名無しさん:2008/04/05(土) 11:41:15
まぁ計算しやすいからそうしてると思っとけばいいんじゃね
936デフォルトの名無しさん:2008/04/05(土) 11:50:21
結局よくわからないんだよなw
937デフォルトの名無しさん:2008/04/05(土) 12:04:58
マトリクスに座標値セットするときにWに1があらかじめはいってれば
そのまんまコピーできる
938デフォルトの名無しさん:2008/04/05(土) 12:08:12
普通のワールド変換だけで考えても
ベクトルと4x4マトリックスの演算をするときに
ベクトルが3要素しかない場合は移動が適用出来ない。
マトリックスの移動成分の計算を適用させるためにw=1.0という値が必要。

頂点シェーダーでもfloat3とfloat4x4のmulはエラーになるだろ。
939デフォルトの名無しさん:2008/04/05(土) 12:11:38
普通に計算する分には 3x3 の部分をかけてから並進部分を足せばいいんだけどね。
だのに何で w をわざわざつける仕様になってるのかというところに疑問があるなじゃない?
940デフォルトの名無しさん:2008/04/05(土) 12:13:25
普通に考えれば 1 とのかけ算をわざわざやる分計算量増えるんじゃないの? と思うだろう。
ベクトル演算で状況は変わるんだが、そこを説明しないとな。
941デフォルトの名無しさん:2008/04/05(土) 12:18:41
確かに普通ならいちいち1.0をかけるのは計算の無駄と考えるな。
昨今のGPUのようなベクトル演算を行なう時の最適化については初心者スレの内容でもないきがするけど。
942デフォルトの名無しさん:2008/04/05(土) 12:27:23
・平行移動つきの4x4行列を適用できる
・スクリーン変換に必要な割り算一回分を保留できる
てのがメリットね。
943デフォルトの名無しさん:2008/04/05(土) 12:38:06
計算量の問題なのか?
概念的にわかりやすいからそうしてるのか?
そこがわからない
944デフォルトの名無しさん:2008/04/05(土) 12:40:29
よくわからんけど
計算を早くしたいならV4
べつに早くなくてもいいならV3
ってことですか
945デフォルトの名無しさん:2008/04/05(土) 12:41:11
同次座標って計算量が少なくなるってのが主旨なの?
946デフォルトの名無しさん:2008/04/05(土) 13:07:15
>3x3 の部分をかけてから並進部分を足せば
まあ固定画面ゲームならそれでもいいんじゃね?
947デフォルトの名無しさん:2008/04/05(土) 13:30:06
x = vector3 dot vector4
948デフォルトの名無しさん:2008/04/05(土) 13:34:07
ごめんミスった・・

x = vectorA.xyz dot vectorB.x.xyz + vectorB.x.w
y = vectorA.xyz dot vectorB.y.xyz + vectorB.y.w
z = vectorA.xyz dot vectorB.z.xyz + vectorB.z.w
w = vectorA.xyz dot vectorB.w.xyz

1命令が1演算がFPU的にはこうするほうが速いんだけど

x = vectorA.xyzw dot vectorB.x.xyzw  ←ベクトルプロセッサだとこの計算が1命令1演算で出来る
y = vectorA.xyzw dot vectorB.y.xyzw
z = vectorA.xyzw dot vectorB.z.xyzw
w = vectorA.xyzw dot vectorB.w.xyzw

ようするにこういう事なんだが
949デフォルトの名無しさん:2008/04/05(土) 13:47:07
つーかMMXとか自動的に使われるようになってんのかね
950デフォルトの名無しさん:2008/04/05(土) 14:39:00
MMX は実は整数演算しかできない。
小数演算を担当しているのは SSE。
ただ、大量に変換するような場合は
グラボ側で計算することも多いかと思う。
951デフォルトの名無しさん:2008/04/05(土) 14:51:51
ねーよ
952デフォルトの名無しさん:2008/04/05(土) 15:27:26
GPUで計算させるデータはCPU側に戻さないデータ。
CPUでやる計算はCPUで再利用するデータ。
953デフォルトの名無しさん:2008/04/05(土) 15:28:52
グラボ側に置いとくデータを大量に変換することはあるんじゃね?
954デフォルトの名無しさん:2008/04/05(土) 16:23:48
スタンバイモードから復帰したときにゲームの動作がやたら重くなる現象で
悩んでいたんだけどこれって Halo でも起きる現象なんですね。

>方法 4 : スタンバイまたはサスペンド モードの後にコンピュータを再起動する
>スタンバイまたはサスペンド モードの後に、パフォーマンスが低下することがあります。
>ゲーム中に手動または自動でコンピュータをスタンバイまたはサスペンド モードにした
>場合、コンピュータを復帰させ、ゲームを再開すると、パフォーマンスが低下することが
>あります。音楽とサウンドが聞こえなくなったり、場面転換が途切れたり、ゲームが応答
>を停止 (ハング) したりする場合があります。この問題を解決するには、ゲームを再起動します。

天下のMS様も認めてる不具合なので仕様ということにしよう…。orz
955デフォルトの名無しさん:2008/04/05(土) 18:58:28
そんなところまで面倒みようとしたらWindowsプログラマーなんてやってられないぜ
956デフォルトの名無しさん:2008/04/06(日) 23:50:04
OSの再起動を要求してなこないだけマシじゃね?

つーか、ゲーム起動したままスタンバイして、
戻ってこれるってのを「すごい」と思ってしまったw
957デフォルトの名無しさん:2008/04/06(日) 23:59:36
根本的な原因はなんなんだろう
958デフォルトの名無しさん:2008/04/07(月) 02:14:47
復帰後にデバイスが発見できないとかそんなんじゃね?
959デフォルトの名無しさん:2008/04/07(月) 07:51:26
俺のゲームは100%オッケ
なぜならスタンバイ復帰とかメッセージ拾ったら
一度ゲームを再起動させてるから
(一瞬ちらつく程度)
960デフォルトの名無しさん:2008/04/07(月) 12:50:56
>>959
テクスチャー読み込みとか早すぎだろJK

D3DPOOL_MANAGEDを使わず、自前で復帰処理かけるなら、そのやり方が一番いいよなー。
961デフォルトの名無しさん:2008/04/07(月) 18:13:54
ウインドウのタイトルバーをドラッグしてウインドウを移動させると
ゲームの音楽は流れたままですが処理や描画も停止しますよね?
そうすると例えば音ゲーの場合は音ズレしちゃってマズいので、
ドラッグしても通常時と同じ様に動作してるようにしたいのですが、
そういうことってできるのでしょうか?
もし可能ならば、ヒントでもいいのでアドバイスお願いします。
962デフォルトの名無しさん:2008/04/07(月) 18:16:55
マルチスレッド
フルスクリーン専用
タイトルバーを出さない
963デフォルトの名無しさん:2008/04/07(月) 18:29:17
>>962
レスサンクスです。

マルチスレッド→要勉強
フルスクリーン専用→ウインドウモードでできねぇって苦情
タイトルバーを出さない→ドラッグできねぇって苦情

ってわけでマルチスレッド勉強してきます。
やり方としては、WM_MOVEメッセージが発行されたとき・・・
ってな感じのイメージだったんですが、マルチスレッドにすると
自動的にそう(>>961)なるのでしょうか?
964デフォルトの名無しさん:2008/04/07(月) 18:36:38
タイトルバー出さなくても、自前でタイトルバーっぽいものを描いて
ドラッグ処理を実装すればおkってことにならないかな・・・
965デフォルトの名無しさん:2008/04/07(月) 18:38:24
>>964
マルチスレッド化するより遥かに面倒くさいと思うが
966デフォルトの名無しさん:2008/04/07(月) 19:39:56
>>963
スレ違いだが、何かの縁なので。

ウインドウをドラッグ中に処理が進まなくなるのは、連続してWM_MOVEが発生しつづけるせいでそのメッセージ処理以外できなくなるから。
マルチスレッドはメッセージ処理とは関係なく、かつ並行で動作する。

メインスレッド(WinMainから始まるスレッド)はメッセージの処理だけやり、ゲームの処理は全てサブスレッド(CreateThreadしたスレッド)側でやるよろし
967デフォルトの名無しさん:2008/04/07(月) 19:59:23
_beginthreadじゃね?
968デフォルトの名無しさん:2008/04/07(月) 21:06:15
>>966
WM_MOVEが発生し続けるというのはちょっと違う。
ウィンドウの移動中やメニューを開いている間は、専用のメッセージループに
処理が移る。

簡易的な解決方法として、SetTimerでWM_TIMERメッセージを発生させて
そこからゲーム処理を呼ぶという方法がある。

そんなことするより、WM_ENTERSIZEMOVEが来たらポーズかけた方が
いいと思うけどね。
969デフォルトの名無しさん:2008/04/07(月) 21:16:30
マルチスレッド化しないと結局ネットワークで通信するゲームで困る
970デフォルトの名無しさん:2008/04/07(月) 22:03:17
>>964-969
遅くなりましたがレスサンクスです。
うーんそうなのか、だとするとDirectXじゃなくて
WindowsAPI関連の問題になってくるってことなのか。

DirectXで一杯一杯なのでマルチスレッドとなると難しそうですが
ドラッグされたときは音楽等と止める(ポーズ状態)ってのも
一つの手ですね・・・そちらまで頭が回らなかったw

とりあえず何とかアドバイス頂いた方法を参考にしつつ
ドラッグしても音ズレしないように一度試してみます。
971デフォルトの名無しさん:2008/04/07(月) 22:04:52
最近のこのスレ見てて感じたんだけど
やっぱマルチスレッドって必須の技術になりつつあるのな
昔挑戦したけどデッドロックが恐ろしくて放り投げたわww
972デフォルトの名無しさん:2008/04/07(月) 22:20:18
相当に昔から必須の技術のはずでしたが
973デフォルトの名無しさん:2008/04/07(月) 22:27:44
Windows2000の頃には必須技術だろ・・・
974デフォルトの名無しさん:2008/04/07(月) 23:15:34
俺、通信部分だけクラス呼び出すだけでスレッド作って勝手によろしくやってくれる
外人のよくわからんライブラリ使ってるからマルチスレッド意識したことねーや

この辺の部品って意外に探すとそろってるぞ
975デフォルトの名無しさん:2008/04/07(月) 23:31:09
つーか、>>961の内容をクリアしたいんなら
タイマーで音楽のタイミングをカウントすりゃいいじゃん
そのカウントにあわせてアニメーション等の状態を管理すればいい
それで解決じゃね?
マルチスレッドとか別にどうでもいいと思う
976デフォルトの名無しさん:2008/04/07(月) 23:43:37
いや、素直にマルチスレッドでやるのが楽だってw

マルチスレッドは同期をとるのが難しいだけで
メッセージスレッドとゲームスレッドは互いに(ほとんど)干渉しないんだから簡単だぞ。

ただ、DirectXはDirectXを初期化したスレッドでのみ使うのが基本。という制約を忘れないようにな。
メッセージスレッドで初期化して、ゲームスレッドで利用とかはダメだぜ。

上の方でほとんどと書いたが、実際
「WM_CLOSEがきたらゲームスレッド終了フラグをたてる」
「終了フラグを見て、ゲームスレッドは自身を終了させる」
って時しか干渉しないでしょ。
977デフォルトの名無しさん:2008/04/07(月) 23:56:57
マルチスレッドボッコボッコだなw
978デフォルトの名無しさん:2008/04/08(火) 00:18:55
> ただ、DirectXはDirectXを初期化したスレッドでのみ使うのが基本。という制約を忘れないようにな。
> メッセージスレッドで初期化して、ゲームスレッドで利用とかはダメだぜ。

ここが分からんのだが、どうやれと?
979デフォルトの名無しさん:2008/04/08(火) 00:38:56
教えてくんですみません.
いま,DirectXでフルスクリーンモードの高精細な画像を呈示して,観察者の反応をみる,
という実験を計画中です.
しかし実は私はいわゆるGUIベースのアプリ,「窓が開いてマウスでクリック,を書いた経験がなく,
できれば,void main(void) で始まるC言語の範囲で,プログラムを書きたいのです.
Direct X(具体的には DirectDrawを使って,さまざまな画像を作って見せて,
人間のいろいろな反応を記録する,という研究です・

に使う予定です.
コマンドライ
980デフォルトの名無しさん:2008/04/08(火) 00:40:22
どっちみち描画や操作のタイミングはタイマーでカウントしないと破綻すると思うんだが…
マルチスレッドがどうとかいうのはあんまり関係ないだろ
981デフォルトの名無しさん:2008/04/08(火) 00:42:44
>>979
C言語の範囲ではDirectXは利用できません。
C++を学ぶ気がないのでしたらお帰り下さい
982デフォルトの名無しさん:2008/04/08(火) 00:47:16
マルチスレッドとか連呼しすぎるとIT革命みたいでかっこ悪いぞ
983デフォルトの名無しさん:2008/04/08(火) 00:56:11
デバイス作成時にMULTITHREADフラグを指定すれば他のスレッドからでも普通に呼べるって話。
ドキュメントはプリントアウトして抱いて眠れ
984デフォルトの名無しさん:2008/04/08(火) 01:02:54
ID3DXFont::DrawTextに渡すpSpriteは何に使うですか?
985デフォルトの名無しさん:2008/04/08(火) 01:06:43
描画に使う
986デフォルトの名無しさん:2008/04/08(火) 01:13:50
>>979
サンプルのシンプルサンプルかエンプティサンプルをベースに作るのはダメなん?
987デフォルトの名無しさん:2008/04/08(火) 02:02:18
座標計算がうまくいかないんだが、どこがまずいかな

// 変数宣言
D3DXMATRIX matTrans, matRoty, matWorld;

// XとYに0を入れて、zに速度を入れる。
D3DXMatrixTranslation(&matTrans, 0.0f,0.0f,g_myChar.speed);

// Y軸を中心に回転
D3DXMatrixRotationY(&matRoty, g_myChar.ry );

// 移動と回転を合成?
matWorld = matTrans * matRoty;

これで移動量を計算してみたんだけど、Y軸の回転が0の場合ちゃんと進行方向に進むのに、
90度(進行方向右)になると、なぜか右斜め前に進んでしまうんだ。
180度(進行方向後)になるとZ軸の移動量が0に。

パッと見でなんか間違ってるとこあるかな?
988デフォルトの名無しさん:2008/04/08(火) 02:06:49
>>979
それは本当にDirectDrawが必要なのか?
ただ画像を表示するだけにDirectDrawなんて必要ないよ。

DirectDrawが必要なのはVSYNCと同期した画面の更新、
カラーキーを使った画像の描画で、それが必要ないなら
DirectDrawを使うメリットは無いし、デメリットの方が多い。

GDIの方が機能が豊富で便利だよ。
989987:2008/04/08(火) 02:07:28
>>987は進行方向への移動量を求めてるの。

matWorldを現在の座標に加算すれば、
めでたく進行方向にカーソルキーで移動できるはずだったんだけど。。。。る
990デフォルトの名無しさん:2008/04/08(火) 02:37:36
Z方向に移動してY軸回転しているだけのように見えるけど
991デフォルトの名無しさん:2008/04/08(火) 08:43:42
>>985
NULLでも描けるけど
992デフォルトの名無しさん:2008/04/08(火) 09:44:40
>>991
NULLだと中でID3DXSprite作ってそれ使う。
キャッシュや描画タイミングの制御の問題なので
分からなければ気にしなくてもいいだろう。

分かるようになったら改めて見ればいい。
993デフォルトの名無しさん:2008/04/08(火) 19:48:18
>>988
ハードウェア拡大縮小描画はかなりのメリットだよ。
GDIは補間方法が論外だし、GDI+は速度的に勝ち目殆どなし。
VGAに依っては、UYVYとかYUY2も変換無しで突っ込める。

ただ、>>979はフルスクリーン=DirectXと考えている節があるな。
それ以前に壊れている気もするけど。
994987:2008/04/08(火) 20:39:25
>>990
Z方向に移動してY軸回転したら、X軸Z軸への移動量が求められるかなーと思ったんですよ
995デフォルトの名無しさん:2008/04/08(火) 21:28:14
ていうかそれだけなら自分で計算すればよくね?
それとも本当は他の軸も回転させてんのか?
996987:2008/04/08(火) 21:45:39
他の軸も回転させる予定だけど

自分で計算する方法なんて忘れたっすよ!

ついでに聞きたい、
Y軸とZ軸、もしくはY軸とX軸の2軸回転で全方位のベクトル?になるよね?
997987:2008/04/08(火) 23:10:33
http://up.mugitya.com/
http://up.mugitya.com/img/Lv.1_up56403.png
↑こーゆーのを想像してるんだけど

http://up.mugitya.com/img/Lv.1_up56405.png
↑結果はなぜかこーなる

なんで?なんで?
>>987のどこが間違ってるんだろう?
998デフォルトの名無しさん:2008/04/08(火) 23:19:15
ちょっと待て移動行列と回転行列を合成しても得られるのはある点を移動させて回転させる行列じゃないか?
matTransをVECTOR3にしろ
999987:2008/04/09(水) 00:20:45
もにょ?

移動させて回転させた行列の中には
「ある方向へある距離移動した座標」
が入ってると思ったんだけど。。。。

まちがっとる?
1000デフォルトの名無しさん:2008/04/09(水) 00:49:31
ちょっと行列やり直して来いww

そして1000Get!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。