【C++】 DirectX初心者質問スレ Part16 【C】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/02/10(日) 18:05:47これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part15 【C】
http://pc11.2ch.net/test/read.cgi/tech/1196150200/
0002デフォルトの名無しさん
2008/02/10(日) 18:06:25MSDN 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
0003デフォルトの名無しさん
2008/02/10(日) 18:08:01乙
0004デフォルトの名無しさん
2008/02/10(日) 18:10:26過去になんか揉め事があったんだっけ?
まぁいいや。
0005デフォルトの名無しさん
2008/02/10(日) 18:22:36ttp://fatalita.sakura.ne.jp/3DLib/
0006デフォルトの名無しさん
2008/02/10(日) 18:24:530007デフォルトの名無しさん
2008/02/10(日) 18:52:05http://www.t-pot.com/program/history.html
0008デフォルトの名無しさん
2008/02/10(日) 21:17:36そもそもお前よく考えろよ
そんなんで時間って短縮できるの?マジで?
だってさぁ、プレイヤーの入力を受け付けるから次の画面が決定する場合のが多いじゃん?
↑↓→←な
で、時間短縮ってさぁ、プレイヤーの入力は一定タイミングでくるし
入力を受け付けるまで次の画面って描画する意味ないじゃん
ていうか内部の処理が決定しなくね?
キューイングなんてどれだけ意味があるのかさっぱりわからないんだけど?
画面更新が仮に1sごとにくるなら1s以内で処理を終えても
次のフレームの処理なんてやってもたかが知れてると思うんだけど?
ていうか安定しなくね?そんな設計にしちゃそもそも駄目じゃね?
1フレ内での時間短縮は意味があるかもしれないけど
フレーム間同士の時間短縮ってなんかやる意味あんの?
0009デフォルトの名無しさん
2008/02/10(日) 21:23:350010デフォルトの名無しさん
2008/02/10(日) 21:26:260011デフォルトの名無しさん
2008/02/10(日) 21:27:060012デフォルトの名無しさん
2008/02/10(日) 21:45:540013デフォルトの名無しさん
2008/02/10(日) 22:44:580014デフォルトの名無しさん
2008/02/10(日) 22:50:59というかXInputがダメすぐる
0015デフォルトの名無しさん
2008/02/10(日) 23:08:310016デフォルトの名無しさん
2008/02/11(月) 01:01:28毎回根本設計から作り直さないとゴミばかり抱え込むことになる。
世間でプロジェクトがデスマーチ進行に陥るとき、
それを推進する最も有力な力が互換性至上主義である。
0017デフォルトの名無しさん
2008/02/11(月) 01:15:510018デフォルトの名無しさん
2008/02/11(月) 01:18:21互換性を捨てるならくえりーいんたーふぇーすの存在意義がないです
0019デフォルトの名無しさん
2008/02/11(月) 01:33:01そんな物には手を出さない方がいいです
1ヶ月ぐらい無駄にして結局DirectSoundに落ち着いた俺が言うんだから間違いない
0020デフォルトの名無しさん
2008/02/11(月) 01:51:59ライブラリ ファイルの検索先パスって
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では動かなかったりしますか?
0021デフォルトの名無しさん
2008/02/11(月) 02:32:560022デフォルトの名無しさん
2008/02/11(月) 02:38:12それで合ってるだろ。
0023デフォルトの名無しさん
2008/02/11(月) 02:49:00ありがとうございます。そういうことなのね
x86の方をリンクするようにします
0024デフォルトの名無しさん
2008/02/11(月) 11:20:49のソースついてないの?
0025デフォルトの名無しさん
2008/02/11(月) 13:26:30E_OUTOFMEMORYが出て、高頻度でテクスチャーの作成に失敗します。
しかし、成功するときも結構あったり、
直前にウェイトを入れると失敗しなかったりと、
原因がよく分かりません。
原因に予測がつけば、教えてもらえませんでしょうか。
0026デフォルトの名無しさん
2008/02/11(月) 14:37:19出し惜しみするほどのもんでもあるまいし。
普通にやってれば動くものなんだから、ただ動きませんとか言われても
エスパーじゃない限り回答不能だよ。
002725
2008/02/11(月) 14:58:28D3DXCreateTextureFromFileExの呼び出しはこんな感じです。
D3DXCreateTextureFromFileEx(_pDevice, path, _width, _height,
0, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT,
D3DX_FILTER_NONE, D3DX_DEFAULT,
0xff00ff00, NULL, NULL, &_pTexture);
002825
2008/02/11(月) 15:15:12CreateDeviceのBehaviorFlagsに、
D3DCREATE_MULTITHREADEDを入れたら失敗しなくなりました。
しかし原因は分からず、ホントにこれでいいのかも不明です。
0029デフォルトの名無しさん
2008/02/11(月) 18:04:31全部見られるのが嫌なら、問題が発生する最小の状態にすればいい。
0030デフォルトの名無しさん
2008/02/11(月) 21:50:19アリアリアリーガトーサン!!(礼を申し上げる!)
>>19
何でですか?MIDIはダメですか・・・?
0031デフォルトの名無しさん
2008/02/11(月) 22:55:58MIDIを扱うならDirectMusicでいいと思う
waveを扱うなら俺もDirectSoundの方がいいと思う
0032デフォルトの名無しさん
2008/02/11(月) 23:11:27メタセコイアでモデリング⇒RokDeBone2でモーション作成⇒DirectXを使ったソフトでモーションを操作しようとしています。
現在、モデリングは完了し、とりあえずボーンだけ入れてモーションつける手前なのですが、
この後、上記の事をさせたい場合はどのようにすればいいのでしょうか?
モーション付きxファイルのモーションを操作する方法が分かっていない為、
こちらに書き込んだのですがスレ違いでしたらよければ誘導お願いします。
0033デフォルトの名無しさん
2008/02/11(月) 23:20:26WAVを複数音鳴らそうとすると鳴らなかったり音が割れたり酷い事になってたな。
色々サイトまわって、何度見直してもサウンドの確保や解放手順は
同様の事をやっているはずだったのに、どうにも上手く行かない。
まあ本当は俺のプログラムの組み方が何か悪かったのかもしれないけど、
参考になるサイトもまともな質問の回答もなく、どうしようもなくなって
DirectSoundに移行したら同じことが苦もなく簡単にできた。
本当に時間の無駄だった。
いや、簡単に思えるものには落とし穴があるという勉強にはなったな。
0034デフォルトの名無しさん
2008/02/11(月) 23:54:41BGM用途ならoggに固めてDirectSoundで再生させちゃうし、
midi編集用途ならmidi***系APIの方を使っちゃうし。
0035デフォルトの名無しさん
2008/02/12(火) 00:04:42とあるサンプルを開こうとすると、d3d8.hが見つからずエラーが出てしまいます。
あれ?と思い、インストールしてあるフォルダを直で検索してみましたが見つからず。
directc9.0になってからこのファイルは削除してしまったのでしょうか?
0036デフォルトの名無しさん
2008/02/12(火) 00:08:18マジかwだっせーw
0037デフォルトの名無しさん
2008/02/12(火) 01:29:37別のSDKいれな。
0038デフォルトの名無しさん
2008/02/12(火) 01:33:32とりあえずd3d8 = d3d9、d3dx8 = d3dx9 と読み込むファイル切り替えて、
ソースコード側でも8から9へ書き換えるという無理やりな方法でなんとかなりました。
0039デフォルトの名無しさん
2008/02/12(火) 01:41:37最近のはついてないっぽいな
0040デフォルトの名無しさん
2008/02/12(火) 11:03:15すいません。oggに固めるってのはどのソフト使ってるのか教えてもらえませんか?
あとmidi***系のAPIってのはどちら様でしょう・・・?
0041デフォルトの名無しさん
2008/02/12(火) 11:09:06http://msdn.microsoft.com/library/ja/jpmltimd/html/_win32_midioutopen.asp
http://msdn.microsoft.com/library/ja/jpmltimd/html/_win32_midioutshortmsg.asp
0042デフォルトの名無しさん
2008/02/12(火) 14:02:42修羅の道だがなー
0043デフォルトの名無しさん
2008/02/12(火) 14:15:40LPDIRECT3DDEVICE9は、
グローバルで持っていいものなのでしょうか?
それとも、描画する関数に引数として持たせるべきでしょうか?
void 描画管理(pDevice)
{
...
描画(pDevice)
...
}
0044デフォルトの名無しさん
2008/02/12(火) 16:06:420045デフォルトの名無しさん
2008/02/12(火) 16:42:270046デフォルトの名無しさん
2008/02/12(火) 17:11:43ありがとうございます。Win32の方でしたか。ちょっと使うぐらいなら断然こっちでしょうね・・・。
>>42
ソフト音源って、まさか自前のWAVEをMIDIデータにあわせて鳴らしてるんですか?
踏み込みたくねーー!すごいよ
004742
2008/02/12(火) 18:52:34DirectSoundで効果音を鳴らすくらいは誰でもやるっしょ?
そしたら次に、任意の音程を付けられるようにする
それを任意のタイミングで鳴らしたり止められるように管理する
あとは音の仕上がりをどこまでこだわるか次第
こだわらなければ意外と簡単なのよね
でもoggとかで鳴らしちゃったほうが圧倒的に楽w
0048デフォルトの名無しさん
2008/02/12(火) 21:09:30DirectSoundになりそうです。家のPCでmidi再生すると分解能が低いのか
テンポが躓くような感じだったので、これも解決しそうです。
0049デフォルトの名無しさん
2008/02/13(水) 22:18:350050デフォルトの名無しさん
2008/02/13(水) 22:52:17「炎」や「ビームのような光」、「爆発」など
特殊な効果のオブジェクトを表示させるにはどうしたら良いのでしょうか?
もしかしたら基礎知識なのかもしれませんが、初心者なもので・・。
よろしくお願いします。
0051デフォルトの名無しさん
2008/02/13(水) 23:21:260052デフォルトの名無しさん
2008/02/13(水) 23:26:12俺は別に持ってるよ
なんでかというと、D3DXに依存すると
Win32にも依存することになって、
いらないモノも一緒に入り込むのがイヤだからだ。
BOOLとかDWORDとか名前空間なしのブツとか。
0053デフォルトの名無しさん
2008/02/13(水) 23:28:290054デフォルトの名無しさん
2008/02/13(水) 23:45:480055デフォルトの名無しさん
2008/02/13(水) 23:55:040056デフォルトの名無しさん
2008/02/13(水) 23:59:24ただ、それが微妙な精度の差を生んで、CPUが違うとSTGのリプレイなんかがズレたりするとか
自分で確認はしてないが…
リプレイ等がいらないなら、D3DXの関数使っといた方が高速化を期待できるんじゃない?
0057デフォルトの名無しさん
2008/02/14(木) 01:46:150058デフォルトの名無しさん
2008/02/14(木) 05:45:32> D3DXの行列が速いとか、どこの都市伝説だよ(w
0059デフォルトの名無しさん
2008/02/14(木) 07:15:230060デフォルトの名無しさん
2008/02/14(木) 14:09:401枚7680x2048の画像を同解像度の専用ディスプレイにスプライト表示させたいのですが、
テスト環境は普通のSVGAディスプレイなため、エラーが出てしまいます。
0061デフォルトの名無しさん
2008/02/14(木) 14:12:030062デフォルトの名無しさん
2008/02/14(木) 14:18:37何か自前で読んでコピーすれば回避できるとか聞いたんです。
0063デフォルトの名無しさん
2008/02/14(木) 14:20:330064デフォルトの名無しさん
2008/02/14(木) 14:20:570065デフォルトの名無しさん
2008/02/14(木) 14:36:42その方法でやってみます。
>>64
デジカメで撮った写真を等倍で表示するビューア作ってるんですが、
最近の10Mピクセル超えの場合、ぱらぱらやった時に表示が遅すぎて
DirectXを使ってみようと思った次第です。
が、何分素人なもので右も左もわからない状態で、エラーでまくり
色々制限があるという事が判明し困っていた次第です。
0066デフォルトの名無しさん
2008/02/14(木) 15:03:28まあ1024×1024ぐらいならどの環境でも使えると思うから
それで小分けタイルでいいんじゃねーの?
0067デフォルトの名無しさん
2008/02/14(木) 15:03:47DirectXを使ったからって魔法のように速くなったりはしないよ。
その程度で遅いってのは単純に組み方が悪いだけ。
「ぱらぱら」の意味が分からんが、スライドショー的なことを言っているなら
DirectXを使う意味が全くない。
0068デフォルトの名無しさん
2008/02/14(木) 15:06:410069デフォルトの名無しさん
2008/02/14(木) 15:12:27いや、あるだろ。
グラボ積んでるなら、システムメモリーからVRAMよりも、VRAM間の方が断然早いわけで、
先にVRAMへ画像を読み込んでおけば、大きな画像ほどVRAM間の方が早く表示されるはず。
例えば、hamanaなんかはDirectX使って表示するビューアだったはず。
0070デフォルトの名無しさん
2008/02/14(木) 15:14:220071デフォルトの名無しさん
2008/02/14(木) 15:23:16表示されない場合、まずどの辺から疑ってかかるべきですか?
SUCCEEDED( D3DXCreateTextureFromFileEx(...) )が通ってる
(=画像を読んではいる)ところまでは確認できてます。
0072デフォルトの名無しさん
2008/02/14(木) 15:37:53とりあえず固定機能パイプラインなのか
頂点・ピクセルシェーダーなのかくらい書こう
それすら関係ないところだと
頂点情報の中にテクスチャ座標がきちんと格納されてるかとか
0073デフォルトの名無しさん
2008/02/14(木) 15:57:53と言うからにはもちろん使えるんでしょうな?(・∀・)ニヤニヤ
0074デフォルトの名無しさん
2008/02/14(木) 16:01:42固定機能かシェーダーなのかわかりませんがDirectX 9についてるサンプルプログラムです
全部テクスチャが表示されないんです
画像を読んでるところも問題ないですしセットしてるところも通ってました
一応パソはこれです Pentium3-1G 512MバイトRAM 8GバイトHD Milenium-2M SB Windows XP SP2
0075デフォルトの名無しさん
2008/02/14(木) 16:06:34一応、D3DXの場合、ランタイムでSSEとかが利用可能かチェックして、使えれば使ってるみたいだし、かなりの最適化はされているはず。
自分で普通にC++で書いたコードよりは速いんじゃない。
007671
2008/02/14(木) 16:14:15>>72
固定機能かシェーダーなのかはわからないですが
下記URLサンプルのCMapModelクラスを移植しておかしくなりました。
ttp://www.cmagazine.jp/books/3drpg/
元のサンプルは正常に表示されるのでどこかで移植ミスやったか、あるいは本家SDKの
チュートリアル頼りに組んだDirect3Dの初期化処理周りがおかしいかとか考えていたのですが
(最初はメッシュも表示されなかったがClearでZバッファ消してなかった)
007771
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に戻るループになっている。
・メッシュの壁と床に別々のテクスチャを張り付けているが、テクスチャファイルを
入れ替えたところ、表示されているメッシュの色が入れ替わった。
(片方が微妙に黄ばんでいる。ちなみにテクスチャは両方ともモノクロ)
つまり
・テクスチャを読めてはいる。かつ反映・表示もされている。
・反映のされ方がおかしいか、初期化の仕方がおかしいかで
ちゃんとテクスチャの模様が表示されるところがツルッツルになっている
・しかしどこがおかしいのかまでは突き止められていない。
0078デフォルトの名無しさん
2008/02/14(木) 17:00:510079デフォルトの名無しさん
2008/02/14(木) 17:49:25明示的にVRAMに確保できるわけじゃないし、Vistaだとシステムメモリに
確保されてしまうけどね。
等倍表示程度では、DirectXを使う意味は全く無い。
スライドショーなら、ユーザの入力を待たずに次の画像を読み込んでおくとかの
工夫の方が遥かに大事。
>>77
テクスチャ座標が設定されてないだけかと。
008071
2008/02/14(木) 18:20:01構造体D3DVERTEXの定義がおかしかったのが原因でした。
0081デフォルトの名無しさん
2008/02/14(木) 18:27:410082デフォルトの名無しさん
2008/02/14(木) 23:04:320083デフォルトの名無しさん
2008/02/14(木) 23:36:330084デフォルトの名無しさん
2008/02/15(金) 02:21:38サンプルコードなのですが
//聞き手の位置の設定
//(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': 識別子が見つかりませんでした
というエラーがでてしまって 先に進めない状況です
どうしたら解決するでしょうか?
0085デフォルトの名無しさん
2008/02/15(金) 19:44:56D3DVALUEなら知っている。
ただの float。
typedef float D3DVALUE;
0086デフォルトの名無しさん
2008/02/15(金) 19:49:030087デフォルトの名無しさん
2008/02/15(金) 19:55:45逆に科学計算だと float が役に立たないが。
0088デフォルトの名無しさん
2008/02/15(金) 20:02:09特に物理演算。float 市ねといいたい。
0089デフォルトの名無しさん
2008/02/15(金) 20:22:570090デフォルトの名無しさん
2008/02/15(金) 20:28:040091デフォルトの名無しさん
2008/02/15(金) 22:03:49具体的にどんな演算をしていて精度が足りなくなったの?
0092デフォルトの名無しさん
2008/02/15(金) 22:16:540093デフォルトの名無しさん
2008/02/15(金) 22:28:18確認してみたのですが
D3DVAL で間違いないです
0094デフォルトの名無しさん
2008/02/15(金) 22:50:43何を確認してみたのよ
0095デフォルトの名無しさん
2008/02/15(金) 22:55:50たぶん参考にしてるものがめちゃくちゃ古いバージョンなんだよ
0096デフォルトの名無しさん
2008/02/15(金) 23:25:01参照してるコードですが
>>95
たしかに 参照してるページ自体
古いものでした
別のサンプルを探してきます
ありがとうございました
0097デフォルトの名無しさん
2008/02/15(金) 23:43:33それはちょっと違うだろ。
自分のソフトが誤差に対応出来てないだけだろ。
double並みのダイナミックレンジが欲しいってなら別だが、
本当に必要なのかあやしいもんだ。
って、俺もこれを克服出来なくて挫折した部類な訳だが。
0098デフォルトの名無しさん
2008/02/16(土) 00:46:32#define D3DVAL(val) ((float)val)
0099デフォルトの名無しさん
2008/02/16(土) 01:12:360100デフォルトの名無しさん
2008/02/16(土) 01:36:598以降はない>D3DVALマクロ
0101デフォルトの名無しさん
2008/02/16(土) 02:19:38インテリセンス機能が働かなくなる嫌がらせにしか見えない
0102デフォルトの名無しさん
2008/02/16(土) 03:12:38変わる仕様です。どうするのが一番簡単でしょうか?
0103デフォルトの名無しさん
2008/02/16(土) 08:49:010104デフォルトの名無しさん
2008/02/16(土) 09:13:28>単一色ならテクスチャである必用はありません。
いえディフューズとテクスチャでは色が異なりますから、
正確な色を必要とするときはテクスチャである必要がありますよ。
たとえばマテリアルは256階調でしかやれませんが、
テクスチャなら1024階調まで表現できます。
0105デフォルトの名無しさん
2008/02/16(土) 09:32:36シェーダなら書き方がおかしいだけです。
自分の頭が悪い理由を他に求めるのはやめましょう。
0106デフォルトの名無しさん
2008/02/16(土) 10:25:40たとえばD3DRGBマクロは256階調になっていますよ。
これ以上の何を理解しろというんでしょうか。
0107デフォルトの名無しさん
2008/02/16(土) 10:46:060108デフォルトの名無しさん
2008/02/16(土) 11:44:58シェーダ定数やテクスチャブレンディングファクタで代用出来るだろう。
(>>104のようにレンジを考えなければ)
だけど>>103の指摘は余計なお世話なんじゃないの?
0109デフォルトの名無しさん
2008/02/16(土) 11:52:04ところで、単一色を「正確に」モニタに表示するのにレンジを気にする意味がわかりません。
0110102
2008/02/16(土) 13:16:27発想が良くなかったみたいなので元の問題の方を教えてください。
ある色で塗りつぶされた背景に文字列を表示しようと思っています。
背景は動きます。文字列も変化します。
文字の色は黒にする予定ですが、変わるかもしれません。
これを10〜50程度表示します。
どの様にするのが良いでしょうか?
マテリアルは今からぐぐってきます。
0111デフォルトの名無しさん
2008/02/16(土) 13:37:33背景が動くとか言ってることに不安を感じる
正しく直せ
0112デフォルトの名無しさん
2008/02/16(土) 14:11:52以下のサイトで
http://www.geekpage.jp/programming/directshow/renderfile.php
ローカルの動画ファイルを再生するにはIMediaControl->RenderFileを使用する事が分かったのですが、
自分でメモリ上に展開した動画データを直接再生する方法が分かりません
何か方法はあるでしょうか?
宜しくお願いしますm(__)m
0113デフォルトの名無しさん
2008/02/16(土) 17:17:110114デフォルトの名無しさん
2008/02/16(土) 21:15:54誘導ありがとうございます
そちらの方へ行ってみます
0115デフォルトの名無しさん
2008/02/17(日) 21:16:31LPD3DXMESHに入った巨大なメッシュを絵画する時に
「カメラからどの辺の距離まで絵画するのか」を制御するにはどうすればよいですか?
0116デフォルトの名無しさん
2008/02/17(日) 22:17:380117デフォルトの名無しさん
2008/02/17(日) 23:19:320118デフォルトの名無しさん
2008/02/17(日) 23:26:480119デフォルトの名無しさん
2008/02/17(日) 23:32:590120デフォルトの名無しさん
2008/02/17(日) 23:39:14D3DXMatrixPerspectiveFovLH( D3DXMATRIX* pOut, FLOAT fovy , FLOAT Aspect , FLOAT manga , FLOAT hekiga );
0121デフォルトの名無しさん
2008/02/18(月) 01:12:05メッシュの各頂点のうち、カメラに最も近い点までの距離を
カメラの近平面の距離とすればいいんじゃね?
もしくはバウンディングボリュームでもいい。
0122デフォルトの名無しさん
2008/02/18(月) 01:56:450123デフォルトの名無しさん
2008/02/18(月) 02:10:44「絵画しちゃっている」という言葉を使い続けている時点で日本語ができているのかどうかが心配。
0124デフォルトの名無しさん
2008/02/18(月) 04:04:11うんうん、分かるよ
俺も幼稚園の頃そうだった
0125デフォルトの名無しさん
2008/02/18(月) 07:05:22左右に揺らす。っていうところまで来たんですけど、パラメーターの設定多いわややこしいわ
で泣きそうなんですが、ここさえ乗り切ったら後は楽ですか?
0126デフォルトの名無しさん
2008/02/18(月) 08:35:58その本は知らんが、正直DirectXの関数は全部そんな感じ
0127デフォルトの名無しさん
2008/02/18(月) 08:37:17「絵画しちゃっている」という皮肉に本気で突っ込んでいる時点で本当に日本人か心配。
0128デフォルトの名無しさん
2008/02/18(月) 09:43:04その本おれも買ったけど分かりにくくて結局ネットで解説してくれてるサイト見て勉強した
ある程度分かってから見てみたらあぁこうやって書くといいのか、とか分かって
かなりいい本だけど正直一からDirectX勉強する用には向いてないと思う
内容は初歩的なことだけど解説とか少なくてDirectXまったく知らないと分かりにくい
とりあえずDirectXはWinAPIみたいに最初はつらいけどある程度分かってくると
楽になるからGoogle駆使してがんばれ
0129デフォルトの名無しさん
2008/02/18(月) 17:10:42・引数の指定の複雑さに嫌気がさしてラップクラスを作る
・欲がでてきて、「OpenGLも使える様にすれば汎用的になるんじゃね?」と妄想する
・VectorクラスとMatrixクラスを作って力尽きる
ここまで来て初心者です
0130デフォルトの名無しさん
2008/02/18(月) 17:58:46それどこの俺?
0131デフォルトの名無しさん
2008/02/18(月) 19:53:420132デフォルトの名無しさん
2008/02/18(月) 19:58:200133デフォルトの名無しさん
2008/02/18(月) 19:58:330134デフォルトの名無しさん
2008/02/18(月) 20:17:070135デフォルトの名無しさん
2008/02/18(月) 20:53:290136デフォルトの名無しさん
2008/02/18(月) 21:05:510137デフォルトの名無しさん
2008/02/19(火) 00:17:340138デフォルトの名無しさん
2008/02/19(火) 01:13:200139デフォルトの名無しさん
2008/02/19(火) 08:16:06実際にはそうそう巧くいかないもんだが
0140デフォルトの名無しさん
2008/02/19(火) 12:57:47TCHAR a[10];
…略…
fprintf(sfp,"%10c",a);
…略…
ファイルを見ると文字化けしています。
0141デフォルトの名無しさん
2008/02/19(火) 13:02:310142デフォルトの名無しさん
2008/02/19(火) 13:04:020143デフォルトの名無しさん
2008/02/19(火) 14:46:44例えばびっくり箱のような、
両方が含まれているXファイルを表示すると、
アニメーションメッシュのオブジェクト(箱)が変な位置に表示され、
かつアニメーションがされません。
スキンメッシュの方(じゃばらみたいなもの)は正常に表示されます。
1ファイルのアニメーションメッシュ、スキンメッシュ両方を表示する方法を教えてください。
0144デフォルトの名無しさん
2008/02/19(火) 15:11:450145デフォルトの名無しさん
2008/02/19(火) 15:17:15DXViewerでは正しく表示できているので、
データには問題ないと思ってます。
0146デフォルトの名無しさん
2008/02/19(火) 15:46:10解決。
0147デフォルトの名無しさん
2008/02/19(火) 17:26:43座標計算を見直せ
0148143
2008/02/20(水) 00:11:19頂点ブレンディングをオンしたまま
アニメーションメッシュの描画をしてました。
0149デフォルトの名無しさん
2008/02/20(水) 05:57:14メニューから画像を読み込もうとすると終了してしまうのです。directxとそれ以外は混在できないのでしょうか?
0150デフォルトの名無しさん
2008/02/20(水) 06:58:110151デフォルトの名無しさん
2008/02/20(水) 08:01:120152デフォルトの名無しさん
2008/02/20(水) 14:25:42要点が伝わってない、とりあえず画像を読み込もうとしている関数を教えれ。
それと、一部分にDirectXを使うだけならView Matrixでウィンドウ上の一部を設定するだけでいい。
0153デフォルトの名無しさん
2008/02/20(水) 15:02:22一体どこを探したら見つからないんだってくらいに
Sample Browserにそのまんまのモノが。
0154デフォルトの名無しさん
2008/02/21(木) 21:42:14まぢですか!?ごめんなさい、そしてありがとうございます。
0155デフォルトの名無しさん
2008/02/22(金) 01:25:26パッド数が一個はできたんだけど、二個の場合がイマイチわからん。
LPDIRECTINPUTDEVICE8で作ったデバイスを配列で2個にして、
forで回すだけじゃダメですか?
0156デフォルトの名無しさん
2008/02/22(金) 05:26:52EnumDevicesでちゃんと列挙できてるか?
0157155
2008/02/22(金) 18:11:37ちゃんと動かないってことはできていないんだろうけど、
基本的に↑で書いたことしか思いつかない。
DIJOYSTATEの変数も配列にしてGetDeviceState()で割り当ててもみたけどうまくいかず・・・
インプット関係のファイルうpしたのでよければ見てくだしあ。
ttp://kossie.net/up/src/kos2386.zip.html
パスは2ch
0158デフォルトの名無しさん
2008/02/22(金) 18:55:410159デフォルトの名無しさん
2008/02/22(金) 19:24:52スクリーン座標として得るにはどうしたらいいですか?
キャラクタ座標(3,10,4) → スクリーン座標(370,300)
のようにスクリーン上での座標を得たいんですが・・。
0160デフォルトの名無しさん
2008/02/22(金) 21:43:250161デフォルトの名無しさん
2008/02/23(土) 04:16:57DirectX初期化のデバイスインターフェイスを取得するところで
失敗してしまうのでよければソースコードを見ていただけますか?
(グラフィックボードはGeForce7300GTで作成しています)
DxGraph9.cppのInit()という関数で、とりあえずウインドウモードのみ作成してます。
ttp://www.hsjp.net/upload/src/up12285.zip
0162デフォルトの名無しさん
2008/02/23(土) 04:30:00ttp://toku.xdisc.net/cgi/up/vcc/nm1522.zip
0163デフォルトの名無しさん
2008/02/23(土) 08:09:53構造体の初期化からやりなおせ。
0164デフォルトの名無しさん
2008/02/23(土) 11:20:55助言いただいたとおりDirectXGrahics関連クラスのコンストラクタCDXGRAPH()で
ZeroMemory( this, sizeof(*this) );
を追加すると正常に初期化できました・・・何というミス・・・
0165デフォルトの名無しさん
2008/02/23(土) 11:26:30ソースを見てないから何ともいえないけど、thisが指す先をゼロクリアはやめとけ。
仮想関数のテーブルを持ってたら…
0166デフォルトの名無しさん
2008/02/23(土) 11:33:260167デフォルトの名無しさん
2008/02/23(土) 11:57:06じゃあ仮想関数はまだ無いですが今後を考えるとZeroMemoryはやめたほうがいいですね…
ちょっと方法が思い浮かばないのでグーグル先生に聞いてきます
0168デフォルトの名無しさん
2008/02/23(土) 12:15:55D3DPRESENT_PARAMETERS m_D3DPP;
上のソースはこの構造体の未初期化が原因ですが、これがクラス内で定義されていた場合、
コンストラクタでどう初期化すればいいものか…ZeroMemory…駄目ですよね…w
スレ違いで申し訳ないので、最後にヒントだけでもいただけないでしょうか?
0169デフォルトの名無しさん
2008/02/23(土) 12:18:50C++では普通はそうする。
でも配列のような分かりやすいPODはZeroMemoryで一気に
ゼロクリアしてもいいと思う。
0170デフォルトの名無しさん
2008/02/23(土) 12:33:24考えても仕方ないので色々と試行錯誤してみます
勉強になりました、ありがとうございます
0171デフォルトの名無しさん
2008/02/23(土) 13:05:11全然理解していないと思われる
0172デフォルトの名無しさん
2008/02/23(土) 13:06:020173デフォルトの名無しさん
2008/02/23(土) 13:10:040174デフォルトの名無しさん
2008/02/23(土) 13:11:080175デフォルトの名無しさん
2008/02/23(土) 14:31:220176デフォルトの名無しさん
2008/02/23(土) 14:54:210177デフォルトの名無しさん
2008/02/23(土) 15:00:240178デフォルトの名無しさん
2008/02/23(土) 15:00:24煙草の煙や、飛行機雲のように細長く伸びる煙を掻きたいのですが、
0179デフォルトの名無しさん
2008/02/23(土) 15:19:30研究分野ではそういうこともやってるが、時間がかかりすぎるのが難点。
0180デフォルトの名無しさん
2008/02/23(土) 15:24:35将来MS様の構造体の初期化方法が変わったらどうすんだ!
・・・ないね・・・ないw
0181デフォルトの名無しさん
2008/02/23(土) 15:29:10それだったらZeroMemoryもあやうい
0182デフォルトの名無しさん
2008/02/23(土) 17:38:40this->obj = obj;
0183デフォルトの名無しさん
2008/02/23(土) 18:34:09テクスチャを一番初めに考えたんですが、
角度によって濃さが変わって見えるようにするところで詰まっていました
なにか解決策があるんでしょうか
0184デフォルトの名無しさん
2008/02/23(土) 18:39:090185デフォルトの名無しさん
2008/02/23(土) 18:46:39それでも色が変わるならライティングがまずいかカメラに近すぎ。
0186デフォルトの名無しさん
2008/02/23(土) 19:38:45まあ昼夜などの周りの状況に応じて煙の色を変える必要はあるだろうが。
半透明である程度はごまかせる。
0187デフォルトの名無しさん
2008/02/23(土) 19:42:550188デフォルトの名無しさん
2008/02/23(土) 19:49:440189デフォルトの名無しさん
2008/02/23(土) 21:41:23現在スプライトの点滅処理をしようとしているのですが、
(画像はPNGで背景をPhotoShopの透明部分として出力してあります)
スプライト描画時に
SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 )
と設定してPNG画像自体の透明部分を抜くと
アルファ値によるアルファブレンディングができず、
SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2 )
と設定するとアルファ値によるアルファブレンディングはできるのですが、
PNG画像自体の透明部分が抜けません。
SetTextureStageStateの引数を色々調べて試して、
なんとか問題と思われる部分を上記の2つに絞ってみたのですが、
一向に解決できないので、よければアドバイスお願いします
0190デフォルトの名無しさん
2008/02/23(土) 21:47:45Particle Illusion というソフトが参考になる
ビルボードを重ねて煙などのエフェクトを作っている
ビルボードの中心座標を3Dで記憶しておけば
見る角度がかわってもボリューム感があるようになるよ
0191デフォルトの名無しさん
2008/02/23(土) 22:30:11http://watch.impress.co.jp/game%2Fdocs/20051207/3dwa.htm
>疑似ボリュームパーティクルと疑似光散乱
を参照
>>186,188
0192デフォルトの名無しさん
2008/02/23(土) 23:29:41その元テクスチャはボリュームパーティクル前提だからそっけないけど
普通は元テクスチャの状態で陰影がつけられるからな
まあどうしてもパーティクルで表現したいんなら使うのもありかもね
0193デフォルトの名無しさん
2008/02/24(日) 00:26:10ってまあそんなキモイ煙誰も望んでないならあんま頑張る必要ないと思うけどw
ていうか、端折れるところは端折ったらいいと思うよ
ユーザはそんなところ見てないから
グラに関してはサボれるところはできるだけサボる
その代わり全体をよくしようぜ
その裁量がないポジにいるときはグラ頑張ったらいいとおもうけど
そうでないなら頑張る必要ないよ
0194デフォルトの名無しさん
2008/02/24(日) 00:50:40元画像を抜きではなくてアルファ付きイメージで出力すればいいと思うよ
0195デフォルトの名無しさん
2008/02/24(日) 02:58:07D3DTOP_MODULATE
0196189
2008/02/24(日) 07:15:39SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE)でできました!
アドバイスありがとうございました!
0197デフォルトの名無しさん
2008/02/26(火) 10:02:01ttp://uproda.2ch-library.com/src/lib012542.jpg
このように、キャラクターのグラフィックに他のテスクチャを重ねて表示したいのですが、
どのようにすればいいのでしょうか。
また、キャラクタの輪郭部のみが残って表示されているのですが、
どのように設定するのかわかりません。
アドバイス等、よろしくお願いいたします。
0198デフォルトの名無しさん
2008/02/26(火) 11:24:29スクエニに通報しますた
0199デフォルトの名無しさん
2008/02/26(火) 12:38:160200デフォルトの名無しさん
2008/02/26(火) 16:33:39マスクかけたいとか思ってるかもしれないけどナンセンス。
昔風だとパレット操作
今風だと頂点カラー変更
の予感
ツクールとかの人は、色違いの画像も持ってたり
0201デフォルトの名無しさん
2008/02/26(火) 17:28:480202デフォルトの名無しさん
2008/02/26(火) 23:26:480203デフォルトの名無しさん
2008/02/26(火) 23:29:46マスクとかアルファとかでぐぐれ
DirectX以前にそういう事がわかってないと話にならない
0204デフォルトの名無しさん
2008/02/27(水) 04:15:581.0を越える光や負の値を浮動小数フォーマットのテクスチャにレンダリングすると思うんですが
そのテクスチャを使ってもピクセルシェーダから出力するとき結局0〜1にクランプされて意味ないのでは?と考えてしまっています
ブルームとかトーンマッピングというのが関係しているのでしょうか?
具体的にどのようなことができるのかわかっていません
初歩的な質問かもしれませんがよろしくお願いします
0205デフォルトの名無しさん
2008/02/27(水) 04:33:48そこまで用語を知ってるなら、HDRとブルームで検索すれば
いくらでも説明あるだろう。
ブルームも大事だが、一番重要なのは環境マッピングかな。
0206デフォルトの名無しさん
2008/02/27(水) 14:31:45とりあえずHDRは諦めます
ありがとうございました
0208デフォルトの名無しさん
2008/02/28(木) 11:43:09novemver2007のSDKをインストールしたんですが
DirectXControlPannelでDirectMusicの部分をデバッグモードにしたいんですが
上のようになって変更できません、、、何が原因か予想付く方がいらっしゃったら助けてください('A`)
0209デフォルトの名無しさん
2008/02/28(木) 13:59:00ヒント:Nov2007のリリースノート
0210デフォルトの名無しさん
2008/02/28(木) 14:18:140211208
2008/02/28(木) 15:09:18ありがとうございます、前バージョンの物を入れたらDirectMusicのモード関しては動かすことが出来ました。
ですが肝心のサンプルプログラムは動かない…
ちなみにそのプログラムはMicrosoft DirectX 9.0 SDK Update (Summer 2003) で書かれているんですが
やはり、他言語のようにDirectXSDKのバージョンが違うとコードによってはエラーになるとかあるんでしょうか?
やっぱりWebでの学習はあきらめて最近の参考書を買って勉強した方がいいのかな、、、
0212デフォルトの名無しさん
2008/02/28(木) 15:12:270213デフォルトの名無しさん
2008/02/28(木) 22:00:370214デフォルトの名無しさん
2008/03/01(土) 12:39:26どのようにすればよいのでしょうか?
0215デフォルトの名無しさん
2008/03/01(土) 13:06:35それ以上でもそれ以下でもない。
0216デフォルトの名無しさん
2008/03/01(土) 13:23:23画素数が2のべき乗っていうなら判るがサイズなんてmmで測るかptで測るかでも違うじゃないか。
0217デフォルトの名無しさん
2008/03/01(土) 13:44:400218デフォルトの名無しさん
2008/03/01(土) 14:01:42どうすればウィンドウサイズ変えてウィンドウ外の描画内容見たりできますか?
0219デフォルトの名無しさん
2008/03/01(土) 14:10:550220デフォルトの名無しさん
2008/03/01(土) 15:07:010221デフォルトの名無しさん
2008/03/01(土) 17:53:29一般的に画像サイズと言った場合は普通はピクセル数だよ
そんな事を仕事で言ったら笑われるぞ?
0222216
2008/03/01(土) 18:41:07「半径100μmだから差し渡し200μmの画像なんだけど、
画素サイズ125nmだと画像1枚何msecで処理できる?」
てなもんで。
# まぁ表示は二の次なんで、このスレのお歴々とは違うのだろうけどねw
0223デフォルトの名無しさん
2008/03/01(土) 18:52:320224デフォルトの名無しさん
2008/03/01(土) 19:56:07あほですな。
0225デフォルトの名無しさん
2008/03/01(土) 19:58:400226デフォルトの名無しさん
2008/03/01(土) 20:02:530227デフォルトの名無しさん
2008/03/01(土) 20:03:03まあ君はこんな所で電波発言してないで、画像処理ソフト関係のスレに行けばいいと思うよ
○umの画像とやらが何ピクセルを指すのかわからなきゃDirectX的に何の意味もないしな
0228デフォルトの名無しさん
2008/03/01(土) 20:11:440229デフォルトの名無しさん
2008/03/01(土) 20:21:460230デフォルトの名無しさん
2008/03/01(土) 20:28:34デバイスを新しいクライアントサイズでResetしろ
0231デフォルトの名無しさん
2008/03/01(土) 20:32:31画像サイズ→ドット、ピクセル
普通はこう。
画像サイズと単体で聞いてmmとか言い出すのは電波さん。
0232216
2008/03/01(土) 20:35:050233デフォルトの名無しさん
2008/03/01(土) 20:37:380234デフォルトの名無しさん
2008/03/01(土) 20:37:50つまんね
ごまかしたい気持ちはわかるが、これ以上恥の上塗りする前に消えた方がいいよ
0235216
2008/03/01(土) 20:50:18まぁ、自然光では撮像できない世界を知らない人にはそれさえ理解できないか。
0236デフォルトの名無しさん
2008/03/01(土) 21:06:160237デフォルトの名無しさん
2008/03/01(土) 21:20:260238デフォルトの名無しさん
2008/03/01(土) 21:47:03スレタイ見直してから出直して来いよ。
0239デフォルトの名無しさん
2008/03/01(土) 21:51:33もうそっとしといてやれよ
0240デフォルトの名無しさん
2008/03/01(土) 22:08:28出直してこられても迷惑だけどな
>>216みたいな言語障害者はもう来ないでいいよ
0241デフォルトの名無しさん
2008/03/01(土) 22:30:230242デフォルトの名無しさん
2008/03/01(土) 22:32:110243241
2008/03/01(土) 22:58:39(2Dです。3D描画はやったことないです)
画像を描画するやり方しか分からなくて、
デバッグ用に単純な矩形や円を描画するときも、いちいち矩形や円の画像を用意してます。
プログラムで描画する方法があったら教えてほしいです。
0244デフォルトの名無しさん
2008/03/01(土) 23:06:19画像も結構早く描画してくれるし
0245241
2008/03/01(土) 23:30:15ありがとうございます。
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系というのをやってみます。
0246デフォルトの名無しさん
2008/03/01(土) 23:39:300247241
2008/03/01(土) 23:46:44SDKに入ってるんでしょうか?やってみます。
初心者用の本を買って、その通りにインストールして設定して、
本の通りに進めてるだけなので、それ以外のことはまだ知らないんです。
0248デフォルトの名無しさん
2008/03/01(土) 23:54:390249デフォルトの名無しさん
2008/03/02(日) 00:17:370250デフォルトの名無しさん
2008/03/02(日) 02:05:15アンスコがどうしたって?
0251デフォルトの名無しさん
2008/03/02(日) 04:45:47ファイルスコープの変数ならアンダーバー+小文字も予約されているけれど、
ローカル変数ならOKっていう、知識を披露するための前振りでしょ。
0252デフォルトの名無しさん
2008/03/02(日) 08:26:420253デフォルトの名無しさん
2008/03/02(日) 10:13:240254デフォルトの名無しさん
2008/03/02(日) 10:26:02ttp://www.shader.jp/xoops/html/masafumi/directx9.htm
俺はここを参考にさせてもらった。自前のゲームではSpriteより描画が速かった。
まぁ、どんな物でもいえるわけじゃないだろうが・・・
0255デフォルトの名無しさん
2008/03/02(日) 18:08:40LineTo(hdc,800, 400);
こんな感じで直線引くと最前面に描画されちゃうのですが、
最背面に描画するにはどうやったらいいのでしょう?
0256デフォルトの名無しさん
2008/03/02(日) 18:26:460257255
2008/03/02(日) 18:34:04if( SUCCEEDED( pDevice->BeginScene() ) ){
MoveToEx(hdc,0, 0,NULL);
LineTo(hdc,800, 400);
画像表示させる関数
pDevice->EndScene();
}
かなりはしょったけど、こうやれってことだよね?
やってるんだけど、どうしても最前面に出てしまう。
0258デフォルトの名無しさん
2008/03/02(日) 18:48:340259Visual C++ Runtime Libraryってエラーが出てネットゲーム強制終了
2008/03/02(日) 19:33:06厨房なのでググッてもよく分かりません。丁寧にお教え願います。
お願いいたします。
0260デフォルトの名無しさん
2008/03/02(日) 19:39:48何らかのエラーが起きて、そこから復帰できなかったか、
あるいは復帰する必要があるのにそういう風にプログラムを組めていなかったか、
といったところだろう、ということしか言えない。
メモリ不足の可能性もあるけど、何らかのバグの可能性もある。
0261デフォルトの名無しさん
2008/03/02(日) 19:46:12開発元にバグレポート出すといいかも
0262255
2008/03/02(日) 20:05:02>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);
手順はこれだけなんだが、他に設定しないといけないのだろうか?
ググっても出ないっす。
0263デフォルトの名無しさん
2008/03/02(日) 20:29:400264デフォルトの名無しさん
2008/03/02(日) 20:31:050265デフォルトの名無しさん
2008/03/02(日) 21:17:14なんでだよ
どうせあやしい事してるからだろ
0266デフォルトの名無しさん
2008/03/02(日) 21:34:17升でもやってんのか?とっととうせろよ
0267デフォルトの名無しさん
2008/03/02(日) 21:37:09自分は詳しく書かないくせに丁寧に教えろとか、社会を舐めるなよ小僧。
0268デフォルトの名無しさん
2008/03/02(日) 21:37:490269デフォルトの名無しさん
2008/03/02(日) 21:41:240270デフォルトの名無しさん
2008/03/02(日) 21:42:150271デフォルトの名無しさん
2008/03/02(日) 21:43:400272デフォルトの名無しさん
2008/03/02(日) 22:08:51GetDC()って、IDirect3DSurface9::GetDC()じゃないの?
君が取得しているのは、ウインドウのクライアント領域のHDCであって
Direct3Dが描画するのは、D3Dのレンダリングターゲットな訳だから
レンダリングターゲットのHDCじゃなきゃ駄目じゃないのか?
0273255
2008/03/02(日) 23:44:47あ〜なるほど。確かにウィンドウのHDCでした。
情報ありがとうございます。
ちょっと調べてきます。
0274デフォルトの名無しさん
2008/03/02(日) 23:46:24いや、でも、フロントバッファには描画できてんだからできんのかな?
俺、もう10年近くDirectX弄ってるけどGetDCと組み合わせてなにやらやったことねぇや
マジで
0275デフォルトの名無しさん
2008/03/02(日) 23:52:36Direct3D側の描画
メッセージループから抜けるタイミングでWindowのHDCのキューがフラッシュ
0276デフォルトの名無しさん
2008/03/03(月) 11:18:14普段意識しないな
0277デフォルトの名無しさん
2008/03/03(月) 17:49:23そのパソコンはOSはWindowsXPでDirectX 9.0cが入っていますが、DirectX 9.0cにもいくつか種類があると言うことなのでしょうか?
0278デフォルトの名無しさん
2008/03/03(月) 17:55:570279デフォルトの名無しさん
2008/03/03(月) 23:54:28ランタイムライブラリの詰め合わせがMSのサイトのどっかにあるからとってこい
0280デフォルトの名無しさん
2008/03/03(月) 23:56:37あったこれでおkのはず
0281デフォルトの名無しさん
2008/03/04(火) 05:13:54こっちの方が新しい
0282デフォルトの名無しさん
2008/03/04(火) 09:56:13馬鹿か?
0283デフォルトの名無しさん
2008/03/04(火) 17:16:29まとめて配布してんのが>>280-281じゃね?
0284デフォルトの名無しさん
2008/03/04(火) 20:02:50ライセンス的に大丈夫かは知らんが
0285デフォルトの名無しさん
2008/03/04(火) 21:39:21IDirect3DDevice9#DrawPrimitiveで四面体を描いてるですが、
D3DXMatrixLookAtLH( &matView, &vecEyePt, &vecLookatPt, &vecUpVec );
を使ってどうViewを変えても、四面体がスプライトの奥に見えてしまいます。
vecEyePtのX座標を凄くプラスにしても、凄くマイナスにしても、
Y座標を凄くプラスにしても、凄くマイナスにしても、
四面体がスプライトより奥に見えるのですが、なんででしょうか。
0286デフォルトの名無しさん
2008/03/04(火) 21:41:280287285
2008/03/04(火) 22:00:45vecEyePtのZ座標を、プラスマイナス反転しても、
左右反転するだけで、後は変わらず、
四面体がスプライトの裏側にあるように見えてしまいます。
初めて3D描画をしたので、まあ色々と自信はないんですが。。
0288デフォルトの名無しさん
2008/03/04(火) 22:05:54顔を近づけたり離したりしても表示されている内容が奥に見えると言っているわけだが、
なんでそんなに頭が悪いの?
0289デフォルトの名無しさん
2008/03/04(火) 22:12:41例えが悪い
>>287
モニタを下から覗き込んでもパンツは見えないんだよ。
分かったか?
0290デフォルトの名無しさん
2008/03/04(火) 22:18:30spriteとdrawprimitiveは描画されるタイミングが違うぞ
0291285
2008/03/04(火) 22:23:23スプライトは平面だけど、
IDirect3DDevice9#DrawPrimitiveの四面体は立体で、
Z=0平面上にあるわけじゃないです(たぶん)
0292デフォルトの名無しさん
2008/03/04(火) 22:30:13本に書いてあるとおり、libファイルを追加しようと
「構成プロパティ」⇒「リンカ」⇒「入力」としたいのですが、
リンカという項目がそもそもありません。
(表示されないのです、C/C++の下には何も無いのです。)
これはVC++のインストールの段階での問題でしょうか??
くだらない質問でもうしわけありません。
0293285
2008/03/04(火) 22:38:55おお。たぶんそれのような気がします。
位置関係に関わらず、
DrawPrimitiveがSpriteに上書きされてる感じです。
基本2Dのゲームを作りたくて、スプライト描画してたんですが、
エフェクトに3Dを使おうと思ったんです。
スプライトと3Dは同居できないのでしょうか?
>>292
ちょうど参考書に載ってたので。
Visual Studio.NET 2003の場合、メニューより、プロジェクト→プロパティ→リンカ→入力
Visual C++6.0の場合、メニューより、プロジェクト→設定→リンク
0294デフォルトの名無しさん
2008/03/04(火) 22:43:06ありがとうございます。
ソリューションエクスプローラーからみえる
ファイルのプロパティを右クリックして見ていました。
しかし、本はメニューから選ぶのは書いてなかった・・・。
実は以前はこの本のとおりにやって普通に出たと思うのですが・・・。
なんかちょっと気になるな。
0295デフォルトの名無しさん
2008/03/04(火) 22:44:090296デフォルトの名無しさん
2008/03/04(火) 22:45:09すいません。
プロジェクトを右クリックだったのです。
なんて馬鹿なんだ。
忘れないようにメモを書いて保存しておきます・・・。
0297デフォルトの名無しさん
2008/03/04(火) 23:06:12お前天才だな
0298デフォルトの名無しさん
2008/03/04(火) 23:16:12OpenGL で以下にしていることがDirectXでできなくて困っています。
glEnable( GL_LINE_STIPPLE) ;
glLineStipple( 1, 0xF0F0 );
・・・
glDisable( GL_LINE_STIPPLE );
よろしくお願いします。
0299デフォルトの名無しさん
2008/03/04(火) 23:20:580300285
2008/03/05(水) 00:44:05スプライトのZ座標を色々動かしましたが変わりません。
>>290さんの言うとおり、描画タイミングの問題だと思います。
DrawPrimitiveをカメラで撮った画像に、
Sprite平面をカメラで撮った画像を上書きしてる感じです。
0301デフォルトの名無しさん
2008/03/05(水) 00:55:13ID3DXLineで似たようなことが出来そうだけどね。
まあ後はShader使うかだな
0302デフォルトの名無しさん
2008/03/05(水) 07:46:31ID3DXSprite::Endは?
0303285
2008/03/05(水) 07:59:430304デフォルトの名無しさん
2008/03/05(水) 08:15:030305デフォルトの名無しさん
2008/03/05(水) 16:24:210306デフォルトの名無しさん
2008/03/05(水) 17:03:08そういうときはビルボーディングとかやるんじゃなかったかな。
0307デフォルトの名無しさん
2008/03/05(水) 17:34:410308デフォルトの名無しさん
2008/03/05(水) 17:40:090309デフォルトの名無しさん
2008/03/05(水) 17:40:380310デフォルトの名無しさん
2008/03/05(水) 18:03:53このサイト見ると描画する時、画面にアルファ値が書き込まれない
みたいですけど、
・画面にアルファ値を書き込む
・読み込んだテクスチャのアルファデータを変える
のどちらかをやる方ありますか?
0311デフォルトの名無しさん
2008/03/05(水) 18:29:21描画先がα成分の含まれるフォーマットなら書き込まれる。
0312デフォルトの名無しさん
2008/03/05(水) 20:29:16....\hoge.fx(54): error X4004: program too complex; there are more active values than registers
とかいうエラーが出てコンパイルに失敗します。
HLSL上でのスキニングをやろうとしたんですが、
HLSLコード上での変数宣言をなるべく減らしてもダメでした・・・
こういうときってどうやってレジスタ数を節約すればいいのでしょうか?
0313デフォルトの名無しさん
2008/03/05(水) 20:39:48頂点シェーダ2.0以上で定数レジスタが256個
4x3行列を使ったとしても使えるのはボーン80本弱か?
ローポリなら十分な数だとは思うが
それ以上のボーンを扱いたいならCPUで計算だな
0314312
2008/03/05(水) 21:07:16ありがとうございます。
が、ボーン数は28しか指定してないです;;
struct BONE_NODE_STATE_LERP {
float4 vec4GlobalPositionAndScaling;
float4 vec4RotationQuaternion;
float4 vec4BoneBaseOffset;
};
こんな構造体の28個の配列を宣言してます。(28はどうしても必要なんで妥協できないですorz)
for文でブレンド数だけループさせてるとこを
for文使わずにブレンド数に2を指定したらエラーは起こらなくなりました。
for文ってあんま良くないのかなぁ・・・
0315312
2008/03/05(水) 21:09:05×ブレンド数に2を指定したら
○ブレンド数2に限定して2つ同じ処理書いたら
0316285
2008/03/05(水) 21:20:15Draw、DrawPrimitive、Endという順でやってました。
Draw、End、DrawPrimitiveの順にしたところ、
今度は逆にスプライトがDrawPrimitiveに隠れるようになってしまいました。
スプライトは3Dと同居できないのかもしれません。
参考書に、ポリゴンにテクスチャーを貼り付ける方法が書いてあったので、
スプライトをやめて、そっちで2D画像を描こうかと思います。
>>321さんの言う、Shaderとはそのことでしょうか。
というかスプライトって実はマイナーなんでしょうか。
0317デフォルトの名無しさん
2008/03/05(水) 21:27:022D処理だけやるならSprite使う方が楽
3Dと同居させたいならスプライトもプリミティブ化した方が便利
まあ、例えば3D画面の上に2Dでフレームやら体力ゲージやら
表示させるだけなら同居も可能だし
0318デフォルトの名無しさん
2008/03/05(水) 23:41:02Lineクラスを使うのか?
Pattern プロパティが使えそうな気がするのだが、何を設定すれば良いのか?
調査中...
大量の線があるとき、描画速度は大丈夫か?心配事てんこ盛り...
0319デフォルトの名無しさん
2008/03/06(木) 00:01:30あんなケッタイなもん覚えるより自分で書いた方が早いって。
既にレスがあるように自分でパターンテクスチャ用意して
頂点のスクリーン座標からUVを算出するだけじゃん。
0320デフォルトの名無しさん
2008/03/06(木) 02:01:13モデルを分割すりゃいいような気がするんだけど・・・
ぶち込んだメッシュに必要なボーンの情報があればいいわけで・・・
0321デフォルトの名無しさん
2008/03/06(木) 21:57:42そうなのか...DirectX はなにせ初めてなもんで...
ありがとう、そっちでやってみる。
0322デフォルトの名無しさん
2008/03/06(木) 23:42:03Windowの終了ボタンが押されたときは、
ウィンドウプロシージャ内でループ停止フラグを立てた後、
Sleepして1ループ終わるのを待ってから、
デバイスを解放したいんですが、
ウィンドウプロシージャ内でSleepすると、
描画ループ内の、IDirect3DDevice9::EndScene();
も一緒に止まってしまいます。
なんででしょうか?
0323デフォルトの名無しさん
2008/03/06(木) 23:50:53Direct3DDeviceのマルチスレッドに関する注意は読んだ?
何かドキュメントに色々あった気がするけど。
0324デフォルトの名無しさん
2008/03/07(金) 17:15:37Header {
1;
0;
1;
}
みたいなのが付いているんですが
これはいったいなんですか?
SDKのドキュメント読んでもXファイルテンプレートの項にはどこにも書いてないですし、
いったいどんなテンプレートで書いてあるのかもよくわかりません、。
消しても問題なく動くので、よけいよくわからないのですが…
0325デフォルトの名無しさん
2008/03/07(金) 17:29:50出力をしているソフトの製作者に聞け
0326デフォルトの名無しさん
2008/03/07(金) 21:50:0015才から始めるDirectX3Dゲームプログラミングという本で学習しています。
↑のコードなんですが、参考書通りに打ってビルドするとエラーが出てしまいます。
エラー通りに型キャストして試すとプログラムが今度は強制終了してしまいます。
本の環境はVC++2005、sdkがfeb2007、自分の環境はVC++2008、sdkがnove2007です。
サンプル通りに打ってダメということは環境の差でしょうか、、、
0327326
2008/03/07(金) 21:51:210328デフォルトの名無しさん
2008/03/07(金) 21:55:57なんでバージョンまでわかってるのに別バージョン入れるんだ?
何もわからない馬鹿ならまずは環境あわせるぐらいしとけ
0329デフォルトの名無しさん
2008/03/07(金) 22:09:48本に付いてるサンプルもすべて実行できないなら環境の問題、
本のほうは動くなら入力したコードとプロジェクト設定を見直す。後MBCSで試してみるとか。
まぁ本が間違ってる可能性もあるけどな。
0330デフォルトの名無しさん
2008/03/07(金) 22:11:060331デフォルトの名無しさん
2008/03/07(金) 22:43:340332326
2008/03/07(金) 22:43:50すいません、、この部分まで正常に動作していたので、バージョンは最新のままにしていました。
>>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 スタイル キャストまたは関数スタイルのキャストが必要です。
0333デフォルトの名無しさん
2008/03/07(金) 22:46:120334デフォルトの名無しさん
2008/03/07(金) 22:48:280335デフォルトの名無しさん
2008/03/07(金) 23:01:03D3DXCreateTextureFromFileAの(LPCTSTR)は不要。
その少し上の配列確保のとこで==が=になってる。
SetTextureのとこの&はいらない。
0336デフォルトの名無しさん
2008/03/07(金) 23:09:220337デフォルトの名無しさん
2008/03/07(金) 23:15:40うわ、、、動きました。
普通にタイプミスとかホント迷惑かけてすいませんでした、、、
じゃあバージョンアップで(LPCTSTR)のキャストが不要になったと考えて良いんですかね。
0338デフォルトの名無しさん
2008/03/08(土) 00:50:550339デフォルトの名無しさん
2008/03/08(土) 01:25:30自力で
0340デフォルトの名無しさん
2008/03/08(土) 01:28:32その本、とても15歳で理解できるとは思えないようないいかげんな解説なうえ、
リンカの設定とか、やらないとどんなにがんばってもコンパイルの通らないものの説明が一切ない
アマゾンの評価のほうに設定のしかたがのってたと思う
0341デフォルトの名無しさん
2008/03/08(土) 15:21:26クライアント領域の大きさは固定で、ディスプレイの解像度を変更するか、
クライアント領域をディスプレイ全体に広げて、IDirect3DDevice9::SetTransformで拡大描画するか
迷っています。
それぞれの利点・欠点・特徴や、他にいい方法があったら、
教えてもらえませんか。
ちなみに、作っているのはシューティングゲームです。
0342デフォルトの名無しさん
2008/03/08(土) 15:44:580343デフォルトの名無しさん
2008/03/08(土) 15:47:41前者は環境依存
後者は無駄なフィルレート
簡単なんだから両方試してみるのが一番かと
0344デフォルトの名無しさん
2008/03/08(土) 15:49:28それを少しだけ書き換えて、フルスクリーンでも動くようにするのが基本。
まずはそれをやれ。それで物足りなくなったらそのとき考えろ。
0345デフォルトの名無しさん
2008/03/08(土) 16:01:55拡大描画はCPUパワー使うべ
0346341
2008/03/08(土) 16:13:25処理が重くなると困るので、解像度変更を使おうと思います。
ところで、フルスクリーン、ウィンドウを切り替えるたびに、
デバイスを破棄して、もう一度CreateDeviceしなければいけないのでしょうか。
>>342
ゲームは大画面の方が派手で良いですよ。
0347デフォルトの名無しさん
2008/03/08(土) 16:23:33>デバイスを破棄して、もう一度CreateDeviceしなければいけないのでしょうか。
そうだべ
ノートPCだと省エネモード起動したら復帰できないべ
>ゲームは大画面の方が派手で良いですよ。
低スペックマシンで動かんべ
0348デフォルトの名無しさん
2008/03/08(土) 16:26:450349デフォルトの名無しさん
2008/03/08(土) 16:53:34CreateDeviceは必要ない
>>347はでたらめ
デバイスリセットするだけで問題ないよ
0350341
2008/03/08(土) 16:55:31この言葉は初めて使いますが、kwsk
お願いします。
0351デフォルトの名無しさん
2008/03/08(土) 16:59:36デバイスのロストは2とおりある
一つはMANAGEDで復帰できるタイプ
もう一つはデバイスごとロストするタイプ
この両方を別々にサポートするかデバイスがロストするほうにあわせるか?
でたびたび対立が出来てる
デバイスがロストするほうは条件がよくわからない上に
知らない奴もいるので起きる・起きないで喧嘩になることもしょっちゅう
ただ、BBXの書き込みに綺麗にまとめられてる文があったがいまBBXを見に行ってないため
いまも残ってるかはよくわからない
0352デフォルトの名無しさん
2008/03/08(土) 17:01:530353デフォルトの名無しさん
2008/03/08(土) 17:17:060354デフォルトの名無しさん
2008/03/08(土) 17:32:180355デフォルトの名無しさん
2008/03/08(土) 17:33:190356デフォルトの名無しさん
2008/03/08(土) 17:35:140357デフォルトの名無しさん
2008/03/08(土) 18:04:45そういえばうちのWin98マシンだとResetがうまくいってないっぽいな
まあどうせSetDialogBoxModeとかも正常動作してないからWin98対応は諦めたけど
0358デフォルトの名無しさん
2008/03/08(土) 18:11:52動いている最中にnViewのモード切り替えるとかすると
Resetでは戻らなかった気がする。
0359341
2008/03/08(土) 18:52:34常に描画前に、IDirect3DDevice9::TestCooperativeLevel()をやって、
D3D_OKなら描画、D3DERR_DEVICELOSTなら待機、
D3DERR_DEVICENOTRESETならResetという感じでしょうか。
うちの環境では、
スクリーンセイバー起動や、ディスプレイの設定変更の場合は、
復帰できるロストでした。
nViewはレアっぽいので、デバイスごとロストはとりあえず放置です。
ただ、フルスクリーン時に、Alt+Tabを押すと、
D3DERR_DEVICELOSTになったままResetできる状態にならないのですが、
この場合はもう一度CreateDeviceするしかないのでしょうか。
0360デフォルトの名無しさん
2008/03/08(土) 21:13:56これで大丈夫だったらビデオカードの切り替えぐらいしかねぇんじゃねぇかな?>デバイスごとロスト
オンボード→グラボ、グラボ→オンボードとかやってみるのが一番速いかもね
0361デフォルトの名無しさん
2008/03/08(土) 21:14:45ビューポートの設定がロストしてしまうんだが
これは仕様ですか?それともバグ?
0362デフォルトの名無しさん
2008/03/08(土) 21:15:44>ただ、フルスクリーン時に、Alt+Tabを押すと、
>D3DERR_DEVICELOSTになったままResetできる状態にならないのですが、
>この場合はもう一度CreateDeviceするしかないのでしょうか。
あれ?それでなったっけ?
かなり頻度低かった気がするんだけど?>デバイスごとロスト
0363341
2008/03/08(土) 21:35:25まずはちっちゃなプログラムで、実験してみます。
0364デフォルトの名無しさん
2008/03/09(日) 11:22:21IDirect3DDevice9::Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
を行っても、「D3DERR_INVALIDCALL」が返ってしまいます。
以下のことは確認したのですが。
・Resetの引数はデバイス作成時の「D3DPRESENT_PARAMETERS」と同じ(作成は失敗しない)
・TestCooperativeLevel();は「D3DERR_DEVICENOTRESET」を返している
・CreateDeviceしているだけで、リソースは何も作っていない
行き詰まってしまったので、よければ誰かソースを見てもらえませんでしょうか。
http://www.sepia.dti.ne.jp/zigzag/src.zip
※画面の色の設定を変更すると(32ビット→16ビット)復帰できるデバイス消失になります。
0365デフォルトの名無しさん
2008/03/09(日) 12:09:270366デフォルトの名無しさん
2008/03/09(日) 12:11:11>※画面の色の設定を変更すると(32ビット→16ビット)復帰できるデバイス消失になります。
画面のプロパティから画面情報を変えた場合のロストを復旧させることは基本的にできないはず。
対応するなら、作成したリソースは全部システムメモリに自前で所持して、
Direct3Dの初期化から全部やり直し。
0367デフォルトの名無しさん
2008/03/09(日) 13:21:54ソースは見たが、D3D8なんでコンパイルは通せなかった。
なので確証なし。
デバイスのリセット前には、D3DPOOL_DEFAULTで作成したリソースは
全てリリースしなければならない。それはやってますか?
>>・CreateDeviceしているだけで、リソースは何も作っていない
例えば、InitBg()でIndexBufferを作っているが、これとかは?
>>366
少なくとも俺の環境ではリセットで復旧出来ているよ。
0368デフォルトの名無しさん
2008/03/09(日) 13:34:14今は、これは最初に1回だけ作成して毎フレーム使いまわしていますが
毎フレーム作成・破棄する方にしたいと思っています。
それでテクスチャの作成・破棄って重いでしょうか?
単純にメモリブロックをアロケートするだけなので重くなさそうだと踏んでいるのですが。
※自分でテストすべきなのでしょうが、計測用のベースが無いのでなかなか難しい・・
0369デフォルトの名無しさん
2008/03/09(日) 14:30:58>画面のプロパティから画面情報を変えた場合のロストを復旧させることは基本的にできないはず。
何の問題も無く出来る。
こんな簡単に出来ることを確かめもせず、
「はず」とかテメエの脳内妄想で見当違いな講釈を垂れて何がやりたいの?
0370デフォルトの名無しさん
2008/03/09(日) 14:44:13それはドライバ依存だろ?
メモリ破棄されてるのにどう復旧させるんだ?
元になるものが消滅してるんだぞ?
どうせNVIDIAとAMDの最新環境だけテストして終わりなんだろ?
0371デフォルトの名無しさん
2008/03/09(日) 14:58:43ロストからデバイスを復旧させるのと、破棄されたメモリを元に戻すのが
ごちゃごちゃになっている時点で、根本的に何も分かっていない。
分かっていないのに口を挟むのはやめた方が良い。
0372デフォルトの名無しさん
2008/03/09(日) 15:23:56デバイスがVRAM上で管理しているメモリはReset前に破棄。
デバイス復帰後イメージ自体はプログラマ側の自己責任で元に戻す。
この過程でメモリ内容が消失していても、デバイスを復帰させる場合の障害にはならないよ。
0373デフォルトの名無しさん
2008/03/09(日) 15:26:57画面の色かえるとメモリを初期状態にするドライバがあるんだわな
元のデバイスが何だったかすら記録されてない状態で
どうやって復旧させるのか答えてみなよ
あんたが言うロストの復旧が可能というのは
DirectXの関数を呼び出すだけなんだよな?(まさか今更意見かえたりしないよな)
関数は動いてもドライバが初期状態を返してきたら
そのあとどうすんだよ?
もしかしてアンタは全部初期状態でレンダしてんのか?
だからドライバがメモリ破棄しても問題ないのか?
>>372
この話にプログラマ側の自己責任で戻すとかは関係ない
ロストの復旧だけで済むとか言ってる奴がいるんだ
しかも「何の問題も無く出来る」と言い切ったんだ
0374デフォルトの名無しさん
2008/03/09(日) 15:28:540375デフォルトの名無しさん
2008/03/09(日) 15:31:21仕組み的には復帰できない気がするんだけど
32bit→16bitってなんで復帰できるんだろうねw
バックバッファとかマジでどうなってんのかと思う
ちなみにもう1度書いておくとデバイスロストは2通り
1.POOL_MANAGEDの内容が元に戻せる
2.デバイスごとロスト(D3DDeviceシボンヌ、D3DDeviceから作成し直す必要アリ)
この2つは確実に存在するのはわかってるんだけど
この2つがどんな条件で分けられてるのかわからない
これで認識あってる?
ただ、2のほうってたしか表現の違いでごちゃごちゃすんだよな
結果的にはデバイス作り直すしかないんだけど
ポインタの先までまるごと無効になったかどうかは正直覚えてない
作りなおすしかないのはそうだと思うんだけど・・・?
微妙な間違いはあるだろうけどその辺は訂正してくれる形でサポート頼む
0376デフォルトの名無しさん
2008/03/09(日) 15:38:03あまりにも頭が悪すぎる。
0377364
2008/03/09(日) 15:39:06原因はマルチスレッドのせいでした。
以下MSDNより。
Direct3D では、IDirect3DDevice9::Reset、IDirect3D9::CreateDevice、
IDirect3DDevice9::TestCooperativeLevel、または IDirect3DDevice9 の
最後の Release の各メソッドは、ウィンドウ メッセージを処理するスレッドと
同じスレッドからのみ呼び出すことができるように設計されている。
なんたること。。。
0378デフォルトの名無しさん
2008/03/09(日) 15:39:15>32bit→16bitってなんで復帰できるんだろうねw
領域を確保し直しているだけだろ。
内容自体は保証されないんだから。
0379デフォルトの名無しさん
2008/03/09(日) 15:40:22それってデバイスごと作り直さないといけないタイプ?
POOL_MANAGEDで復帰可能なタイプ?
0380デフォルトの名無しさん
2008/03/09(日) 15:41:47しかしドライバを入れ直していたら、動作中のプログラムが動かなくなったと文句を言っている奴を見たことはない。
0381デフォルトの名無しさん
2008/03/09(日) 15:43:01まだそこまでいってなくて
デバイスの復旧が必要な条件がわからないんだ
0382デフォルトの名無しさん
2008/03/09(日) 15:46:07CTRL+ALT+DELを押してごらん
0383デフォルトの名無しさん
2008/03/09(日) 15:47:42システムメモリ上に無いデータは、ロストした時点でリソースが破棄されるだけで、
デバイスそのものは作り直す必用はない。
バックバッファは内部的に再確保されているから、内容を書き換えないで出力すると、
ゴミデータが描画されるのが確認出来る。
0384デフォルトの名無しさん
2008/03/09(日) 15:52:31PrimitiveType.LineStrip
で点線を描画したいだけなのです。
テクスチャを張って一見点線らしく描画できましたたが、スケールをかけると点線の幅が変わってしまいます。
スケール、ロールを行うシステムなのですが、常に一定間隔の点線描画を得るにはどうやるのでしょうか?
頂点バッファで
CustomVertex.PositionColoredTextured
を使用しましたが、やり方が悪いのでしょうか?
まさかスケールやロールするたびにu, vを計算して設定し直すのではレスポンスが気になりますし...
0385デフォルトの名無しさん
2008/03/09(日) 15:56:11どっちのパターンに対していってんの?
0386デフォルトの名無しさん
2008/03/09(日) 15:57:08点をスクリーン座標に変換したあとに描画してみてはどうだろうか?
0387デフォルトの名無しさん
2008/03/09(日) 15:57:510388デフォルトの名無しさん
2008/03/09(日) 16:05:36スクリーン座標上の距離を求めて
そこからUVを決定すればいいんじゃね?
多分、解決ーw
俺は天才だなw
0389364
2008/03/09(日) 16:11:54いちお、うちの環境で調べたことを書いときます。
(ビデオカードはGeForce 6600GT)
◆デバイスロスト(復旧可能)になる条件
・ウィンドウモード時にスクリーンセイバー起動
・ウィンドウモード時にディスプレイの設定を変更する(32bit→16bitや、画面90度回転など)
・フルスクリーンモード時にALT + TAB
・フルスクリーンモード時にCTRL+ALT+DEL
◆デバイスロスト(復旧可能)とはどういう状態か
Deviceを作り直す必要はなく、Resetすればまた使える。
POOL_MANAGEDでシステムに作ったリソースは失われない。
POOL_DEFAULTでVRAMに作ったリソースはReset前に解放して再作成する必要がある。
復旧できないロスト(デバイスごと作り直さないといけない状態)は、
一度も起こらず、やり方も分かりませんでした。
0390デフォルトの名無しさん
2008/03/09(日) 17:01:24オレもなった事ないな
MSのサイトのどこかにドキュメントないかな
0391デフォルトの名無しさん
2008/03/09(日) 17:08:33たとえばマウスホイールの回転でズームする場合、
マウスホイールのイベントにて、頂点バッファをLockして
u,vを設定し直してUnlock、そして描画ということでしょうか。
DirectXをよく知らないので教えてほしいのですが、
頻繁な頂点バッファの更新はレスポンスに影響しないのでしょうか?
(実際に問題ありかどうかはやって見れば良い話ですが...)
0392デフォルトの名無しさん
2008/03/09(日) 17:16:312のD3DDeviceしぼんぬは無いだろう。これはいわば都市伝説だな。
ID3DDevice9は、GPUに結びついているとはいえ
実態はメインメモリ上のデータにすぎない。
GPUがあろうがなかろうが、ドライバを消そうがどうしようが
こいつ自体が死ぬ直接的な理由にはならんだろ。
分けるとすれば、reset()で救済できるロストと救済できないロストに
なるんじゃないか?
0393デフォルトの名無しさん
2008/03/09(日) 17:28:29GPUの[プロパティ]->[トラブルシューティング]->[ハードウェアアクセラレータ]を
最大からLv2ぐらいまで落とすと、デバイスはロストしっぱなしになるが
元に戻すと何事も無く復活する。何気にスゲーなD3Dは。
0394デフォルトの名無しさん
2008/03/09(日) 18:27:48単純に
POOL_MANAGEDで復活可
POOL_MANAGEDで復活否(これができない状態を俺はデバイスごとロストだと思ってる(勘違いの可能性アリ))
ってわけられると思うけどその辺の境目はみんなの中でどうなってんの?
0395デフォルトの名無しさん
2008/03/09(日) 19:40:52毎回u,vを計算し直して頂点バッファにセットして描画はでは遅すぎますね。
0396デフォルトの名無しさん
2008/03/09(日) 19:48:182D用にテクスチャを貼った四角ポリゴン(800x600)を作成したんですが、
Z字に頂点を並べてポリゴンを作ったときにノイズがでます。N字に並べた時はでません。
両方とも出来上がるポリゴンは同じだと思うんですけど、何か違うのでしょうか?
http://up2.viploader.net/pic/src/viploader595819.jpg
0397デフォルトの名無しさん
2008/03/09(日) 19:55:38//質問
PCゲームなど、セーブ、ロード画面に演出の一つとして使われている
現在のウィンドウ画面を小さくして表示しているサムネイル画面?
について質問です。
やり方がわかりません。そういうAPIが用意されているのでしょうか?
教えてください。
0398デフォルトの名無しさん
2008/03/09(日) 20:10:54自分で縮小して表示するだけ
0399デフォルトの名無しさん
2008/03/09(日) 20:28:09フラッシュメモリ
↓コピー
友人のパソコン
としたのですが、インストールできませんでした。
directXはインターネットが繋げないとインストールできないのでしょうか?
0400デフォルトの名無しさん
2008/03/09(日) 20:28:480401デフォルトの名無しさん
2008/03/09(日) 20:33:06Saveフォルダに、その画像が保存してあったりするので、それはないかと。
その画像をサムネイル画面として表示しているのでは?
そのやり方さえもわからないので。
0402デフォルトの名無しさん
2008/03/09(日) 20:34:54縮小して保存してるんだろ
0403デフォルトの名無しさん
2008/03/09(日) 20:36:00自分で縮小してその画像を保存すればいいだろ。
どれだけ頭が悪いんだ?
0404デフォルトの名無しさん
2008/03/09(日) 20:37:54現在表示しているウィンドウ画面の保存のしかたは、
どうすればよいでしょうか?
0405デフォルトの名無しさん
2008/03/09(日) 20:40:09DIBにイメージをコピーして好きな画像フォーマットに変換して出力しろ。
0406デフォルトの名無しさん
2008/03/09(日) 20:52:50DIBとは??
0407デフォルトの名無しさん
2008/03/09(日) 20:53:530408デフォルトの名無しさん
2008/03/09(日) 20:57:14それを画面の表示状態と同じように並べるじゃないですか
それを縮小するじゃないですか
それを保存すればいいんじゃないですか?
0409デフォルトの名無しさん
2008/03/09(日) 21:02:04ググれば分かるような単語ですら調べようともせず質問するお前は、プログラマには向いていない。
迷惑にしかならないから、もうやめておけ。
0410デフォルトの名無しさん
2008/03/09(日) 21:16:11アルファブレンドのアルファ値を設定するようにUVも決まらんものですか?
まあ、それでもダメなら次の手を
ところでいまって
頂点と線一つ一つすべてに対して計算してんの?
例えば100〜200まではこの点線テクスチャ、
200〜300まではこの点線テクスチャ、
300〜400まではこの点線テクスチャ
・
・
・
っていうように使ってみたらどうよ?
0411デフォルトの名無しさん
2008/03/09(日) 21:19:54パースペクティブコレクトでググルとなんかわかるか?
いや、違ったらスマンコ
0412デフォルトの名無しさん
2008/03/09(日) 21:48:57>アルファブレンドのアルファ値を設定するようにUVも決まらんものですか?
>頂点と線一つ一つすべてに対して計算してんの?
スクリーン座標系でほぼ点線の間隔が同一になるように各頂点に対してu,vを
計算しました。これ自体も点数が多いのでレスポンスの観点から問題ですね。
>例えば100〜200まではこの点線テクスチャ、
>200〜300まではこの点線テクスチャ、
>300〜400まではこの点線テクスチャ
各頂点は全て3次元的に折れています(各点間は微小です)ので
具体的にどのようにやるのか私には解りかねます...
ロールも3次元的に行いますので、スクリーン座標で点線間隔が一定で
リアルタイム表示というのはDirectXはそもそも無理なのでしょうか?
OpenGLからDirectXへというのはこのあたりに弊害があるのでしょうかね???
0413デフォルトの名無しさん
2008/03/09(日) 21:58:51>各頂点は全て3次元的に折れています(各点間は微小です)ので
?
1枚目(網目が超大きい)
u0.0 u0.5 u1.0
− − − − − − − − − − − − −
2枚目(網目が大きい)
−−−−−−−−−−−−−−−−−−−−
3枚目(網目が細かい)
----------------------------------------
ってテクスチャ用意して
スクリーン座標上の点間の距離を調べて
uv(0,0)-uv(1.0,0.0)で見た目等間隔になるように適当に比率だして
繋げりゃいいんじゃねぇの?
0414デフォルトの名無しさん
2008/03/09(日) 22:15:03ウィンドウが表示されて感動した。
半日格闘してたから涙ものです。
0415デフォルトの名無しさん
2008/03/09(日) 22:17:53「で、どうすんの?」ってなって挫折する
0416デフォルトの名無しさん
2008/03/09(日) 22:20:22すみません。
私自身がまだよく理解できていない思うのですが、
今1つのテクスチャでスクリーン座標上で距離を調べてu、vを
設定しているのですが、
それを3つのテクスチャでどのように繋げれば高速描画になるのかが
解りません。アホですみません。
(プログラムを見たら解ると思いますが...)
0417デフォルトの名無しさん
2008/03/09(日) 23:18:160〜100ならテクスチャ1
100〜200ならテクスチャ2
200〜300ならテクスチャ3
みたいな一定の距離で使用するテクスチャを切り替えちゃう誤魔化し技w
これならuvを弄らないしテクスチャの切り替えだけでいけるから
擬似的に速くなるんじゃないかと思ったわけ
ところで頂点シェーダでuv設定する方法で上手くいかんかった?
この程度楽勝速度だと思うんだけど
0418デフォルトの名無しさん
2008/03/10(月) 09:35:430419マイク ◆yrBrqfF1Ew
2008/03/10(月) 15:58:420420デフォルトの名無しさん
2008/03/10(月) 16:11:40インターネットがつなげない友人に頼まれて、directXをフラッシュメモリに入れて
フラッシュメモリ
↓コピー
友人のパソコン
としたのですが、インストールできませんでした。
directXはインターネットが繋げないとインストール、更新できないのでしょうか?
0421デフォルトの名無しさん
2008/03/10(月) 16:16:08その手の質問はPCゲーム板にでも投げて下さい。
0422デフォルトの名無しさん
2008/03/10(月) 16:36:27がありますが、これは今現在の画面をそのまま(またはその一部を)保存します。
そうではなく現在の画面を縮小拡大して保存するようなものはありますでしょうか?
WIN32APIで用意されているStretchBlt()は試しましたが画像がひどかったので。
0423デフォルトの名無しさん
2008/03/10(月) 17:11:28また>>409って言われるぞ
0424デフォルトの名無しさん
2008/03/10(月) 17:11:33StretchBlt使わないで自分で補間縮小すればいいじゃん。
0425デフォルトの名無しさん
2008/03/10(月) 17:58:04マルチしてる暇あったら自分で調べろよ(w
0426デフォルトの名無しさん
2008/03/10(月) 18:09:41水平画角ですか?
どなたかよろしくお願いします。
0427デフォルトの名無しさん
2008/03/10(月) 19:33:32http://www.google.co.jp/search?q=directx+%8D%C4%94z%95z&lr=lang_ja&num=20&hl=ja&btnG=Google+%8C%9F%8D%F5
0428デフォルトの名無しさん
2008/03/10(月) 19:35:08http://www.google.co.jp/search?q=directx+%8D%C4%94z%95z&lr=lang_ja&num=20&hl=ja&btnG=Google+%8C%9F%8D%F5
0429428
2008/03/10(月) 19:36:04>>422
http://www.google.co.jp/search?num=20&hl=ja&safe=off&q=%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja
0430デフォルトの名無しさん
2008/03/10(月) 20:21:06インストールされるのは小さいプラグイン1個なのに実行されるゲームは明らかにDirect3D製。
XBAPをゲーム寄りに進化させた感じ。
Direct3Dのサーフェイスをそのままブラウザに転送してる?
0431デフォルトの名無しさん
2008/03/10(月) 20:51:341024x768の画面に使う場合
縦横の比率が違うことによって誤差は出ないのでしょうか?
それとも気にしなくていい程度なのでしょうか?
0432デフォルトの名無しさん
2008/03/10(月) 21:35:03JOGLなんじゃないの
0433デフォルトの名無しさん
2008/03/10(月) 21:53:260〜100・・・と言われているのはスクリーン座標系での距離ですよね。
ロールしたら全ての点(とりあえずテストで数十万点)のスクリーン座標変換び距離計
していますが、これだけでとても使えるレベルの速度ではありません。
(テクスチャを張るだけの場合は、スケール、ロールは全く問題ない描画速度でした。)
※ちなみに今までのシステムはC++&OpenGLですが、今後のWindowsの状況から
C#&DirectXも対応すべきではとのことで調査しています。
何のシステムかは察しが付くかもしれませんが...
>>ところで頂点シェーダでuv設定する方法で上手くいかんかった?
このあたりも私にはよく解りませんが、スクリーン座標系でのuv計算自体で
リアルタイムの描画は難しいという感じです。
(OpenGLと同等の)点線はあきらめムードです。
点線でなければならないこともないかなとメンバーで話し合っています。
0434デフォルトの名無しさん
2008/03/10(月) 22:13:04何も重たいような処理をしていないのにFPSが36前後しか出ず、
さらに前回の描画画面がウインドウを再起動しても残ってる状態になります。
FPSを20とかに落とすと問題無いのですが原因が全く掴めません・・・。
ソースを晒しておくので、もしよければ見ていただいてもいいでしょうか?
(フォントはまだ表示できないので、同フォルダ内にテキストでFPSが保存されます)
ttp://www.uploda.net/cgi/uploader1/index.php?file_id=0000298763.zip
0435デフォルトの名無しさん
2008/03/10(月) 22:34:35なんで関数がダブってるんだ?
0436デフォルトの名無しさん
2008/03/10(月) 22:43:52投稿前に修正でコピペした分で関数名が二重になっていたようです。
確認不足ですみません、修正版を再度アップしました。
ttp://www.uploda.net/cgi/uploader1/index.php?file_id=0000298777.zip
0437デフォルトの名無しさん
2008/03/10(月) 22:43:560438デフォルトの名無しさん
2008/03/10(月) 22:55:01無料で遊べる4本のゲームの内、一本だけ
「DirectX9のShaderバージョンが不足している〜.exe」ってメッセージが出て動かなかったから、
Direct3Dを使ってることは間違いないと思う。
パフォーマンスもJavaやFlashより高い。
インターネット一時フォルダか何かにexeをダウンロードして実行させてる感じ。
0439デフォルトの名無しさん
2008/03/10(月) 23:02:41ぱっとみ、そんな問題なさそうな気がする
D3DPRESENT_PARAMETERSの初期化が甘いのが気になった
初期化してないから、Zバッファが自動作成有効になってないから画面がみだれるんじゃね?
FPSが遅いのはわからん
俺の環境では60FPSでてた
0440439
2008/03/10(月) 23:05:481秒ごとにテキスト書き出してるみたいだけど、それがFPSの足ひっぱってるとかない?
0441デフォルトの名無しさん
2008/03/10(月) 23:06:49なるほど、Zバッファあたりが怪しいのですか
私の環境でも稀に60FPSになりますがDebugフォルダを消して再ビルドすると
かなりの高確率で38〜36FPSになります(VisualStudio.NET2003にて)
起動時が60FPSなら起動後もずっと60で、36FPSなら同様にずっと36のままなので、
どうも気になる・・・とりあえずZバッファ辺りを見てみます、ありがとうございます
0442デフォルトの名無しさん
2008/03/10(月) 23:07:47Core2Duoマシンなので処理性能ならば恐らくは大丈夫かと思います。
0443デフォルトの名無しさん
2008/03/10(月) 23:10:44ファイルへのIOはHDへのアクセスがあるので、CPUの性能はあんまり関係ない。
とはいえ、Core2Duo使ってるPCならボロHD使ってることはないと思うけど、
ファイルへのIOはメモリアクセスに比べて何十倍も遅いので、バッファ使うなどした方がいい(中身みてないけど、使ってる?)
0444439
2008/03/10(月) 23:11:41ZバッファはFPSには関係ない
なんか前回のウィンドウが残るとか書いてたからそれのほう
ためしに
if( nowTime - lastTime >= 1000 ){
この条件の処理の最後に
lastTime = ::timeGetTime();
入れたらどうなる?
0445439
2008/03/10(月) 23:16:51この処理もなんかおかしい気がする
timeGetTime()は0スタートではないので、そのまま*6はおかしい
0446デフォルトの名無しさん
2008/03/10(月) 23:21:240447439
2008/03/10(月) 23:24:16というわけで、俺的結論は、FlipのときにVsync同期しているため、
ぎりぎりタイマでタイミングとっているところで、ちょっとでもずれると次のフレームへ持ち越しになるから
処理落ちがおきてるのかと
Vistaとかなら、強制で同期するので
・・・と思うんだけどどうでしょ?
0448デフォルトの名無しさん
2008/03/10(月) 23:26:17あ、CPUはあんまり関係無いんですねw
ファイルに書き込むときは
char str[32]; sprintf( str, "FPS:%.2f\n", fps );
という感じでfloat型をchar型の配列に格納してますが、これが怪しいのでしょうか…
>>444-445
書いた後気になったんですがやっぱりウインドウの方ですよねwすみません
んーtimeGetTime()*6もか…なんか次から次へと怪しいところが(苦笑
アドバイス頂いたFPSの方を試してみましたが、今のところは問題なく60FPS出てます
もう少しテストを続けてみます
>>446
確か仮想関数があるとどうとか聞いたような…
直しておいたほうがいいなぁ…指摘ありがうございます
0449434
2008/03/10(月) 23:42:1260FPS出るようになったーとパソコンを再起動したら再発しましたwworz
明日はもっと性能の低いパソコンに触る機会があるので
そちらの方でも一度試してみてまた報告したいと思います。
(もしかするとこのパソコンがおかしいだけかもしれないので)
ともかく、アドバイスくださった皆様方ありがとうございました
0450デフォルトの名無しさん
2008/03/11(火) 00:32:04timeBeginPeriodしてる?
0451デフォルトの名無しさん
2008/03/11(火) 01:05:47返答ありがとうございます。・・・どうもしていないっぽいですね。
色んなDirectX関連のサイトのサンプルやソースを実行しても60FPSだし問題無かったので
指定しなくても大丈夫なんだと気にも留めて無かったんですが、
timeBeginPeriodとtimeEndPeriodを指定すると見事に60FPSになってます。
Sleep(1)の部分で余分に待機してたってことでしょうかorz
勉強不足で申し訳ないです・・・どうもありがとうございます。
0452デフォルトの名無しさん
2008/03/11(火) 01:11:22俺のPCじゃ問題無かったけどな
>>451OSはXP?
0453デフォルトの名無しさん
2008/03/11(火) 01:17:36XPです。
0454デフォルトの名無しさん
2008/03/11(火) 09:08:49NT系のOSはtimeBeginPeriodしないと1ms単位にならん。
98系はしなくても1ms単位だったのでNT系で動作が可笑しくなる場合は其処が原因。
0455デフォルトの名無しさん
2008/03/11(火) 09:50:000456デフォルトの名無しさん
2008/03/11(火) 10:36:470457デフォルトの名無しさん
2008/03/11(火) 15:22:460458デフォルトの名無しさん
2008/03/11(火) 20:09:410459デフォルトの名無しさん
2008/03/11(火) 20:43:48と嘘を書く俺よりはマシかもしれない
0460デフォルトの名無しさん
2008/03/11(火) 21:06:11「としか言いようがない」って言い回しは視野がせまく
多面的な思考が出来ない事を表している。
人生やり直せとしか言いようがない。
0461デフォルトの名無しさん
2008/03/11(火) 21:12:10「としか言いようがない」って言い回しは視野がせまく
多面的な思考が...
0462デフォルトの名無しさん
2008/03/11(火) 21:22:280463デフォルトの名無しさん
2008/03/11(火) 21:24:200464デフォルトの名無しさん
2008/03/11(火) 23:13:190465デフォルトの名無しさん
2008/03/12(水) 00:45:57スレッドごとに利用するCPUをアフィニティマスクで
1つに固定すればおかしな値が帰ってこなくなるよ。
スレッドAはCPU1、スレッドBはCPU2、スレッドCはCPU2みたいな感じで全部指定
0466デフォルトの名無しさん
2008/03/12(水) 02:02:370467デフォルトの名無しさん
2008/03/12(水) 12:12:18って話題が無いから外れてるのか
0468デフォルトの名無しさん
2008/03/12(水) 14:23:12GetBackBuffer や GetSurfaceLevel といった、IDirectSurfaceXを取得する関数。
これらは取得に(結構な)時間がかかるのでしょうか?
それとも(参照カウントを増やしたうえで)ポインタを返すだけなのでしょうか?
前者ならば一度GetBackBufferしたポインタを保持しておくのですが、
そうなるとデバイスロスト時に解放しないとならず、1手間かかります。
後者ならば描画前に確保し、描画し終わったらすぐにReleaseするようにすれば楽そうです。
0469デフォルトの名無しさん
2008/03/12(水) 14:29:34後者
0470デフォルトの名無しさん
2008/03/12(水) 15:04:53ありがとうございます。
なるほど、例えばpSwapChain->GetBackBufferでとれるIDirectSurface9は、
pSwapChainが自身の生成時にカウント1で保持しているわけですね。
参照カウントなので後者だろうなとは予想していたのですが、確信がありませんでした。ありがとうございます
0471デフォルトの名無しさん
2008/03/12(水) 15:17:07せっかく最初に行なった
pDevice->SetRenderState
だとかの設定まで全て初期化されてしまうようなのですが
以前の設定=ロスト直前の設定に簡単に戻すことは出来ませんか?
0472デフォルトの名無しさん
2008/03/12(水) 22:40:36SetRenderStateでD3DRS_DITHERENABLEにTRUE設定とはまた別なんでしょうか?
どうもかかってないみたいなんですが・・・
0473デフォルトの名無しさん
2008/03/12(水) 23:53:13SetTextureStageState
0474デフォルトの名無しさん
2008/03/13(木) 00:11:35RenderStateの設定部分だけを関数にでもしておけばいい。
>>472
D3DRS_DITHERENABLEは補間をディザ法で行うという設定。
TRUEにしたら、ザラザラの画像になるだけ。
今時のビデオカードが対応してるかは分からんが。
0475デフォルトの名無しさん
2008/03/13(木) 00:25:14それらしいのが見つからないんですが・・・?
0476デフォルトの名無しさん
2008/03/13(木) 00:38:01無理
全部覚えておくのが定石らしい
けど俺はデバイス作り直してルーチンもう一回通しなおして再設定しなおしてるw
でもこれバグり安いからどうせ1から作ってるなら絶対辞めたほうがいいw
0477デフォルトの名無しさん
2008/03/13(木) 00:43:290478デフォルトの名無しさん
2008/03/13(木) 00:50:22普通(?)に描画するときと
フォグかけたときとαかける必要があるときと
その他色々変化するときと
1つのモデルが描画方法によって色々必要な情報変わるときって
シェーダまわりどうしてる?
0479デフォルトの名無しさん
2008/03/13(木) 04:20:120480デフォルトの名無しさん
2008/03/13(木) 06:14:540481デフォルトの名無しさん
2008/03/13(木) 07:32:19やったこと無い人はわからないだろうね
0482デフォルトの名無しさん
2008/03/13(木) 14:03:47くくりが大きすぎるんだよw
「ゲームってどうやってつくるの?」と同レベルの質問だぞw
0483デフォルトの名無しさん
2008/03/13(木) 16:28:57何かしら
「これから描画するメッシュは、全て50%半透明にする」
ための命令はないものでしょうか?
2D系でありがちな graphics->setAlpha(128); みたいな命令に相当するものです。
0484デフォルトの名無しさん
2008/03/13(木) 16:39:440485デフォルトの名無しさん
2008/03/13(木) 17:04:12逆に言うとシェーダが出現する前(DirectX7の頃)はどうやってたんでしょうね。
0486デフォルトの名無しさん
2008/03/13(木) 19:30:22で検索すれば腐るほどでてくるだろ・・・
0487デフォルトの名無しさん
2008/03/13(木) 20:22:29俺にもパッと見日本語が不自由な人にしか見えん・・・
やりたいことがよくわからんが
それぞれをテクニックにまとめといて
切り替えるだけじゃだめなのか?
0488デフォルトの名無しさん
2008/03/13(木) 21:42:17まずこんな処理自体普通のエンジンにはありえないだろ・・・。
一括で全部半透明とかやりたきゃ別のバッファに書いてそれを半透明で書け。
0489デフォルトの名無しさん
2008/03/13(木) 21:57:40すごく重くすると60fpsを下回ります。
どうもディスプレイのリフレッシュレートに合わせているようなので、D3DPRESENT_PARAMETERSを
いろいろいじってみましたが、改善されませんでした。
どのようにすればフレーム描画後、すぐに次のフレームを描画しにいくようにできるでしょうか?
0490デフォルトの名無しさん
2008/03/13(木) 22:04:19ここに書いたのはあくまで独り言で、他人の協力などいるか馬鹿野郎という主張だよね?
0491489
2008/03/13(木) 22:16:26PresentationIntervaメンバ変数をD3DPRESENT_INTERVAL_IMMEDIATEにする
でできてました。
試したときはちょうど60fps付近になったので、変わってないと思ってしまいました。
(解像度を下げてFPSが大きくなるのを確認しました)
失礼しました!
0492デフォルトの名無しさん
2008/03/13(木) 23:17:53想像力たんねーな
そんだけだったら疑問がでるわけねーだろ
αかけながらフォグかかってるとかよ
α+フォグが入ったシェーダ作んなきゃならねーじゃん
こうやって変化つけないでシェーダ作り続けると
ノーマル+フォグ
ノーマル+フォグ無し
α+フォグ
α+フォグ無し
ちょっと点滅したい+フォグ
ちょっと点滅したい+フォグ無し
メタルっぽくしたい+フォグ
メタルっぽくしたい+フォグ無し
屈折したい
反射したい
ライト2個
ライト3個
・
・
・
ってちょっとしたもん表示するのにすげー数のシェーダができるじゃねぇか
みんなどうしてんだマジで
0493デフォルトの名無しさん
2008/03/13(木) 23:18:51ありえなくはないっしょ
別バッファ用意するよりは一括α指定の方がはるかに高速だし
0494デフォルトの名無しさん
2008/03/13(木) 23:20:53何さまですかあなた?
想像力が足りないから、自分の質問が他人に理解不能な事もわからないんですよw
0495デフォルトの名無しさん
2008/03/13(木) 23:39:28こういう話が聞きたいの?
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=53&vew=18
0496デフォルトの名無しさん
2008/03/13(木) 23:51:441パス目:Zバッファのみレンダリング
2パス目:ライト系のみレンダリング
3パス目:スキン系のみレンダリング
俺は、こんな感じに各シェーダをカテゴリに分けて
マルチパスでレンダリングしてるよ。
そうすれば、ピクセルライト、頂点ライト、反射、屈折などそれぞれ専用のShader1つで済む。
半透明に対応するには、それぞれのステージにグローバルなパラメータとして追加するしかないかな。
フォグは4パス目として追加でいけるか。
まあ俺の環境はShader2.0しか動かないんで、こうするしかないのが正直なところだが。
0497デフォルトの名無しさん
2008/03/14(金) 00:30:23そんなこときいてねーよとか言い出しそうだがね
0498デフォルトの名無しさん
2008/03/14(金) 01:14:38まとめて描画する場合と比べてかなり遅くね?
シェーダのコピペで済むならやったほうがよくね?
0499デフォルトの名無しさん
2008/03/14(金) 01:26:37Seleneとかいうライブラリは同じシェーダー数の問題で
すべてのパターンのシェーダーを用意してた。
0500デフォルトの名無しさん
2008/03/14(金) 01:31:270501485
2008/03/14(金) 10:17:48例えば村人のモデルを、Xファイルから読み込んだとします。
10人描画するにはXファイル管理クラスのDrawを呼ぶだけですからは非常に楽なのですが、
とあるアイテムを使うと「全ての村人が透けて見える」ゲームになるとします。
そうなると、私の知識では「村人データの全てのマテリアルのα値を、半減させてから描画」という(そこそこ)手間のかかることをやることになります。
IDirect3DDeviceなりに設定として「これから描くポリゴンは全て、”本来のマテリアルのα値×設定したα値”で描画しろ」
とやることはできないのでしょうか?
0502デフォルトの名無しさん
2008/03/14(金) 10:29:44だからそれはAPIに対して求めることじゃないだろ・・・。
そうしたいのであればそうなるように自分でエンジンを組め。
0503デフォルトの名無しさん
2008/03/14(金) 10:29:48普段は
SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
半透明にするとき
SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
Xファイルじゃなくてただのプリミティブでこれやったことがあります。。。
0504デフォルトの名無しさん
2008/03/14(金) 10:33:11いや、無いなら無いでよかったんです。
そこそこ使いそうなので、何か効率的な方法が(ネイティブで)用意されてたら嬉しいなと思った程度でして。
ゲームだと、無敵になったら半透明とか、キャラに近寄りすぎたら(視界を妨げないように)半透明とか
昔からそこそこ需要がありそうだったので、IDirect3DDevice自体にそんな機能があっても不思議じゃないなぁと思いまして。
(そもそも、マテリアルの値を書き換えると戻すのが面倒)
>>503
面白いアイデアですね
(当然状況限定ですが)とてもスマート
とりあえず、今ならシェーダの切り替えで上手くいくようですし、シェーダ勉強しながら頑張ります
0505デフォルトの名無しさん
2008/03/14(金) 10:34:04>>502 APIに求めても罰当たらないレベルだと思うが
0506デフォルトの名無しさん
2008/03/14(金) 10:42:380507デフォルトの名無しさん
2008/03/14(金) 10:45:15んで、その唯一のテクスチャーを切り替えて、α値にしてみたらどうだ?
当然乗算設定でARGB(任意, 255, 255, 255)にしておく。
0508デフォルトの名無しさん
2008/03/14(金) 13:46:22っていうか、今なら頂点シェーダで処理するのが普通だと思うが。
0509デフォルトの名無しさん
2008/03/14(金) 14:12:46便利だなこれ
0510デフォルトの名無しさん
2008/03/14(金) 14:16:270511デフォルトの名無しさん
2008/03/14(金) 15:19:54実際使える数はステージ数は、グラボによって減るとのこと
いままでは1ステージしか使っていなかったのですがそろそろ2ステージくらいは使いたいところ
現状「5年前のPCでもXステージくらいは対応してるだろ…JK…」って下限のステージ数はいくつくらいでしょうか?
1つもなければテクスチャを張れないので、1ステージもないグラボってのはないとは思いますが…。
0512デフォルトの名無しさん
2008/03/14(金) 15:25:49自己解決しました。
探していたら
ttp://www.netsphere.jp/dxinfo/query.asp?source=gr_90_caps
というページを発見しました。
ステージは3.テクスチャは2というのが「相当古いものでも安心」な数のようですね。
0513デフォルトの名無しさん
2008/03/14(金) 21:52:400514デフォルトの名無しさん
2008/03/14(金) 22:36:23D3DRS_BLENDFACTORの方が
TFACTOR類を使うよりは、君の希望する形に近いと思う。
>>498
最初はそれにしてた。フラグメントシェーダも試してみたりした。
でも如何せん制限がきつすぎて断念した。
それに対しマルチパスは制限が少ない。
例えば、ライト数に上限がないし。
それにマルチパスって、そんなに重くないと思うんだよな。
毎度毎度無駄な頂点トランスフォームが発生するが、
そこはボトルネックじゃないと思うし。まあ想像だけど。
0515デフォルトの名無しさん
2008/03/14(金) 22:46:150516デフォルトの名無しさん
2008/03/14(金) 22:47:410517デフォルトの名無しさん
2008/03/14(金) 22:56:240518デフォルトの名無しさん
2008/03/14(金) 23:54:43首が痛くなったw
0519デフォルトの名無しさん
2008/03/14(金) 23:59:110520デフォルトの名無しさん
2008/03/15(土) 02:29:43DrawPrimitive呼びまくるの?
0521デフォルトの名無しさん
2008/03/15(土) 03:26:040522デフォルトの名無しさん
2008/03/15(土) 03:41:28http://jp.youtube.com/watch?v=XAKroNeQhf0
これがほしいってなんではっきり言えないの?
0523デフォルトの名無しさん
2008/03/15(土) 05:58:380524デフォルトの名無しさん
2008/03/15(土) 09:24:22ぶち殺すぞヒューマン(`・ω・´) シャキーン
0525デフォルトの名無しさん
2008/03/16(日) 01:45:09vertices[] ={{ 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変換はしてません。
0526525
2008/03/16(日) 01:54:00なかったことで。
0527525
2008/03/16(日) 02:01:16長方形を作ってるつもりが、斜めった四角を作ってました。
0528デフォルトの名無しさん
2008/03/16(日) 02:03:23まずは(0,0,0)でうまくいくことを確認しろよw
いるよなw
「〜だから〜なはず」とか偉そうに言っててそうならない
調べてみたら結局ただの設定間違いしてるのw
まず、はじめにやることってあるじゃない?
って嫌味の一つでも言われないと人は学習すらしない
オレモナー・・・orz
0529デフォルトの名無しさん
2008/03/16(日) 02:49:450530デフォルトの名無しさん
2008/03/16(日) 17:04:35どっかで聞いたんだがぐぐってもでてこないし勘違いだったかなぁと悩んでる
0531デフォルトの名無しさん
2008/03/16(日) 17:14:57法線を正規化する必要があるのならやるべきというだけだが
高速化と称して正規化をサボって問題が出て何か喚いていた阿呆がいたのだろう。
0532デフォルトの名無しさん
2008/03/16(日) 17:28:40内部システムエラーが発生しました
Windowsフォルダ内にあるDXError.logとDirectX.logを参照し原因を分析してください
とでるんですが、具体的に何をすればいいんでしょうか?
0533デフォルトの名無しさん
2008/03/16(日) 17:30:500534デフォルトの名無しさん
2008/03/16(日) 18:29:400535デフォルトの名無しさん
2008/03/16(日) 19:04:12�d
思い出した、そうだこれだわ
「負荷かかるならいいや〜」ってことでメッシュの極端な拡大縮小はしないようにすることにしてたの忘れてた
0536デフォルトの名無しさん
2008/03/17(月) 22:24:57左右対称のパーツで、それぞれの頂点が持つUV座標も対称的に同じです。
法線マップにより凹になるようにシェーダ処理をしたところ、片方はちゃんと凹に、もう一方は凸に
なってしまいます。
どうすれば解消できるでしょうか??
モデル作成にはメタセコイアを使いました。
法線マップは白黒で高低を表した高さマップをD3DXComputeNormalMap関数に与えて作成しています。
ご助言、よろしくお願いします。
0537デフォルトの名無しさん
2008/03/18(火) 19:43:310538デフォルトの名無しさん
2008/03/18(火) 22:36:26日本語でおkとしか言いようがない
0539デフォルトの名無しさん
2008/03/19(水) 00:03:06そのモデルのタンジェントスペースの行列式を求め
値が0以下なら法線に-1を掛ける
0540デフォルトの名無しさん
2008/03/19(水) 00:46:19それともpeekmesseageとかでループさせますか?
ゲーム内のオブジェクトとかどうやって管理しますか?
クラスをvectorに叩き込んで適当に追加したり削除したりでいいんですか?
ネタじゃないです
マジレスお願いします
0541デフォルトの名無しさん
2008/03/19(水) 00:47:590542デフォルトの名無しさん
2008/03/19(水) 00:51:18人それぞれ設計それぞれ好みそれぞれ
0543デフォルトの名無しさん
2008/03/19(水) 18:29:40現在Xファイルの読み込みや表示などをやっています。
階層メッシュの表示。
Xファイルスキンアニメーションの表示
などはとりあえずできたのですが、この段階でXファイルについて疑問がわきました。
Xファイルは1マテリアルに複数のテクスチャーをもてないのでしょうか?
D3DXMATERIALを見てもテクスチャ名は1つしか入れるスペースがありませんし…。
バンプマッピングや、2枚以上のテクスチャーを張る表現などを、ツール側で設定済みにしてXファイルに吐き出したい(そして読みたい)のですが。
Xファイルの読み込みには
D3DXLoadMeshHierarchyFromX
などのDXUのヘルパ関数を使っています。
Xファイルは自由に拡張が可能なのはおいておいて、(LightWaveなどから普通に吐き出せる)一般的なフォーマットでの話です。
0544デフォルトの名無しさん
2008/03/19(水) 19:06:410545デフォルトの名無しさん
2008/03/19(水) 21:20:58解像度に合わせてウィンドウを拡大縮小したいって事?
0546536
2008/03/19(水) 22:46:42ありがとうございます。
しかし、その方法でうまくいきませんでした。
いろいろいじっていると、
(接ベクトル)
(従法線ベクトル)
(法線ベクトル)
と並べて作っている頂点座標系変換行列のうち、
従法線ベクトルに-1をかけると凸凹が逆になることが分かりました。
このことをヒントにもう少し探ってみたいと思います。
教えていただいた、行列式の判別の意味を理解したいのですが、
その理論を知るのによい本やサイト、あるいは学術分野名など、
ご存知でしたら教えていただきたいです。
行列式は機械的な求め方を学んだことがあるだけで、それを
こういった判別処理にうまく利用するということに興味があります。
よろしくお願いします。
0547デフォルトの名無しさん
2008/03/19(水) 23:29:59読み込んだXファイルを操作するにはどうすればいいのでしょうか?
(回転や移動ではなく、たとえば腕を動かすようなモーション的なものです)
0548デフォルトの名無しさん
2008/03/19(水) 23:46:24その前に使い方について質問
お前、XFileなんて可逆変換できると思ってんの?
多分一発XFileにした時点でそのモデルデータはもうゲーム専用なわけよ
つまり、モデリングソフトのフォーマットからXFileには一方通行なわけ
正直、XFileってのは扱いにくい
古いフォーマットだから色々足りないしね
なので必要なデータだけもぎ取ったらXFileは捨ててしまって
取得したデータを自作フォーマットに変換して使ったらどうか?と思うんだがどうだろうか?
0549デフォルトの名無しさん
2008/03/19(水) 23:47:13スキンメッシュのサンプルをみろ
0550デフォルトの名無しさん
2008/03/19(水) 23:52:16最近のDirectX SDKを見ろよ。
Microsoft自身がXファイルの拡張なんか使わず、違うフォーマットを使ってるじゃないか
0551デフォルトの名無しさん
2008/03/20(木) 00:00:420552デフォルトの名無しさん
2008/03/20(木) 00:21:240553デフォルトの名無しさん
2008/03/20(木) 00:34:000554デフォルトの名無しさん
2008/03/20(木) 00:34:51アドバイスありがとうございます。
プログラム内で独自フォーマットに変換してしまうのは、難しくありませんし、有効だと思います。
ですがその前に「Xファイルは1マテリアルに複数のテクスチャーデータを持たせて出力できるのか」が問題です。
もしできないのであれば、Xファイルを使う価値は少ないので、別のフォーマットを使うことになるでしょう。
0555デフォルトの名無しさん
2008/03/20(木) 00:46:46フォーマットそのものを自作します。
方法は自分で考えましょう。
0556デフォルトの名無しさん
2008/03/20(木) 01:09:56ただのファイル名、文字列なんだからXファイルフォーマット拡張しないで
で複数のテクスチャ渡したいなら適当に二つの文字列渡してプログラム側で
分割すれば良いんじゃね?
hoge.dds:bump.dds
じゃいかんのん?
0557デフォルトの名無しさん
2008/03/20(木) 01:26:270558デフォルトの名無しさん
2008/03/20(木) 01:44:21いや、その問題もズレてるでしょ?
君がターゲットにしているソフトがXFileに対応してるかどうか?が問題じゃない?
俺の経験だとXFileにも方言があって、そのすべてに対応しているローダなんてみたことない
たとえXFileのリファレンスに忠実であっても自分のターゲットのソフトが対応してなきゃなんの意味もない
そこを踏まえてXFileのどの方言に対応してどう扱いたいのか?ってのを
まず作る前に決めたほうがいい
一番いいのはXFileから必要なデータだけとってしまって
自作のフォーマットにして保存してしまうのが一番楽だ
0559デフォルトの名無しさん
2008/03/20(木) 02:11:18ここだけ知ってる人間が答えてあげればいいだけのハナシじゃないの
残念ながら俺は答えられないけど、
0560デフォルトの名無しさん
2008/03/20(木) 02:44:440561デフォルトの名無しさん
2008/03/20(木) 02:52:24マルチテクスチャが流行りだした頃からのFAQだけど不可能。
無理矢理拡張フォーマットを持たせて格納することも不可能じゃないけど
世のXファイル描画ライブラリはそんなのを面倒見てくれないしなぁ。
それでもやる意義があると思うならがんばって。
0562デフォルトの名無しさん
2008/03/20(木) 08:32:53なるほど、残念です。
他のもっと汎用的な形式に乗り換えることを検討します。
>>560
おもしろいアイデアですね。
でも結局のところ「1枚目のテクスチャのUVと、2枚目のテクスチャのUV」が別個に必要ですから、
Xファイルが(基本的に)サポートしてないと意味が薄いんですよね
0563デフォルトの名無しさん
2008/03/20(木) 11:23:46タンジェントスペースの作り方にもよるが、
普通、反転する可能性のある軸は従法線だった。
なのでその方法が正しいです。つーか俺のライブラリもそうなってたw
行列式の使用方法は、俺は、
ゲームプログラミングのための3Dグラフィックス数学という本で学んだ。
ここでも何度も紹介されているし、俺もお勧めです。
Gemsまではいらないと思うが、こいつは3Dプログラマ必読と思う。
0565デフォルトの名無しさん
2008/03/20(木) 15:33:050566デフォルトの名無しさん
2008/03/20(木) 15:37:05前者の方が圧倒的に速い
0567デフォルトの名無しさん
2008/03/20(木) 15:53:561000頂点を一回描画する間に次の1000頂点の移動を計算させておいた方がよくないですか?
0568デフォルトの名無しさん
2008/03/20(木) 15:56:58並列処理した方が速いかどうかは移動に使う計算量によるだろっていうか自分で計測しろよ
0569デフォルトの名無しさん
2008/03/20(木) 16:00:310570デフォルトの名無しさん
2008/03/20(木) 16:24:05>>565の状況だと頂点演算の処理やピクセル演算の処理は当然どっちも同じなんだが
DrawPrimitiveUP自体と其れに伴うステートの変更が相当重い処理になるのでCPUで差が出る。
0571デフォルトの名無しさん
2008/03/20(木) 17:00:12分割したほうが大抵いい結果になる
どうしても画面にすべて表示されてしまう場合のみまとめて描画が役に立つかも
2Dゲーのマップチップとか弾幕STGなんかを作るときに出る問題
0572デフォルトの名無しさん
2008/03/20(木) 17:06:04ロボットものをパーツ1個1個をモデルにするよりも
1モデルにしてボーンで動かす方が軽かったりする。
0573デフォルトの名無しさん
2008/03/20(木) 17:14:55ID3DXEffect#SetTexture
を使うしかないのでしょうか?
単に
IDirect3DDevice9#SetTexture
で設定されているテクスチャーを使いたいのです。
0574デフォルトの名無しさん
2008/03/20(木) 17:16:58HLSLでPixelShaderを書いているのですが〜です。
固定のシェーダだとIDirect3DDevice9#SetTextureで情報を渡しているわけなので、気になりまして。
内部でm_pKoteiShader->SetTexture を呼び出しているのかもしれませんが。
0575デフォルトの名無しさん
2008/03/20(木) 17:31:460576デフォルトの名無しさん
2008/03/20(木) 18:09:42ありがとうございます。
どうやらsampler_stateの中の
Texture = <名前>;
を省略すれば固定機能のテクスチャを見てくれるようなのですが、これですと
SetTexture(0, 略); のものしか拾えそうにありません。
正しく(0以外のものも)拾うにはどうしたらいいのでしょうか?
MSDNあたりも調べてみたのですが見つけられませんでした。
(省略すれば〜というのもなんとかんく閃いただけです)
0577デフォルトの名無しさん
2008/03/20(木) 18:12:54sampler Sampler1 : register( s1 );
これの欠点は固定機能で対応していないとダメなこと。
つまり固定機能的には8ステージまでしかなかったら
いくらシェーダーで16枚対応していて8までしか有効にならない。
0578デフォルトの名無しさん
2008/03/20(木) 18:29:27s0 とはHLSLではない、それ以前のシェーダアセンブラにおけるレジスタ値ですね。
sampler register の複合で検索をかけたら、いろいろでてきました。
これで「PixelShader未対応環境」での動作の統一(統一といって、省略になるものが多いでしょうが)が楽になりそうです
0579デフォルトの名無しさん
2008/03/20(木) 18:36:24横槍で質問していいかな
sampler SampNormal : register( s1 ) = samper_state
{
AddressU = Wrap;
AddressV = Wrap;
};
こんな感じで、固定シェーダのものを真似しつつも一部だけ変える。みたいなことできないかな?
0580デフォルトの名無しさん
2008/03/20(木) 18:47:07俺はこれしか知らんなぁ
他にスマートな方法があったら誰か教えて
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();
}
}
0581デフォルトの名無しさん
2008/03/20(木) 20:37:49俺は2Dも3DもDrawIndexedPrimitiveでまとめてやってるけど
0582デフォルトの名無しさん
2008/03/20(木) 20:40:40なるべく古いバージョンのVSやPSを使ったほうがいいですよね?
でも、バンプマッピングをやったところどうしてもPS2.0が必要になってしまいました。
PS2.0ってどの程度普及してるもんでしょう?
対応グラボ一覧などを見ても「一般的なライトユーザーは、で、結局どのあたりのグラボを持ってるんだろう?」
となってしまって基準を決めかねてます
みなさん自分でシェーダを利用したプログラムを書くとき
どの程度のバージョンで決め打ちしてますか?
0583デフォルトの名無しさん
2008/03/20(木) 20:49:09PSはまだまだ使えん
メーカー製のPCだとPS非対応が多い
0584デフォルトの名無しさん
2008/03/20(木) 20:49:57固定機能のみ、2.0対応、3.0対応でそれぞれシェーダーを用意する。
そのへん勝手にやってくれるライブラリもフリーであるし。
3DゲームならDirectX10対応もしておきたいところだと思う。
ライブラリ部分なんて1回作っちゃえばあとは使いまわしだし。
0585デフォルトの名無しさん
2008/03/20(木) 21:40:41つまり可愛いトゥーンレンダリング&輪郭線って、PSないと不可能だよな?
PS未対応はかなりきついぜ
0586デフォルトの名無しさん
2008/03/20(木) 21:48:47パフォーマンスはおそらくシェーダを使った時より劣るだろうけど
0587デフォルトの名無しさん
2008/03/20(木) 22:39:070588デフォルトの名無しさん
2008/03/20(木) 23:31:44http://pc11.2ch.net/test/read.cgi/tech/1205912209/
0589デフォルトの名無しさん
2008/03/20(木) 23:32:21そういえば、輪郭線は「キャラをほんのちょっと太らせて、ポリゴンの表裏を逆転。さらに輪郭線色に塗ったもの」
を用意して、キャラに重ねておけばできたなw
トゥーンは何か方法あったっけ?
ライトとの角度をUVに変換する方法は、固定機能には無かったと思う
0590デフォルトの名無しさん
2008/03/20(木) 23:44:57ある
0591デフォルトの名無しさん
2008/03/21(金) 00:18:45せっかくだから、良かったら教えてくれ
プログラマブルシェーダで今やっちまってるけど、古い技術にも興味ありまくり
0592デフォルトの名無しさん
2008/03/21(金) 00:24:40ttp://www.twin-tail.jp/contents/vsdx8/d3d/010/index.htm
0593デフォルトの名無しさん
2008/03/21(金) 00:58:519とは別物なの?
0594デフォルトの名無しさん
2008/03/21(金) 01:01:260595デフォルトの名無しさん
2008/03/21(金) 02:21:550596デフォルトの名無しさん
2008/03/21(金) 03:09:260597デフォルトの名無しさん
2008/03/21(金) 03:32:070598デフォルトの名無しさん
2008/03/21(金) 04:20:59開発者のオナニーだよな
誰もいいと思ってねぇよなアレ
0599デフォルトの名無しさん
2008/03/21(金) 11:03:08汚いというか違和感が強い
0600デフォルトの名無しさん
2008/03/21(金) 13:02:25ttp://www.watch.impress.co.jp/game/docs/20080303/dbz.htm
0601デフォルトの名無しさん
2008/03/21(金) 13:12:57にしてもドラゴンボールって今でも新規獲得できんのかね?
0602デフォルトの名無しさん
2008/03/21(金) 14:03:50コンパイルすれば動かせる状態のソースと解説つきなものが理想なんですが、そういうサイトって大抵DX8世代で困っています。
0603デフォルトの名無しさん
2008/03/21(金) 14:55:23ああ、俺もつい先週、まったく同じ境遇だったw
スキニングだけ見たいのに、シェーダだのなんだの邪魔なものが多いんだよなw(当時シェーダ使ったことなかったから混乱しまくった)
あのソース、
・CAllocateHierarchyを別のh/cppに持ってく
・m_SkinningMethodでの分岐をやめて、継承関係で分岐させるようにする(動的に描画方法をチェンジはできなくなるけどね)
とやると、恐ろしく短いソースになる。
その後は解説もいらないくらいわかりやすいから、やってみ。
0604デフォルトの名無しさん
2008/03/21(金) 15:11:47VSを使って「カメラ方向から垂直に近い角度を向いてしまっているポリゴンを黒くすることで実装しようとしました
ttp://tpot.jpn.ph/t-pot/program/22_toon2/index.html
ですが、ハイポリだと綺麗にでるのですが、ローポリだとさっぱりです。
考えてみれば唐突に折れて裏にまわってしまっている場合、黒く塗れるポリゴンがないまま見えなくなってしまいます。
別のアプローチ方法としてはどのようなものが考えられるのでしょうか?
0605デフォルトの名無しさん
2008/03/21(金) 15:31:52そもそもDrawPrimitiveUPで一回で描画できる頂点の上限が
10万を超えているハードって普通にあるのかなぁ。
俺がいままで扱ったことあるGPUって高々10程度なので
あてになる情報ではないけど、少なくともこの経験の範囲では
65000ぐらい以上の頂点を描画させようとするとDrawPrimitiveUPが
失敗して描画しなかったような気がする。
0606デフォルトの名無しさん
2008/03/21(金) 15:42:090607デフォルトの名無しさん
2008/03/21(金) 15:44:320608デフォルトの名無しさん
2008/03/21(金) 16:05:08カメラからの深度差を使えば、確かにくっきりでそうですね。
質問した後も色々調べてみたのですが
・輝度差
・カメラからの深度
・法線
・マテリアルIDの相違
といった色々な方法があって、決定版というのはないようですね。
そんな中、これは(処理は遅そうですが)かなり面白いなと思いました
ttp://www.twin-tail.jp/contents/vsdx8/d3d/011/index.htm
0609デフォルトの名無しさん
2008/03/21(金) 16:07:450610デフォルトの名無しさん
2008/03/21(金) 16:54:28一番簡単なのが、面を裏返しにして、法線方向に膨らませて描画。
ただし、メッシュに不連続な部分(隣接する面で法線が共有されていない)があると駄目。
あとは法線と深度をテクスチャに描画して、輪郭抽出フィルタを使うという方法もある。
0611デフォルトの名無しさん
2008/03/21(金) 16:55:48>65000ぐらい以上の頂点を描画させようとするとDrawPrimitiveUPが
>失敗して描画しなかったような気がする。
あー、なんか俺も昔そんな覚えあんな
巨大マップを一つのモデルで描画しようとしたときにそうなったw
無駄だったから分割したけどw
そこでオクツリーってキーワードを知った勉強になったと思う
0612デフォルトの名無しさん
2008/03/21(金) 17:38:55ってやつを9.0でやりたいんですけど、どれがそれに当たるんでしょう?
それともこれは廃止されて別のインターフェイスに同等のものがあるんでしょうか?
0613デフォルトの名無しさん
2008/03/21(金) 17:55:14FBXは一応やってはいるのですが、モデルの描画まではFBXSDK見ながらやったのですが
スキニングアニメに必須なボーン関係で苦戦中
有名どころのこのサイトでも同じような場所で更新とまってるし…
ttp://marupeke296.com/FBX_main.html
そもそも情報がSDK以外に少ない
サイトでも本でも良いので、モデルデータの読み込みの情報がある程度で揃ってる形式ないでしょうか。
0614デフォルトの名無しさん
2008/03/21(金) 17:57:36Xファイル+マルチテクスチャーくらいでとりあえずゲームつくりには使えるかなと思ってます
0615デフォルトの名無しさん
2008/03/21(金) 18:07:55IDirect3DDevice9::SetRenderStateは普通にあるけど?
0616デフォルトの名無しさん
2008/03/21(金) 18:21:04D3DERR_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しています。
なんで失敗してしまうのでしょうか?
0617612
2008/03/21(金) 18:48:38間違えた・・・
device->SetRenderState(D3DRS_COLORKEYENABLE,TRUE);
です。カラーキー
0618デフォルトの名無しさん
2008/03/21(金) 18:55:53hDeviceWindow が NULL のようだけどそれでいいの?
0619デフォルトの名無しさん
2008/03/21(金) 19:00:19カラーキーはDirect3Dには無い。
代わりにαブレンド(またはαテスト)を使う。
抜きたい部分と抜きたくない部分でα値を0.0/1.0に設定しておく。
D3DXCreateTextureFromFileExにはカラーキーを与えれば勝手に
α値を設定してくれる機能があるからそれを使えば簡単。
0621612
2008/03/21(金) 20:22:09ところで半透明を使う時ってレンダリングの順をうまくこちらで調整するしかないんでしょうか?
0622デフォルトの名無しさん
2008/03/21(金) 20:43:06するしかない
0623デフォルトの名無しさん
2008/03/21(金) 21:19:01安心しろ
そんなもの気にならなくなるぐらい描画順に関しては弄り倒すハメになるからw
0624612
2008/03/21(金) 21:40:54アリガトウゴザイマス
ゲームで使うポリゴンモデルってメッシュで表示するの?よく動く場合はPrimitiveとかですか?
0625デフォルトの名無しさん
2008/03/21(金) 22:47:53ただ、メッシュ読み込もうにも色々ファイルに種類があってな・・・
どれを使ったものやら
教科書的にはXファイルでいいんだが、ゲーム作るとなると・・・
0626デフォルトの名無しさん
2008/03/21(金) 23:04:21SDKがあるとはいえ、まだまだ情報足りん…
0627612
2008/03/21(金) 23:58:39モデルの読み込みって自前で処理するしかないんでしょうか?(コピペも含めて)
メッシュってことは表示する時はSubSet()呼ぶ手な感じになるのかな・・・
0628デフォルトの名無しさん
2008/03/22(土) 00:35:14無駄が多くなりがちなのでウンコとしか言いようがない
0629デフォルトの名無しさん
2008/03/22(土) 01:24:25なんかいつの間にかfopenとfreadでテキストファイル読み込んだら
最後に
ォォォォォォォォ・・
とか付くようになってんだけどなんで?
VC++2008Exp OS:VISTA
ただ、バグってるだけかな?w
それともなんか変更あった?w
0630デフォルトの名無しさん
2008/03/22(土) 01:30:230631デフォルトの名無しさん
2008/03/22(土) 01:32:51読み込んだサイズでメモリ確保するときに
+1するの忘れてただけw
会社のお便利ライブラリに毒され過ぎたw
0632デフォルトの名無しさん
2008/03/22(土) 01:35:110633デフォルトの名無しさん
2008/03/22(土) 01:48:110634デフォルトの名無しさん
2008/03/22(土) 01:50:04文字コードが SJIS じゃないんじゃない?
0635デフォルトの名無しさん
2008/03/22(土) 01:50:300636デフォルトの名無しさん
2008/03/22(土) 02:20:460637デフォルトの名無しさん
2008/03/22(土) 02:30:080638デフォルトの名無しさん
2008/03/22(土) 02:33:030639デフォルトの名無しさん
2008/03/22(土) 03:39:21変更しないものは最初に一度やるだけでいいのか、
それとも描画のたびに呼んだ方がいいんでしょうか?
0640デフォルトの名無しさん
2008/03/22(土) 07:29:340641デフォルトの名無しさん
2008/03/22(土) 10:46:47多分、DrawPrimitiveが実行されるまでステートの変更なんてグラボにアクセスしないだろうし
ちゃんと設定したいステータスが設定できるように組め
0642デフォルトの名無しさん
2008/03/22(土) 11:33:18具体的には、単純な表示、トランスフォーム(固定で出来る単純なブレンドも含む)辺りなんですが
0643デフォルトの名無しさん
2008/03/22(土) 12:22:520644デフォルトの名無しさん
2008/03/22(土) 13:19:29非搭載になったのって、GeForce6xxxぐらい?
0645デフォルトの名無しさん
2008/03/22(土) 15:10:28何度か呼んだ程度で重くなったりするようなものでもないからじゃんじゃん使ってOK
0647デフォルトの名無しさん
2008/03/22(土) 17:47:050649デフォルトの名無しさん
2008/03/22(土) 19:34:12エロゲキャプったJPGだと読み込んでくれなかったぜ
0650デフォルトの名無しさん
2008/03/22(土) 20:35:250651デフォルトの名無しさん
2008/03/22(土) 20:36:252の乗数で、縦横が同じ大きさの画像なら大体問題なさそうだな!
0652デフォルトの名無しさん
2008/03/22(土) 20:48:36そこらへんの制約は色々複雑なのでD3DCAPSをちゃんと調べれ
0653デフォルトの名無しさん
2008/03/22(土) 21:04:49必死に滲まない方法とか最大サイズをスレに聞きに来てた初心者に悪いことしたと思った
たしかに面倒だ
ものによってフィルタOFFにできない(これはあきらめるしかない)とか、
そんときのuvとか面倒だなーと思った
0.5ずらしとかやるよりもとりあえずクランプにしておいて
色々とあきらめるのが最善の方法だな
ただ、マップチップ構成でフィルタOFFにできないってのは
結構悲惨な絵になるなw(ま、どうしようもねぇけどw)
0654デフォルトの名無しさん
2008/03/23(日) 00:35:07バンプができてるようなので、できなくはないのでは・・?と思っているのですが
0655デフォルトの名無しさん
2008/03/23(日) 00:43:160656デフォルトの名無しさん
2008/03/23(日) 00:49:31なくはないがクオリティを気にしないのが前提条件
0657デフォルトの名無しさん
2008/03/23(日) 00:55:390658デフォルトの名無しさん
2008/03/23(日) 10:49:26何のエフェクトもかけていないのに変にエコーがかかったような音が出る。
どうにもらちがあかないのでここに来たけど、
なんか時間が短い単純なwavファイル再生ならDirectSoundがよさそうだね。
そんで質問ですけど、どっかにDirectSoundのいいサンプルないですか?
SDKのサンプル見たけど、なんかいろんなことをやってて難しそう。(それが標準なのかもしれないけど)
0659デフォルトの名無しさん
2008/03/23(日) 11:07:17最新のSDKにはXAudio2っていうよりシンプルなオーディオAPIがあるからそっちもどうぞ。
0660デフォルトの名無しさん
2008/03/23(日) 12:57:43固定シェーダ(これの呼び方まちまちすぎ)のノーマルマップについて
あるということでしたので調べているのですが、さっぱりひっかかりません
どなたかよさげなページか、SDKの対応するサンプルなりを教えていただけませんでしょうか
0661デフォルトの名無しさん
2008/03/23(日) 13:02:27DirectX7のコロのSDKにはサンプルがあったと思う。
ただ固定機能でも対応しているのってNVIDIAのGeForceととATIのRadeonだけだったはずだが。
「固定機能=全機能保障」と思ってるなら大間違いだぜ。
シェーダーのように最低ラインが定められていないから、
テクスチャステージが1つしか使えなくて減算合成が出来なくてもポリゴン1枚出るなら固定機能サポートを謳える。
0662デフォルトの名無しさん
2008/03/23(日) 13:13:09あちゃー、固定機能=最低ライン保証のつもりでした
ゲームを作ってるんですが、どうしてもピクセルシェーダを避けたいなと思いまして。
どうしてもPSが必要なのはバンプ(ノーマル)マップだけなんですよ
他は普通のライティングくらいしか行なっていないので。
んー、PS1.1以上必須って条件はいれたくないなぁ・・
0663デフォルトの名無しさん
2008/03/23(日) 13:19:44PS1.1は正規化が出来ないのでノーマルマップをやるなら2.0からであろう。
そういう場合は素直に2.,0対応なら其れを使い、未対応ならノーマルマップなしで描画するように
ライブラリ部分で自動的に切り替えるのが一番よろしいかと思う。
0664デフォルトの名無しさん
2008/03/23(日) 13:32:44PixelShader = compile ps_1_1 PS_NORMA();
0665デフォルトの名無しさん
2008/03/23(日) 13:33:41え、normalizeって1.1でできないでんですか?
PixelShader = compile ps_1_1 PS_NORMAL();
と1.1コンパイルを指示した上で、
float3 N = normalize(Normal);
とやっても特にエラーでずにきちんと表示されてしまうのですが
0666デフォルトの名無しさん
2008/03/23(日) 13:40:38--------------------------------------------------------------------------------
正規化されたベクトル x / length(x) を返します。x の長さが 0 の場合、結果は無限となります。
構文
ret normalize(x)
ここで
名前 In/Out テンプレートの型 成分の型 サイズ
x in ベクトル float 任意
ret out 入力 x と同じ float 入力 x と同じ次元
最低限必要なシェーダのバージョン
この組み込み関数は、次に示すバージョン以降のシェーダでサポートされています。
頂点シェーダ ピクセル シェーダ
vs_1_1 ps_2_0
0667デフォルトの名無しさん
2008/03/23(日) 13:46:19normalizeはPS1.1で使っておらず、VS1.1で使ってました。
PSですと確かにダメでした。
0668デフォルトの名無しさん
2008/03/23(日) 13:53:32HLSLで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だと全体的に白っぽくなります。
0669デフォルトの名無しさん
2008/03/23(日) 14:01:052.0は16/24/32Bitのfloatで計算されているのでちゃんとした結果になる。
固定は-2.0〜+2.0かもしれん。忘れた。
最近のDirectX9では1.x系は事実上破棄されているのでもHLSLでもコンパイルできん。
0670デフォルトの名無しさん
2008/03/23(日) 14:10:10互換性がないのもなんだかなぁ・・・
0671デフォルトの名無しさん
2008/03/23(日) 14:18:01PSでライト方向をノーマライズする必要がなくなるから2.0より前でもバンプできね?
0672デフォルトの名無しさん
2008/03/23(日) 14:21:24頂点で正規化してもラスタライズで線形補完されるから
PSにきたときには長さが変わってる。
さらに法線マップ自体もドットバイドットなんてフィルタリングありでは不可能なので
どっちもPSで正規化しないと完全に正しいライティングにはならなかったりする。
0673デフォルトの名無しさん
2008/03/23(日) 14:34:36そこまで細かいのやったことないから気づかなかったわ
0674デフォルトの名無しさん
2008/03/23(日) 15:24:12HLSLでVSを書いた場合に受け取れるNORMALについてです
この法線、normalizeせずに普段から使っていて特に問題が起きていないのですが、ノーマライズされているものなのでしょうか?
法線についていま勉強中で、勘違いでなければ拡大を行なえば法泉も変化が起こり
全体的に大きくするほど黒くなってしまうと予想しているのですがそうなりません
pDev->SetRenderState(D3DRS_NORMALIZENORMALS, FALSE);
を設定してあります
法線情報の入りXファイルからメッシュは作成しています
pDev->SetTransform(D3DTS_WORLD, &matWorld);で1.0倍〜100倍にしてみましたが、変化は見られませんでした
0675デフォルトの名無しさん
2008/03/23(日) 17:05:11普通なら法線はデータ的に正規化されているのでそのままシェーダーで使っても
問題にならないがボーンの変形や拡大縮小をした場合に法線が1.0じゃなくなって
ライティングがおかしくなるようなときはnormalizeしたほうがよい。
NVIDIAのGF6からならfp16使っているとnormlize()は1クロックで
終了するので実質まったくペナルティはなかったりする。
0676デフォルトの名無しさん
2008/03/23(日) 17:21:14法線関係って3Dでは絶対学ぶべきもののはずなのに、つっこんで説明してるサイトとかが見当たらないんだよな
0677デフォルトの名無しさん
2008/03/23(日) 17:36:05他にするべきタイミングがあるって事?
0678デフォルトの名無しさん
2008/03/23(日) 17:41:28dot(PolyNormal, LightDirection)するだろ?
この時、それぞれはNormalizeされてなきゃダメなのか?とか
PolyNormal : NORMAL は正規化されてる保証があるのか?とかが曖昧で
0679デフォルトの名無しさん
2008/03/23(日) 17:47:50頂点バッファに入ってるデータが正規化されているなら頂点シェーダーでも正規化されてる。
法線が正規化されてないと困る場合(主にライティング)に正規化する。
キューブマップとかは方向さえあればいいので正規化はいらん。
0680デフォルトの名無しさん
2008/03/23(日) 17:53:10サンクス
ってことは、拡大縮小とかゆがみとかやっても頂点バッファのものがくるわけか・・・
モデルの法線は正規化済み&ライト方向も正規化済みなら、
XYZの倍率が全て同じな拡大・縮小を使ってる限りは、ライティング時も正規化はいらないわけね
0681デフォルトの名無しさん
2008/03/23(日) 18:11:36ライティング処理等で予め正規化されていることを前提に計算が省略されている
場合に正規化しておく必要がある。
ベクトルの内積からcosを求める式のうち、分母の部分は正規化されていれば
必ず1になるから省略できて内積=cosになる。
法線は入力データの段階で正規化されているのが普通なので、この省略された
計算式で実行時の負荷を軽くするのが普通。
0682デフォルトの名無しさん
2008/03/23(日) 18:12:40拡大縮小は頂点シェーダでやるんだから、頂点シェーダの入力は
拡大されてるわけないだろw
0683デフォルトの名無しさん
2008/03/23(日) 18:13:59pDevice->SetMaterialで与えられたアンビエント色やスペキュラー色を
HLSL側で受け取るにはどういうふうに書けばいいのでしょうか?
0684デフォルトの名無しさん
2008/03/23(日) 18:15:010685デフォルトの名無しさん
2008/03/23(日) 18:19:39上の方(>>577あたり)でうまく固定側からテクスチャ情報とかはもってこられるみたいなので
似た感じでいけるかと思ったのですが残念
0686デフォルトの名無しさん
2008/03/23(日) 19:17:46頂点シェーダーではなく固定機能を呼び出すように指定すれば
レンダリングの流れはシェーダーの有無に関係なく一本化できる。
0687デフォルトの名無しさん
2008/03/23(日) 19:25:320688デフォルトの名無しさん
2008/03/23(日) 19:45:35これを描画処理の実行時にグレイスケールで描画することはできますでしょうか
0689デフォルトの名無しさん
2008/03/23(日) 19:49:13固定機能ならテクスチャに高度抽出の係数入れて
合成演算にDOT3とか。他に方法あったっけ。
0690デフォルトの名無しさん
2008/03/23(日) 19:50:140691デフォルトの名無しさん
2008/03/23(日) 20:24:460692デフォルトの名無しさん
2008/03/23(日) 21:22:02どうしても固定シェーダの見え方と一致しません
どこが間違ってるかわかりますでしょうか?
スペキュラーは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;
}
0693デフォルトの名無しさん
2008/03/23(日) 21:32:04D3DRS_DIFFUSEMATERIALSOURCE
などの設定がマテリアル指定になっていませんでした。
固定シェーダのライティングまわりの必要設定、サンプル系サイトからひっぱってくると
D3DRS_DIFFUSEMATERIALSOURCEとか設定していないですね・・・
マニアック設定なのかなんなのか・・
MeshView(SDKについてくるXファイル閲覧ツール)でも設定はデフォのD3DMCS_COLOR1を見るみたいですね
0694デフォルトの名無しさん
2008/03/23(日) 21:34:48DirectX10では完全に存在が抹消されているし、
今後も復活することはまずないだろうし・・・。
シェーダー関係は他の環境でも役に立つけど固定機能は・・・
>>689
DOT3はハードを選ぶよ
0695デフォルトの名無しさん
2008/03/23(日) 21:49:04VS、PS使えない環境では必要!!
って言いたいところだが、VSはソフトウェア設定でやりゃそこそこの速さで動くんだよな。
PSはハードじゃないとどうにもならないがw
0696デフォルトの名無しさん
2008/03/23(日) 21:49:49固定機能にある機能のほとんどは、3DCGの基本そのものだし。
それを1つずつ自分でシェーダ書いてみるってのは、学習の仕方としては
理想的な方法だろう。
0697デフォルトの名無しさん
2008/03/23(日) 21:53:53D3DRS_DIFFUSEMATERIALSOURCE
でひっかかるページの少ないことw
マテリアル使うようなところまでやってるなら、シェーダはプログラマブルだろう!
って感じなのかね?
0698デフォルトの名無しさん
2008/03/23(日) 21:54:00これを使えば俺のRadeon9600も、もう少し先にいけるかもしれねェ・・
0699デフォルトの名無しさん
2008/03/23(日) 22:16:16そんなの使うより、ビデオカード買い換えてVTF使った方が…
9600つながりでGeForce9600GTがいいだろう。
0700デフォルトの名無しさん
2008/03/23(日) 22:24:34VTFはATIのカードだとHD2000系からじゃないとサポートしてないぞ。
NVIDIAだとGF6からサポートしてるんだけどねぇ。
0701デフォルトの名無しさん
2008/03/23(日) 22:25:090702デフォルトの名無しさん
2008/03/23(日) 22:26:52R2VBはATI的にはプッシュしたかったんだろうけど、
DirectX10ではStreamOutという名前で対応する全ハードウェアで利用できる。
0703デフォルトの名無しさん
2008/03/24(月) 06:37:390704デフォルトの名無しさん
2008/03/24(月) 09:07:380705デフォルトの名無しさん
2008/03/24(月) 15:13:553D空間にz比較を行いながら一定幅の線を引く方法について質問があります
SetTransform(D3DTS_VIEW,
SetTransform( D3DTS_PROJECTION,
でビューマトリクスと射影マトリクスを設定して
D3DXLINEのDrawTransformで設定するマトリクスに位置などに相当するマトリクスを設定してみたのですが、
ビューマトリクスと射影マトリクスが有効になりません、何か他に設定する箇所とかあるのでしょうか?
0706デフォルトの名無しさん
2008/03/24(月) 18:12:26普通のモデルの表示はできてるの?
それと変わらないと思うんだけど・・・>設定
0707デフォルトの名無しさん
2008/03/24(月) 20:07:59行列初期化されてるだろう。
1つの行列にまとめてからDrawTransformに渡したらできないかな?
0708705
2008/03/25(火) 03:22:51普通のモデルは表示できています
>>707
ビュー射影マトリクスを位置マトリクスに掛けてDrawTransformに送ってみた所想定してる位置へ表示されました
D3DXLINEだと、SetTransform(D3DTS_VIEW等の影響が無いと言うことなのでしょうか?
単位マトリクスを
SetTransform(D3DTS_VIEW,
SetTransform( D3DTS_PROJECTION,
に設定しても同様でした
表示はできたのですが、zバッファの処理が行われていません
ビューの設定等が無効になってる影響なのでしょうか?D3DXLINEをググっても使ってる人自体が殆ど居ないのですが、
3D空間に線を引く処理は他で代替できたりするのでしょうか?
0709デフォルトの名無しさん
2008/03/25(火) 07:15:31普通、DrawPrimitiveのD3DPT_LINESTRIPを使ったりする
0710デフォルトの名無しさん
2008/03/25(火) 22:36:39昔作ったゲームがDirectX9.0bで出来ていまして、再開発のため環境を同じにしたいのですが、DirectX 9.0b SDKって今ダウンロード出来ますかね?
Microsoftのダウンロードページがリンク切れになっているみたいで・・。
やはりむりなんでしょうか?
0711デフォルトの名無しさん
2008/03/25(火) 23:46:14まだダウンできるみたいだけど?
日本語サイトからじゃなくて英語サイトのダウンロードセンターからダウンすればよろし
0712デフォルトの名無しさん
2008/03/25(火) 23:59:29うーん、探したのですがここしか見つからなく、リンク切れになっているんです・・・
http://www.microsoft.com/downloads/details.aspx?FamilyID=bc7ddedd-af62-493d-8055-5e57bab71e1a&displaylang=en
0713デフォルトの名無しさん
2008/03/26(水) 03:35:30メタセコイアで書き出したXファイルのみアルファブレンドが適応されません・・・。
描画直前でマテリアルの値を直接指定してもなぜかメタセコイアで書き出したXファイルのみアルファがかかりません。
アドバイスお願いします・・・。
0714デフォルトの名無しさん
2008/03/26(水) 09:03:42いっそ9.0cか10で手直しするか一から作り直したら?
趣味でやってるなら、古い規格にしがみついててもいい事無いよ。
0715デフォルトの名無しさん
2008/03/26(水) 09:05:20Xファイルのやつはマテリアルにα値を持ってるんじゃない?
それ以外は頂点カラーにα値を持ってるんじゃない?
それで、α値の参照を(大抵のサンプルサイト同様)頂点カラーとテクスチャーからの乗算にしてると見た
参考になるのは>>693
0716デフォルトの名無しさん
2008/03/26(水) 09:51:52正規のOS使ってるなら普通に落とせるだろ
0717102
2008/03/26(水) 09:56:390718612
2008/03/26(水) 22:24:27POVで十字キーの入力を判定する時
DIDEVICEOBJECTDATA構造体のdwDataメンバにセットされるデータから
どの方向キーが押されたかを判断することはできますが、離された時は常に-1しか
帰ってこないので判定がうまくできませんでした。この部分って既存のソフトたちは
どうしているんでしょう?何かの方法で離されたキーを得られるのか
それとも-1が来た時は十字キー全てを離した事にするのか
0719デフォルトの名無しさん
2008/03/26(水) 22:24:580720デフォルトの名無しさん
2008/03/27(木) 01:18:150721デフォルトの名無しさん
2008/03/27(木) 06:16:23ヘルプにこんなことが書いてあったぞ↓
rgdwPOV
視点ハットなどの方向コントローラ。この位置は、北から (ユーザーの正面側)
時計回りの実角度の 100 倍で表される。中心位置は通常 ?1 と報告されるが、
「注意」を参照すること。5 つの位置しか持たないインジケータの場合、コントローラの
値は ?1、0、9,000、18,000、または 27,000 のいずれか 1 つの値をとる。
POV インジケータの中心位置を 65,535 と報告するドライバもある。
POV インジケータが中心位置にあるかどうかは、次のようにして確認する。
BOOL POVCentered = (LOWORD(dwPOV) == 0xFFFF);
0722デフォルトの名無しさん
2008/03/27(木) 06:18:060723612
2008/03/27(木) 08:50:120724デフォルトの名無しさん
2008/03/27(木) 22:08:09POVがセンタの時は-1の値をとるってだけだろ
0725デフォルトの名無しさん
2008/03/27(木) 22:12:450726710
2008/03/27(木) 22:26:17>>717
あ、ほんとです。今ダウンロード出来ました。
お騒がせしましたm(_ _)m
>>714
ごもっともです。
再開発といっても画像表示の大きさを変えるくらいで、今回はコンパイルできるだけで良かったのですが。
やっぱ次のは10覚えて出直しますか。。
0727デフォルトの名無しさん
2008/03/28(金) 05:02:26ありがとうございます。
問題なく実装することができました。
0728デフォルトの名無しさん
2008/03/28(金) 12:09:100バイト目にポジションをあわせてるのに途中から再生されているように聞こえるんですが、
これはどういった現象がおきているんでしょうか?また、解決方法はありますでしょうか?
0729デフォルトの名無しさん
2008/03/28(金) 12:18:28プライマリバッファに残ってるサウンドが再生されてしまう
無音のサウンドを無限ループで再生させておくと楽
0730612
2008/03/28(金) 19:13:350731デフォルトの名無しさん
2008/03/28(金) 19:33:59やはり、音が中途半端でした。そういうことではないんですか?
0732デフォルトの名無しさん
2008/03/29(土) 01:43:55D3DXMATRIXA16 から D3DXVECTOR3 を算出する機能はありますか?
XNAでいうところの Vector3.Transform に相当するものです
0733デフォルトの名無しさん
2008/03/29(土) 02:06:360734デフォルトの名無しさん
2008/03/29(土) 02:11:29アリガトウゴザイマス、
D3DXVECTOR3TRANSFORMで探してました
通りでないわけです
C#+XNAから転向してきたものですが、
同じ機能探すのに地味に苦労するでつ
0735デフォルトの名無しさん
2008/03/29(土) 03:09:48×どおり
○どうり
0736デフォルトの名無しさん
2008/03/29(土) 08:50:24x、y、zそれぞれの軸でランダムに回転させた行列を合成して行うと、密度に偏りが出てしまいます。
何か良い方法はないでしょうか??
0737デフォルトの名無しさん
2008/03/29(土) 09:48:40その逆もできますか先生?
0738デフォルトの名無しさん
2008/03/29(土) 11:33:580739デフォルトの名無しさん
2008/03/29(土) 12:27:300740デフォルトの名無しさん
2008/03/29(土) 13:31:150741デフォルトの名無しさん
2008/03/29(土) 13:42:59>>740
初心者は黙ってろ
0742デフォルトの名無しさん
2008/03/29(土) 14:11:51739のほうがベターだとはおもうけど
0743デフォルトの名無しさん
2008/03/29(土) 14:46:48D3DXVECTOR3 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 );
これでランダム単位ベクトルになるから、
好きな長さに拡縮するといいわよ。
0745デフォルトの名無しさん
2008/03/29(土) 15:29:32それも偏ってね?
0746デフォルトの名無しさん
2008/03/29(土) 15:39:20XYZに成分分けしてランダムを行なってる時点でダメだと思うが
0747デフォルトの名無しさん
2008/03/29(土) 15:52:030748736
2008/03/29(土) 15:54:550749デフォルトの名無しさん
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
0750デフォルトの名無しさん
2008/03/29(土) 15:57:16でも、結局それでも上下(輪切りにされた皮の上下端)にかたまっちゃうよな
素直に四元数使ったほうがいいんじゃね?
0751デフォルトの名無しさん
2008/03/29(土) 16:01:250752デフォルトの名無しさん
2008/03/29(土) 16:09:22>スイカを等間隔に輪切りにすると、それぞれの皮の面積は同じになるのね。
ならんならん。
0753デフォルトの名無しさん
2008/03/29(土) 16:15:440754デフォルトの名無しさん
2008/03/29(土) 16:18:08前提ちゃんと読んでやれ。
限りなく細ければほぼ一緒になると
ただ、無視できるほど細くはならなさそうだけどな
0755デフォルトの名無しさん
2008/03/29(土) 16:23:540756デフォルトの名無しさん
2008/03/29(土) 16:24:25胴周りの輪の面積:極付近の輪の面積は、限りなく細くすると無限:1に近づくぞ。
簡単な積分だから計算してみれ。
0757デフォルトの名無しさん
2008/03/29(土) 16:25:500758デフォルトの名無しさん
2008/03/29(土) 16:26:05比率じゃなくて差を取れば0に近づく。
まあ見解の相違だね。
0759デフォルトの名無しさん
2008/03/29(土) 17:15:540761デフォルトの名無しさん
2008/03/29(土) 18:28:56輪切りだと、中心では2πr*wだが両端ではπw^2になるぞ。
0762デフォルトの名無しさん
2008/03/29(土) 19:37:42最初は均等に配置する
それをランダムに移動する
これで解決
まさにSHADEの神
0763デフォルトの名無しさん
2008/03/29(土) 20:00:36ってことなのね
0764デフォルトの名無しさん
2008/03/29(土) 22:08:31そのあとに画面のサイズを変更したいのですが、
SetWindowPosで画面のサイズを変えて
g_d3dpp.BackBufferWidth = x;//変更するxy代入
g_d3dpp.BackBufferHeight = y;
g_lpD3DDEV->Reset(&g_d3dpp);でリセットしてここまではエラーは
出ないのですが
g_lpD3DDEV->GetRenderTarget(&pBackbuffer)で強制終了してしまいます。
Resetでバックバッファをリセットしてると思いますが、
その後pBackbufferが使えなくなるようです。Reset後にバックバッファ
を使えるようにするにはどうすれば良いでしょうか?
それか根本的な他の間違いがありますか?
0765デフォルトの名無しさん
2008/03/30(日) 02:44:28D3DPT_TRIANGLESTRIPで四角形のポリゴン作って、それにテクスチャを張った。
そうすると、テクスチャが中央当たりで斜めにずれて見えてしまいます。
よくよく見てみると、四角形ポリゴン作るときの三角形の境界でずれてるみたいなんです。
描画するときの座標もuvも確認したけど問題なさそう。
ずらさずに表示したいんですけど、どうすればいいんでしょう。
0766デフォルトの名無しさん
2008/03/30(日) 09:45:304頂点を演算して求めると誤差が出る可能性はあるけど
そういう現象は起きたことないから、正常に動作するサンプルを
ヒントにしたほうが解決早そう。
0767デフォルトの名無しさん
2008/03/30(日) 10:11:56複数の四角ポリゴンで床をタイル敷き詰めしたら繋ぎ目が
見えて困ったことがありますよ。数値を調整して
やっつけ仕事で片付けましたが。
テクスチャを上手く貼るのって簡単なようで案外難しいような・・・。
0768デフォルトの名無しさん
2008/03/30(日) 11:36:090769デフォルトの名無しさん
2008/03/30(日) 12:13:350770デフォルトの名無しさん
2008/03/30(日) 14:11:29人体モデルをアニメーションさせるとして、例えば歩行アニメーションをしながら、顔の向きだけ任意の方向を向くようにするにはどうしたらよいのでしょうか?
正面を向いたまま歩行するモーションと、直立したまま顔が上下左右を向くモーションを作り、
これをSetTrackEnableやSetTrackWeightを使って合成して再生するという感じでよいのでしょうか?
もしくは、顔が含まれるボーンだけ顔が上下左右向くモーションを再生しつつ、それ以外のボーンでは歩行モーションを再生するという考え方でよいのでしょうか?
またこの手の手法の呼び名は何というのでしょうか?
0771デフォルトの名無しさん
2008/03/30(日) 14:18:530772デフォルトの名無しさん
2008/03/30(日) 14:33:16その方が早い
0773デフォルトの名無しさん
2008/03/30(日) 14:43:32ずれてるってのが
パースペクティブコレクトとか
アドレッシングモードのことを想像させるが
単に座標の設定間違ってるだけかもしれんし
正直、何がどうなってるのかよくわからん
0774デフォルトの名無しさん
2008/03/30(日) 14:49:58胸、首、頭のボーンを直接拾ってきてプログラム的に任意の方向に向けるという方法のほうが便利
0775デフォルトの名無しさん
2008/03/30(日) 14:56:040776デフォルトの名無しさん
2008/03/30(日) 15:23:10ソース公開しました。
ttp://www.hsjp.net/upload/
up14498.zipってのがそうです。
解凍すると、parm.bmpという絵があるのですが、
それの表示結果が同フォルダ内のexec.bmpです。
左下から右上にかけてななめにずれてしまいます。
0777デフォルトの名無しさん
2008/03/30(日) 17:32:010778デフォルトの名無しさん
2008/03/30(日) 17:37:49rhwを1.0にして描画座標をスクリーン座標にするか、
描画座標を0.1みたいなきりのいい数字にするとうまくいくみたいです。
描画座標はスクリーン座標→ワールド座標に変換してるので結構半端な数字になるんですよね。
それだとうまくいかないみたい。
FLOATの丸めで変な数字になっているのかな。
0779デフォルトの名無しさん
2008/03/30(日) 17:40:590780デフォルトの名無しさん
2008/03/30(日) 21:36:220781デフォルトの名無しさん
2008/03/30(日) 21:46:120782デフォルトの名無しさん
2008/03/30(日) 22:38:14自分でシークしないと先頭位置には戻らないんじゃなかったか?
0783デフォルトの名無しさん
2008/03/30(日) 23:17:24再生時にはSetCurrentPosition(0)を必ず呼び出してから再生してます。
0784デフォルトの名無しさん
2008/03/30(日) 23:40:02再生直後にボリューム100%にしてみたら?
ついでにセカンダリをLOCALSOFTWAREフラグで生成。
0785デフォルトの名無しさん
2008/03/31(月) 00:20:35HLSLのtex2Dprojとかtex2Dとかでテクスチャの範囲外を指定したときって、
返ってくる値は黒で固定なんでしょうか?
これを白にすることはできないのでしょうか。
0786デフォルトの名無しさん
2008/03/31(月) 00:28:03基点から終点を見たときのXYZ軸の角度を取得するのは
どうすればいいでしょうか?
0787デフォルトの名無しさん
2008/03/31(月) 00:28:110788デフォルトの名無しさん
2008/03/31(月) 00:38:39XYZ軸の角度ってのはXYZ軸をそれぞれ中心とする回転の角度???
だとすると
基点がA(Xa, Ya, Za)、終点がB(Xb, Yb, Zb)だとすると
X軸中心の回転角度を取るにはYZ平面に2つのベクトルを投影して
その2つの間の角度を取ると考えれ。
つまり(0, Ya, Za)と(0, Yb, Zb)の内積を出して、それの逆余弦を取る。
別にYとZの2次元ベクトルでやってもいいけど。
(内積→逆余弦の意味はわかるよね?)
0789デフォルトの名無しさん
2008/03/31(月) 00:47:43三角関数でそれぞれの軸の角度は算出できるのですが
DirectX的にそういうマクロとか関数があるのかと思って
質問した所存であります
ありがとうございまつた
0790デフォルトの名無しさん
2008/03/31(月) 00:50:54目から鱗です!ちゃんと再生できました。家のハードがダメということでしょうか?
なぜなのか分からない・・・ちなみに音量はコメントアウトしても大丈夫でした。
それと関係ないですがウィンドウを一回最小化してからまた呼び出すと
タスクマネージャーのメモリ使用量が10メガから3メガに減ります。
これって監視がうまくできてないだけなんでしょうか?リークじゃないですよね・・・?
0791デフォルトの名無しさん
2008/03/31(月) 00:57:33基本的にサウンドのハードウェア処理は信用に値しない。
グラフィックのように眼に見えて比較されるわけでもなし、
DirectSoundなんて適当でいいっすよ。ってところだろう。
結局スピーカー次第ですよね、というオチもあるし。
0792デフォルトの名無しさん
2008/03/31(月) 01:04:38PCによって再生開始時の個体差があるためか、どうしても音楽と画面とのずれが出てしまうのですが、何か良い方法はないでしょうか?
なお、音楽再生にはDirectShowを使用していますが、他のライブラリに変更も可能です。
2倍速再生などが簡単にできるという理由でDirectShowを選んだのですが・・。
少し抽象的な質問な上、DirectShowはもはやDirectXではない(笑)ですが、音ゲーにとって致命的な問題に突き当たってしまったもので・・
よろしくお願いします。
0793デフォルトの名無しさん
2008/03/31(月) 01:11:58あれ別スレッドに投げて再生してるから遅延があるんだと思ってたけど。
0794デフォルトの名無しさん
2008/03/31(月) 01:13:49ということは、DirectMusicなどを使えばいいんでしょうか?
0795デフォルトの名無しさん
2008/03/31(月) 09:38:520796デフォルトの名無しさん
2008/03/31(月) 11:04:440797デフォルトの名無しさん
2008/03/31(月) 15:17:55あーすみません。昔読んだ本に音楽はDirectMusic、サウンドはDirectSoundを使うとの記述があったような気がしていたので・・。
たぶん、DirectSoundでストリーミング再生すればよいのですね。
助かりました。ありがとうございました。
>> 796
今はSoundとMusicが統合されてAudioになっているみたいですね。
将来的にはXBoxとライブラリを統合するだとかなんだとか、いつの間にかややこしいことになっていましたw
0798デフォルトの名無しさん
2008/03/31(月) 15:42:21とりあえずテクスチャーステージを2つ使って「通常のテクスチャー」「法線情報テクスチャー」を使いバンプを行なっています
で、気づいたのですが、私の作ってるゲームはディレクションライトの方向が固定です。
その場合「通常テクスチャー(ライティングを考慮して影をつけたもの)」をライティング計算済みポリゴンに適応すればまったく同じ結果が得られるような気がします。
この認識は正しいでしょうか?
・ライト方向の変化ができない
・スペキュラー反射を適用できない
・テクスチャーを一定方向でしか貼れない(影方向に矛盾がでてしまうので)
とは思っていますが、広い土のフィールドを表現するには十分かなと思うのですが
0799デフォルトの名無しさん
2008/03/31(月) 15:42:520800デフォルトの名無しさん
2008/03/31(月) 18:47:20地形のように、光源との位置関係がまったく変化しないのならば問題ない。
0801デフォルトの名無しさん
2008/03/31(月) 20:06:21byte keys[256];
Device->GetDeviceState(sizeof(keys),&keys);
でキーの状態を取得したあと
if(keys[DIK_LEFT] & 0x80)
とかでキーの判定をするコードを良く見ますが
& 0x80 が何を表してるかわからんです
if(keys[DIK_LEFT])
でも期待通りの挙動をするんでなおさら意味不明です
& 0x80 が何なのかおしえてください
0802デフォルトの名無しさん
2008/03/31(月) 20:17:12最上位ビット以外が何か別の目的で使われる可能性もあるから、
一応マスクはしておいたほうがいいんじゃないかな。
0803デフォルトの名無しさん
2008/03/31(月) 22:13:54よくわからんけどサンプルがそう書いてあったから・・・って奴多いと思うよ
俺もそうだし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 もっと高度な理由があればよかったファンタジー
0804デフォルトの名無しさん
2008/03/31(月) 22:29:100805デフォルトの名無しさん
2008/03/31(月) 22:47:37pBackBufferってReset後に再取得してる?
前から保持してる奴ならResetかけた瞬間に死んでるから駄目じゃね?
0806デフォルトの名無しさん
2008/03/31(月) 22:58:06>>805はスルーしてくれ
スマンコ
0807デフォルトの名無しさん
2008/03/31(月) 23:17:08再取得はどうやるんですか?ヒントだけでもお願いします。
0808デフォルトの名無しさん
2008/03/31(月) 23:35:46そのレスは間違いだ
ところで
HRESULT GetRenderTarget(
DWORD RenderTargetIndex,
IDirect3DSurface9 **ppRenderTarget
);
単に引数の設定が間違ってるだけじゃね?
とかもうなんでもテキトーに言ってみるテスト
0809デフォルトの名無しさん
2008/04/01(火) 02:15:03128×128のARGB(255, 132, 130, 66)で塗り潰したBMPを用意しました(�@)
また、CreateTextureしLockRectしてARGB(255, 132, 130, 66)で塗り潰したテクスチャを用意しました(�A)
前者と後者を同じ関数(ID3DXSprite::Draw)で塗り潰したのですが、何故かほんの少しだけ色味が違います。
これは何故なのでしょうか?
0810デフォルトの名無しさん
2008/04/01(火) 03:35:300811デフォルトの名無しさん
2008/04/01(火) 03:41:240812デフォルトの名無しさん
2008/04/01(火) 06:43:270813デフォルトの名無しさん
2008/04/01(火) 07:51:44Microsoft製品を使っていられない
0814デフォルトの名無しさん
2008/04/01(火) 08:54:420815デフォルトの名無しさん
2008/04/01(火) 09:19:13それぞれのテクスチャの格納先は24ビット以上?
そして表示先も24ビット以上?
0816デフォルトの名無しさん
2008/04/01(火) 10:43:37確認してみると画面モードは16ビットになっていました(デバッグ時にテストの為に変更していたのを忘れていました)
また、画像フォーマットは�AはA8R8G8B、�@はUNKNOWNだったので�@をA8R8G8B8に修正しました。
ですが、それでもほんの少しだけ色味が違います。パラメータは同じなのですが………。
0817デフォルトの名無しさん
2008/04/01(火) 10:48:29そして、ほんの少し色味が違うとレスしましたが、
ふとビットマップのRGBを確認したところ16ビット→32ビットに解像度を変化させた為か、
RGB(128,128,64)となっており、�Aの塗り潰す色を変えたところ色味が同じになりました!
ありがとうございます、助かりました。
0818デフォルトの名無しさん
2008/04/01(火) 21:23:520819デフォルトの名無しさん
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じゃだめなんでしょうか?
0820デフォルトの名無しさん
2008/04/02(水) 02:17:01透明感のあるレーザーを表現するにはどうしたらよいですか?
バーチャロン1とか3D初期のころのゲームは
円柱をスケーリングしてるだけみたいでしたが
近頃のはビルボードでやってるんだかなんだか知りませんが
透明感があるけど芯の部分は色が濃くなってボリューム感があったりします
半透明の円柱を伸ばしてみてもイマイチな質感しか得られません
0821デフォルトの名無しさん
2008/04/02(水) 02:27:260822デフォルトの名無しさん
2008/04/02(水) 03:04:11円柱にピクセルシェーダでグローかけるとよりボリューム感出せるね
0823819
2008/04/02(水) 04:10:13みなさんありがとうございました
0824デフォルトの名無しさん
2008/04/02(水) 10:49:160825デフォルトの名無しさん
2008/04/02(水) 12:01:32みんなのところもそうなのかなぁ・・・
0826デフォルトの名無しさん
2008/04/02(水) 12:08:04根本的なとこにミスがあるのでは?
0827デフォルトの名無しさん
2008/04/02(水) 12:13:13その決して自分を疑わな(ry ry)かすべきでは?
0828デフォルトの名無しさん
2008/04/02(水) 12:18:480829デフォルトの名無しさん
2008/04/02(水) 15:37:03う・・・分かっていても相手を疑いたくなる俺はクソグラマ・・・
マルチスレッドは関係ないよね?関数自体は常に専用のスレッドから呼ばれるし、
返り値が0x88760827なんだけどこれって引数おかしい!だっけ?
0830デフォルトの名無しさん
2008/04/02(水) 16:27:06Createxxx 呼び出しから D3DERR_DRIVERINTERNALERROR が返された場合、それは致命的エラーとは見なされない。
ドライバは、このエラーを D3DERR_UNSUPPORTED または D3DERR_OUTOFMEMORY エラーと同様に扱う。
とのこと、
・・・・・どうしろってんだ。
このエラーで失敗した場合は成功するまで何回もチャレンジすればいいのかなぁ・・・
0831デフォルトの名無しさん
2008/04/02(水) 16:33:32マルチだとタイミングによって具合が悪くなるのかも?
0832デフォルトの名無しさん
2008/04/02(水) 16:37:32熱で飛びかけてる(廃熱不足)
0833デフォルトの名無しさん
2008/04/02(水) 17:21:39?それは上に対してのレスですか?どういうことでしょう?
0834デフォルトの名無しさん
2008/04/02(水) 17:33:43memtest走らせてみ
俺も昔、外的要因に左右されないプログラムなのに起動すると時々結果が違うってことがあって
調べたらメモリーがイカれてた。
0835デフォルトの名無しさん
2008/04/02(水) 17:51:05CREATEを試みたが何かハード的なエラーが検出されたため
GPUが処理を中止させたのかなと
0836デフォルトの名無しさん
2008/04/02(水) 18:51:41マルチスレッドの時しか起こらないんだけど、メモリー壊れてるのか・・・?
今再現コード作ってみるから試してみれ
0837デフォルトの名無しさん
2008/04/02(水) 18:54:11まあいいけどね
0838デフォルトの名無しさん
2008/04/02(水) 19:21:41すまん。
何言ってんのかよく分からなかったから再現コードでやってもらおうと思ったんだが、再現できん
相性問題ってやつも絡んでくるのだろうか・・・
0839デフォルトの名無しさん
2008/04/02(水) 19:23:530840デフォルトの名無しさん
2008/04/02(水) 19:30:510841デフォルトの名無しさん
2008/04/02(水) 19:31:540842デフォルトの名無しさん
2008/04/02(水) 19:32:310843デフォルトの名無しさん
2008/04/02(水) 19:34:58ttp://www7.axfc.net/uploader/93/so/File_5112.zip.html
これやってみてくれ、log.txtに○回目って出たらしくじってる。
一枚の画像で何回しくじったかを吐き出してる。
内容は気にしないでくれ
0844デフォルトの名無しさん
2008/04/02(水) 21:59:30「DirectInputDevice8作成に失敗」ってのが出るが実行・操作はできた
最初27回目まで出たけど、その後は3回ぐらいやってもスラッシュが増えるだけだった
操作は移動とジャンプだけか?
0845デフォルトの名無しさん
2008/04/02(水) 22:00:23○「DirectInputDevice8オブジェクトの作成に失敗」
0846デフォルトの名無しさん
2008/04/02(水) 22:06:311回目:88760827
2回目:88760827
・・・
99回目:88760827
@loadImage(Image\kurew_000.bmp)imgerr=88760827
イメージファイル読み込み失敗ってエラーも出るし、なんか根本的に駄目だな
この規模だったらまだなんも恥ずかしいことないから、ソース晒してみたらどうかね
0847デフォルトの名無しさん
2008/04/02(水) 22:23:43DirectInputのエラーは毎回出るが普通に動く。
0848デフォルトの名無しさん
2008/04/02(水) 22:31:58>>844操作はそんなもんです。強いて言うなら左右早押しでダッシュくらいです。
しかしこの結果にはショックを隠しきれない。ソース類27個あるけど見てくれますか?
0849デフォルトの名無しさん
2008/04/02(水) 23:02:290850デフォルトの名無しさん
2008/04/02(水) 23:36:45すいません・・・どうやるんでしょう?
0851デフォルトの名無しさん
2008/04/02(水) 23:47:15んーとな、、SDKユーティリティのDirectX Control PanelでRuntimeをDebugに選択、
Debug Output Levelを最大に設定。あとはVC++上でデバッグ実行しつつ出力ウィンドウに注目。
Direct3D APIがエラーコードを返してくるような時には、まともな詳細メッセージが期待できる。
0852デフォルトの名無しさん
2008/04/02(水) 23:58:20D3DCREATE_MULTITHREADEDって言うフラグを指定すればいいんだと!
あばよ!!
0853デフォルトの名無しさん
2008/04/03(木) 00:03:23ところで基本中の基本だが、Direct3Dの初期化と利用は同一スレッドだけに限ってるだろうな?
WinMainスレッドでD3Dを作成し、_beginthreadしたスレッドで利用とか勘弁だぞ。
一見まともに動くが、デバイスリセットは必ず失敗するわ、その際のエラーは「引数が異常」だわ、ほんと地雷だわ
0854853
2008/04/03(木) 00:05:18テクスチャーの読み込みを別スレッドでやってるだろ?
0855デフォルトの名無しさん
2008/04/03(木) 00:05:53( ‘д‘)
⊂彡☆))Д´) >>852 マルチスレッドでやる時はな・・・D3DCREATE_MULTITHRE痛ッ
0856デフォルトの名無しさん
2008/04/03(木) 00:16:22じゃあ、作成したスレッドでゲーム動かしてMainスレッドで画像取得と貸した方がいいのかな・・・
みんなはどうやってるんだろう。
あ?何叩いてんのさ。いてーだろ
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) >>855
0857デフォルトの名無しさん
2008/04/03(木) 00:19:15( ‘д‘)
⊂彡☆))Д´) >>856
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) >>856
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) >>856
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) >>856
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´) >>856
0858デフォルトの名無しさん
2008/04/03(木) 00:19:460859デフォルトの名無しさん
2008/04/03(木) 01:35:48( ‘д‘) ノn
ヽ(-_ - )
_, ,_
∩(* ( )∩ ん…
+ +
+ ( `Д´) ハァハァ +
( つ _, ,_ +
),ィ⌒(;‘д‘) ああっ… +
(_(__人__,つ 、つ
0860デフォルトの名無しさん
2008/04/03(木) 01:43:31なんでそうなるの?w
0861デフォルトの名無しさん
2008/04/03(木) 08:30:45これマルチスレッドにする必要ねーだろ
スライスぐらい自己管理しろよ
0862デフォルトの名無しさん
2008/04/03(木) 09:36:58画像取得が、画像のロードだとするなら、それは別スレッドでやっちゃいかんと…。
0863デフォルトの名無しさん
2008/04/03(木) 10:23:55処理の流れが複雑で予測できなくなるだけで百害あって一利なし
0864デフォルトの名無しさん
2008/04/03(木) 10:25:520865デフォルトの名無しさん
2008/04/03(木) 11:02:550866デフォルトの名無しさん
2008/04/03(木) 11:38:100867デフォルトの名無しさん
2008/04/03(木) 14:15:11処理の流れが予測できる部分で使えよ。
画像の読み込みとか。
0868デフォルトの名無しさん
2008/04/03(木) 14:50:320869デフォルトの名無しさん
2008/04/03(木) 23:16:32ゲーム画面とチャットウィンドウでも気持ちよくだしてもらおうとか
思ったらなにもしないほうがいいんでない?
0870デフォルトの名無しさん
2008/04/03(木) 23:22:06少なくともCPUが二つあるなら二つを効果的に使うほうが早い。
使えるかどうかは本人の技量次第。
0871デフォルトの名無しさん
2008/04/03(木) 23:48:14汎用性がなくなって、ハード制限が厳しくなるんだよな
まあオプションで細かく設定させるようにすればいいわけだけど
結局別パターンの処理を用意しないといけないし、
ユーザー側にもそれなりの知識が要求される
0872デフォルトの名無しさん
2008/04/04(金) 00:18:26CPU2つ使っちゃったらチャットウィンドウだせないじゃん
ヘルプも読みにくいし勝手なことすんなよって感じじゃね?
フルスクリーンのFPSとかそんなのしか使い道なさげじゃん?
共存せなあかんよ。共存。
0873デフォルトの名無しさん
2008/04/04(金) 00:20:330874デフォルトの名無しさん
2008/04/04(金) 00:28:00二つあることを前提にしてもWindowsで作ってるならシングルコアPCでもそのまま動くだろ・・・。
>>872
じゃあシングルコアのPCでゲーム起動したら他は何もできなくなるのか?
MS−DOSの話は誰もしてないぞ?
0875デフォルトの名無しさん
2008/04/04(金) 00:28:350876デフォルトの名無しさん
2008/04/04(金) 01:57:38CPU二つなら同時実行できるけどそうでなければマルチの意味がないし。
0877デフォルトの名無しさん
2008/04/04(金) 03:03:39CPUは1つでもマルチタスクを処理できます。
ですが、シングルスレッドで動いてるアプリをマルチコアで高速化はできません。
マルチスレッドにするとマルチコアCPUで高速化できます。
当然、シングルコアでもマトモに動くように開発を進めるでしょう。
0878デフォルトの名無しさん
2008/04/04(金) 04:31:34マルチコアだからこそ意味があるのがマルチスレッド処理なわけで
0879デフォルトの名無しさん
2008/04/04(金) 05:29:551アプリで無駄にCPUをこき使うのはあまり好ましくないですね。
0880デフォルトの名無しさん
2008/04/04(金) 05:50:570881デフォルトの名無しさん
2008/04/04(金) 06:02:330882デフォルトの名無しさん
2008/04/04(金) 06:08:070883デフォルトの名無しさん
2008/04/04(金) 07:18:380884デフォルトの名無しさん
2008/04/04(金) 08:53:59CPUをこき使うプロセスだとて、実際にはOSなどの優先順位の高いプロセスにCPU時間を譲ることになるわけなんだが。
0885デフォルトの名無しさん
2008/04/04(金) 09:23:09シングルコアだと総合的な速度は低下する可能性はあるが、
今後はマルチコアが主流になっていくんだし、
応答性をあげるためにはマルチスレッド化が必須な場合もある。
0886デフォルトの名無しさん
2008/04/04(金) 10:35:060887デフォルトの名無しさん
2008/04/04(金) 10:56:54マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳マルチスレッド遣わない奴は低脳
0888デフォルトの名無しさん
2008/04/04(金) 11:51:25上でも出たように、マルチスレッドの場合はD3DCREATE_MULTITHREADEDを指定する必要がある。
ローディング画面(←アニメーションつき)でのテクスチャーの読み込み程度でしか使うつもりがない場合、全般的に性能が(どの程度かは不明だが)低下するこのオプションは指定したくないだろう。
どのように解決する?
0889デフォルトの名無しさん
2008/04/04(金) 11:59:20テクスチャのロックだけDirect3D用のスレッドで行う。
0890デフォルトの名無しさん
2008/04/04(金) 12:22:340891デフォルトの名無しさん
2008/04/04(金) 12:26:230892デフォルトの名無しさん
2008/04/04(金) 14:22:32つまり
D3DXMatrixRotationYawPitchRoll
の逆をやりたいのですが
0893デフォルトの名無しさん
2008/04/04(金) 15:36:11何が言いたいのかよくわからんが
行列(D3DXMATRIX)のメンバはそれぞれ
_11,_12,_13 X軸の方向ベクトル
_21,_22,_23 Y軸の方向ベクトル
_31,_32,_33 Z軸の方向ベクトル
_41,_42,_43 位置座標
を意味してるんだぜ?
物体がどっち向いてるかなんて1発でわかると思うんだが
0894デフォルトの名無しさん
2008/04/04(金) 15:51:43なんです…と…
0895デフォルトの名無しさん
2008/04/04(金) 15:59:30D3DXの便利関数に慣れすぎると基本がおろそかになるってのは本当だな…
そういう基礎中の基礎を教えてくれるお勧めページないか?
0896デフォルトの名無しさん
2008/04/04(金) 16:05:39いったいどの次元の人達なんだよ
0897デフォルトの名無しさん
2008/04/04(金) 16:12:06俺はどこで知ったんだったかなー
0898デフォルトの名無しさん
2008/04/04(金) 16:26:550899デフォルトの名無しさん
2008/04/04(金) 16:35:28俺はマルペケつくろーどっとコムで知った
0900デフォルトの名無しさん
2008/04/04(金) 16:36:34やっぱり読み取れなかったのか?
0901デフォルトの名無しさん
2008/04/04(金) 16:37:57昔ざっとヘルプ見回したことあるけど、そんなもん見たことないぞ
俺もなんとなーく知ってたが
他人を馬鹿にして悦に浸るのにこのスレはふさわしくないだろ
俺の見落としだったら謝るから、URLでもはっつけてやれ
0902デフォルトの名無しさん
2008/04/04(金) 16:46:10とりあえずマルペケだとこのページだな
分かりやすい
0903デフォルトの名無しさん
2008/04/04(金) 16:52:40>>893のように学校の生徒に教えるような書き方じゃないよ
URLって言われてもヘルプにURLなんてないんじゃないの?
4×4のマトリクスについて説明してるところだよ
x'=(m11*x)+(m21*y)+(m31*z)+(m41*1) とか書いてあるところ
これ見て考えればわかるじゃん
ここはゲ製板じゃないから読み取れるものとして書き込んたんだが
やっぱり初心者スレだからスレ違いか
0904デフォルトの名無しさん
2008/04/04(金) 16:53:16ありがとうございます。
とても分かりやすいですし、他のコラムも面白そうなので一通り読んでみます。
0905デフォルトの名無しさん
2008/04/04(金) 16:54:25痛すぎる。
MSDNオンラインも知らないお前が初心者を脱却してるとは思えん。
0906デフォルトの名無しさん
2008/04/04(金) 17:16:29下を見て自分の位置を確認するのは結構だけど
たまには上のほうも向いてみようぜ。
0907デフォルトの名無しさん
2008/04/04(金) 17:35:27・正確な情報
・的確な回答
求められないもの
・相手は自分よりも劣っているという思い込み
・「ヘルプに書いてあったはず」といった、不確かな情報
0908デフォルトの名無しさん
2008/04/04(金) 17:38:29求められないもの
・自分は間違ってないと主張したがる人
0909デフォルトの名無しさん
2008/04/04(金) 17:47:520910デフォルトの名無しさん
2008/04/04(金) 18:03:16>1を10回読み直してみるのはどうだろう?
0911デフォルトの名無しさん
2008/04/04(金) 18:46:03要素が各軸の方向ベクトル示してるのなんて
0912デフォルトの名無しさん
2008/04/04(金) 18:58:100913デフォルトの名無しさん
2008/04/04(金) 20:01:420914デフォルトの名無しさん
2008/04/04(金) 22:13:51Vector4 の W が何を表してるかわからないのでおしえてください
0915デフォルトの名無しさん
2008/04/04(金) 23:16:20本当にそうなってるっけ?
XYZ3つのベクトルと位置座標からそれを作るときはよかったけど
マトリックスからベクトルに分解するときもそれでいけたっけ?
0916デフォルトの名無しさん
2008/04/04(金) 23:17:29なんか同次座標とかいう奴
俺もよく知らないで使ってる
0917デフォルトの名無しさん
2008/04/04(金) 23:18:21同次ベクトルでググれ
0918デフォルトの名無しさん
2008/04/04(金) 23:19:58昔、散々ググッたけど見る説明見る説明尽く意味不明だった希ガス
なんか書き手もよくわかってないのが文面から透けて見える
0919デフォルトの名無しさん
2008/04/04(金) 23:28:44なんてことはない。
ttp://ranobe.com/up/src/up265377.jpg
0920デフォルトの名無しさん
2008/04/04(金) 23:42:29悪い
意味がわかんない
何と比べてどういいの?ってのと
できれば(X、Y)から(X、Y、W)にしていいことってのを説明してほしい
0921デフォルトの名無しさん
2008/04/04(金) 23:45:040922デフォルトの名無しさん
2008/04/04(金) 23:50:58この変換行列の積を持っておきさえすれば、
一回の一次変換で変換できる。
0923デフォルトの名無しさん
2008/04/04(金) 23:58:15XYZのベクトルをW平面に射影したものだとイメージするとわかりやすい
W=1の平面から観るXYZベクトルと
W=100の平面から観るXYZベクトルは違ってみえるが
実際は同じものである、みたいな
0924デフォルトの名無しさん
2008/04/05(土) 00:02:11別に無理に保持する必要は無いんだがな。
同次ベクトルは数学的に優れたトリックではあるけど、
実用的には0とか1とかを実際にメモリ上に持っている必要は無い。
0925デフォルトの名無しさん
2008/04/05(土) 00:32:57もっとわからなくなった責任とれ
0926デフォルトの名無しさん
2008/04/05(土) 00:58:110927デフォルトの名無しさん
2008/04/05(土) 01:03:220928デフォルトの名無しさん
2008/04/05(土) 01:04:360929デフォルトの名無しさん
2008/04/05(土) 01:40:5941、42、43は使ってたけど
11〜33はワケワカランのでほっといたw
0930デフォルトの名無しさん
2008/04/05(土) 04:00:070931デフォルトの名無しさん
2008/04/05(土) 11:04:51クォータニオンなら直接処理できて、軸回転はややこしやってことじゃね?
0932914
2008/04/05(土) 11:21:17結局Wって何なんでしょうか?
Vector2 は XY 座標で2次元の座標を表し
Vector3 は XYZ 座標で3次元の座標を表し
Vector4 は XYZW で何を表すんでしょうか?
というか主にどんなときに使うんですか?
0933デフォルトの名無しさん
2008/04/05(土) 11:22:290934デフォルトの名無しさん
2008/04/05(土) 11:38:51とりあえず CPU 側で計算する場合は SIMD 使えば
4 ワードになるから高速に計算できる。
0935デフォルトの名無しさん
2008/04/05(土) 11:41:150936デフォルトの名無しさん
2008/04/05(土) 11:50:210937デフォルトの名無しさん
2008/04/05(土) 12:04:58そのまんまコピーできる
0938デフォルトの名無しさん
2008/04/05(土) 12:08:12ベクトルと4x4マトリックスの演算をするときに
ベクトルが3要素しかない場合は移動が適用出来ない。
マトリックスの移動成分の計算を適用させるためにw=1.0という値が必要。
頂点シェーダーでもfloat3とfloat4x4のmulはエラーになるだろ。
0939デフォルトの名無しさん
2008/04/05(土) 12:11:38だのに何で w をわざわざつける仕様になってるのかというところに疑問があるなじゃない?
0940デフォルトの名無しさん
2008/04/05(土) 12:13:25ベクトル演算で状況は変わるんだが、そこを説明しないとな。
0941デフォルトの名無しさん
2008/04/05(土) 12:18:41昨今のGPUのようなベクトル演算を行なう時の最適化については初心者スレの内容でもないきがするけど。
0942デフォルトの名無しさん
2008/04/05(土) 12:27:23・スクリーン変換に必要な割り算一回分を保留できる
てのがメリットね。
0943デフォルトの名無しさん
2008/04/05(土) 12:38:06概念的にわかりやすいからそうしてるのか?
そこがわからない
0944デフォルトの名無しさん
2008/04/05(土) 12:40:29計算を早くしたいならV4
べつに早くなくてもいいならV3
ってことですか
0945デフォルトの名無しさん
2008/04/05(土) 12:41:110946デフォルトの名無しさん
2008/04/05(土) 13:07:15まあ固定画面ゲームならそれでもいいんじゃね?
0947デフォルトの名無しさん
2008/04/05(土) 13:30:060948デフォルトの名無しさん
2008/04/05(土) 13:34:07x = 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
ようするにこういう事なんだが
0949デフォルトの名無しさん
2008/04/05(土) 13:47:070950デフォルトの名無しさん
2008/04/05(土) 14:39:00小数演算を担当しているのは SSE。
ただ、大量に変換するような場合は
グラボ側で計算することも多いかと思う。
0951デフォルトの名無しさん
2008/04/05(土) 14:51:510952デフォルトの名無しさん
2008/04/05(土) 15:27:26CPUでやる計算はCPUで再利用するデータ。
0953デフォルトの名無しさん
2008/04/05(土) 15:28:520954デフォルトの名無しさん
2008/04/05(土) 16:23:48悩んでいたんだけどこれって Halo でも起きる現象なんですね。
>方法 4 : スタンバイまたはサスペンド モードの後にコンピュータを再起動する
>スタンバイまたはサスペンド モードの後に、パフォーマンスが低下することがあります。
>ゲーム中に手動または自動でコンピュータをスタンバイまたはサスペンド モードにした
>場合、コンピュータを復帰させ、ゲームを再開すると、パフォーマンスが低下することが
>あります。音楽とサウンドが聞こえなくなったり、場面転換が途切れたり、ゲームが応答
>を停止 (ハング) したりする場合があります。この問題を解決するには、ゲームを再起動します。
天下のMS様も認めてる不具合なので仕様ということにしよう…。orz
0955デフォルトの名無しさん
2008/04/05(土) 18:58:280956デフォルトの名無しさん
2008/04/06(日) 23:50:04つーか、ゲーム起動したままスタンバイして、
戻ってこれるってのを「すごい」と思ってしまったw
0957デフォルトの名無しさん
2008/04/06(日) 23:59:360958デフォルトの名無しさん
2008/04/07(月) 02:14:470959デフォルトの名無しさん
2008/04/07(月) 07:51:26なぜならスタンバイ復帰とかメッセージ拾ったら
一度ゲームを再起動させてるから
(一瞬ちらつく程度)
0960デフォルトの名無しさん
2008/04/07(月) 12:50:56テクスチャー読み込みとか早すぎだろJK
D3DPOOL_MANAGEDを使わず、自前で復帰処理かけるなら、そのやり方が一番いいよなー。
0961デフォルトの名無しさん
2008/04/07(月) 18:13:54ゲームの音楽は流れたままですが処理や描画も停止しますよね?
そうすると例えば音ゲーの場合は音ズレしちゃってマズいので、
ドラッグしても通常時と同じ様に動作してるようにしたいのですが、
そういうことってできるのでしょうか?
もし可能ならば、ヒントでもいいのでアドバイスお願いします。
0962デフォルトの名無しさん
2008/04/07(月) 18:16:55フルスクリーン専用
タイトルバーを出さない
0963デフォルトの名無しさん
2008/04/07(月) 18:29:17レスサンクスです。
マルチスレッド→要勉強
フルスクリーン専用→ウインドウモードでできねぇって苦情
タイトルバーを出さない→ドラッグできねぇって苦情
ってわけでマルチスレッド勉強してきます。
やり方としては、WM_MOVEメッセージが発行されたとき・・・
ってな感じのイメージだったんですが、マルチスレッドにすると
自動的にそう(>>961)なるのでしょうか?
0964デフォルトの名無しさん
2008/04/07(月) 18:36:38ドラッグ処理を実装すればおkってことにならないかな・・・
0965デフォルトの名無しさん
2008/04/07(月) 18:38:24マルチスレッド化するより遥かに面倒くさいと思うが
0966デフォルトの名無しさん
2008/04/07(月) 19:39:56スレ違いだが、何かの縁なので。
ウインドウをドラッグ中に処理が進まなくなるのは、連続してWM_MOVEが発生しつづけるせいでそのメッセージ処理以外できなくなるから。
マルチスレッドはメッセージ処理とは関係なく、かつ並行で動作する。
メインスレッド(WinMainから始まるスレッド)はメッセージの処理だけやり、ゲームの処理は全てサブスレッド(CreateThreadしたスレッド)側でやるよろし
0967デフォルトの名無しさん
2008/04/07(月) 19:59:230968デフォルトの名無しさん
2008/04/07(月) 21:06:15WM_MOVEが発生し続けるというのはちょっと違う。
ウィンドウの移動中やメニューを開いている間は、専用のメッセージループに
処理が移る。
簡易的な解決方法として、SetTimerでWM_TIMERメッセージを発生させて
そこからゲーム処理を呼ぶという方法がある。
そんなことするより、WM_ENTERSIZEMOVEが来たらポーズかけた方が
いいと思うけどね。
0969デフォルトの名無しさん
2008/04/07(月) 21:16:300970デフォルトの名無しさん
2008/04/07(月) 22:03:17遅くなりましたがレスサンクスです。
うーんそうなのか、だとするとDirectXじゃなくて
WindowsAPI関連の問題になってくるってことなのか。
DirectXで一杯一杯なのでマルチスレッドとなると難しそうですが
ドラッグされたときは音楽等と止める(ポーズ状態)ってのも
一つの手ですね・・・そちらまで頭が回らなかったw
とりあえず何とかアドバイス頂いた方法を参考にしつつ
ドラッグしても音ズレしないように一度試してみます。
0971デフォルトの名無しさん
2008/04/07(月) 22:04:52やっぱマルチスレッドって必須の技術になりつつあるのな
昔挑戦したけどデッドロックが恐ろしくて放り投げたわww
0972デフォルトの名無しさん
2008/04/07(月) 22:20:180973デフォルトの名無しさん
2008/04/07(月) 22:27:440974デフォルトの名無しさん
2008/04/07(月) 23:15:34外人のよくわからんライブラリ使ってるからマルチスレッド意識したことねーや
この辺の部品って意外に探すとそろってるぞ
0975デフォルトの名無しさん
2008/04/07(月) 23:31:09タイマーで音楽のタイミングをカウントすりゃいいじゃん
そのカウントにあわせてアニメーション等の状態を管理すればいい
それで解決じゃね?
マルチスレッドとか別にどうでもいいと思う
0976デフォルトの名無しさん
2008/04/07(月) 23:43:37マルチスレッドは同期をとるのが難しいだけで
メッセージスレッドとゲームスレッドは互いに(ほとんど)干渉しないんだから簡単だぞ。
ただ、DirectXはDirectXを初期化したスレッドでのみ使うのが基本。という制約を忘れないようにな。
メッセージスレッドで初期化して、ゲームスレッドで利用とかはダメだぜ。
上の方でほとんどと書いたが、実際
「WM_CLOSEがきたらゲームスレッド終了フラグをたてる」
「終了フラグを見て、ゲームスレッドは自身を終了させる」
って時しか干渉しないでしょ。
0977デフォルトの名無しさん
2008/04/07(月) 23:56:570978デフォルトの名無しさん
2008/04/08(火) 00:18:55> メッセージスレッドで初期化して、ゲームスレッドで利用とかはダメだぜ。
ここが分からんのだが、どうやれと?
0979デフォルトの名無しさん
2008/04/08(火) 00:38:56いま,DirectXでフルスクリーンモードの高精細な画像を呈示して,観察者の反応をみる,
という実験を計画中です.
しかし実は私はいわゆるGUIベースのアプリ,「窓が開いてマウスでクリック,を書いた経験がなく,
できれば,void main(void) で始まるC言語の範囲で,プログラムを書きたいのです.
Direct X(具体的には DirectDrawを使って,さまざまな画像を作って見せて,
人間のいろいろな反応を記録する,という研究です・
に使う予定です.
コマンドライ
0980デフォルトの名無しさん
2008/04/08(火) 00:40:22マルチスレッドがどうとかいうのはあんまり関係ないだろ
0981デフォルトの名無しさん
2008/04/08(火) 00:42:44C言語の範囲ではDirectXは利用できません。
C++を学ぶ気がないのでしたらお帰り下さい
0982デフォルトの名無しさん
2008/04/08(火) 00:47:160983デフォルトの名無しさん
2008/04/08(火) 00:56:11ドキュメントはプリントアウトして抱いて眠れ
0984デフォルトの名無しさん
2008/04/08(火) 01:02:540985デフォルトの名無しさん
2008/04/08(火) 01:06:430986デフォルトの名無しさん
2008/04/08(火) 01:13:50サンプルのシンプルサンプルかエンプティサンプルをベースに作るのはダメなん?
0987デフォルトの名無しさん
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に。
パッと見でなんか間違ってるとこあるかな?
0988デフォルトの名無しさん
2008/04/08(火) 02:06:49それは本当にDirectDrawが必要なのか?
ただ画像を表示するだけにDirectDrawなんて必要ないよ。
DirectDrawが必要なのはVSYNCと同期した画面の更新、
カラーキーを使った画像の描画で、それが必要ないなら
DirectDrawを使うメリットは無いし、デメリットの方が多い。
GDIの方が機能が豊富で便利だよ。
0989987
2008/04/08(火) 02:07:28matWorldを現在の座標に加算すれば、
めでたく進行方向にカーソルキーで移動できるはずだったんだけど。。。。る
0990デフォルトの名無しさん
2008/04/08(火) 02:37:360991デフォルトの名無しさん
2008/04/08(火) 08:43:42NULLでも描けるけど
0992デフォルトの名無しさん
2008/04/08(火) 09:44:40NULLだと中でID3DXSprite作ってそれ使う。
キャッシュや描画タイミングの制御の問題なので
分からなければ気にしなくてもいいだろう。
分かるようになったら改めて見ればいい。
0993デフォルトの名無しさん
2008/04/08(火) 19:48:18ハードウェア拡大縮小描画はかなりのメリットだよ。
GDIは補間方法が論外だし、GDI+は速度的に勝ち目殆どなし。
VGAに依っては、UYVYとかYUY2も変換無しで突っ込める。
ただ、>>979はフルスクリーン=DirectXと考えている節があるな。
それ以前に壊れている気もするけど。
0995デフォルトの名無しさん
2008/04/08(火) 21:28:14それとも本当は他の軸も回転させてんのか?
0996987
2008/04/08(火) 21:45:39自分で計算する方法なんて忘れたっすよ!
ついでに聞きたい、
Y軸とZ軸、もしくはY軸とX軸の2軸回転で全方位のベクトル?になるよね?
0997987
2008/04/08(火) 23:10:33http://up.mugitya.com/img/Lv.1_up56403.png
↑こーゆーのを想像してるんだけど
http://up.mugitya.com/img/Lv.1_up56405.png
↑結果はなぜかこーなる
なんで?なんで?
>>987のどこが間違ってるんだろう?
0998デフォルトの名無しさん
2008/04/08(火) 23:19:15matTransをVECTOR3にしろ
0999987
2008/04/09(水) 00:20:45移動させて回転させた行列の中には
「ある方向へある距離移動した座標」
が入ってると思ったんだけど。。。。
まちがっとる?
1000デフォルトの名無しさん
2008/04/09(水) 00:49:31そして1000Get!
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。