【C++】 DirectX初心者質問スレ Part10 【C】
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
前スレ
【C++】 DirectX初心者質問スレ Part9 【C】
http://pc8.2ch.net/test/read.cgi/tech/1144878498/
3 :
デフォルトの名無しさん :2006/07/25(火) 21:58:16
頂点バッファのLockについて質問です。 ポリゴン1つ分の領域(頂点3つ分)をLockして、DrawPrimitiveで描画するとうまくいくのですが、 メッシュ全部のポリゴンを一度にLockして描画すると、うまくいきません。 IDirect3DVertexBuffer9::Lock()はD3D_OKを返しているのですが、 確保した領域に書き込もうとするとなぜか落ちてしまいます。 VRAMもメインメモリも十分にあると思うんですが、 何か原因に心当たりのある方いましたらレスください。
・頂点バッファのバイト数が合ってない ・変なフラグを指定している ・ポインタを渡すところで、変な値をキャストして無理やり渡してる
DXGetErrorDescription9のお返事が英語なの、 日本語でお話出来るようにならないかな?かな?
アドベンチャー作りたいならDirectXいじる必要ないんじゃね
サウンドのミキシングやフェードはDirectSoundじゃないと面倒だけどなぁ
9 :
デフォルトの名無しさん :2006/07/26(水) 00:47:38
かなり困ってます、読み込んだwaveファイルを同時にならしたいんだけど、どうしても毎回ずれます ↓今は以下のようにしてます、なんかほかに方法ないですかね? for( int i = 0; i < m_iIndexMax; i++ ) { m_pSecSndBuf[ i ]->Play( NULL, NULL, NULL ); }
元々合成したwavファイルを作っとく。
el.hと
>>2 のDXライブラリ置き場のライブラリを両方使おうとすると、やはり複数宣言で怒られます。
両方を組み合わせて作りたいのですが、なんとか回避できないでしょうか
エラー E2238 C:\borland\test\DxDirectX.h 2822: 'LPDIENVELOPE' の宣言が複数見つかった
エラー E2344 C:\Program Files\Microsoft DirectX SDK (June 2006)\Include\dinput.h 219: 一つ前の 'LPDIENVELOPE' の定義位置
ソースを二つに分ける
別のcppで#include "DxLib.h"以下を記述して、 本体のcppの方でincludeしてみましたが、同じエラーでした。 やってること違うのかな・・
あほか
それ二つ併用するのはいかれてる。作者も想定してないだろ。
同時に使う意味がわからなさすぐる
同時にっていうか両方を使いたいんです。
だから何で?
うるせーな、両方使いたいって言ってんだろーが。
おおかたDxの2DにELの3Dを合わせたいってところなんだろうな
昨夜の併用の人です。16以降は偽者です。 elをメインに今まで進めてたんですが、最近になってDxを知って、Dxの関数も使えたら楽だなぁ・・と。 とりあえず詰まってたところはなんとか解消出来たので、Dxに移行する事も視野に入れてまた考え直してみます。
つーかELなんて終わってるだろw とっくにwww 作者死んじまったんじゃねぇのwwwww つーわけで俺はLUNAを薦めるね
Dxも開発は現在進行形で進んでるんじゃないの?
空気を読まずに質問。 時々見かけるラッパーライブラリに、 SetRendeState()に与える値を自前で控えておいて、 直前に与えた値と違いがなければ実際のSetRenderState()の呼び出しを 行わないとか、DrawPrimitive()の手前でまとめて実行するようにしてたりするのだけど、 こんなんを自前で実装する意味ってあるのかな? たとえばこう。 DWORD m_RSLighting = TRUE; ... HRESULT SetLight(ID3DDevice& device, DWORD state) { if(m_RSLighting == state) return S_OK; m_RSLighting == state; return device.SetRenderState(D3DRS_LIGHT, state); } GetRenderState()等がある以上、D3DDevice()内部でもステートは管理してるのだろうし SetRenderState()のカラ呼び自体はパフォーマンスに影響するとは思えないのだけど…。 いや、確かめてないからわからないんだけどね。
GetRenderState()ってそもそもピュアデバイスだと使えないんじゃ?
自分でキャッシュする場合はPUREDEVICE前提じゃないの? まあ計測結果を知りたいなあ
>>27 デバッグ出力レベルを最大に上げてみ
「同じステートをまた設定してるYO」というwarningが出まくるから
warning出すくらいだから、多少はパフォーマンス落ちるんじゃね
つーか、>27は最早「へたなコードスレ」行きだと思うんだ。 まぁ、>30もくだらない間違いを書いてないで素直に指摘するべきだったな。 そんな警告は絶対に出ないからね。
32 :
デフォルトの名無しさん :2006/07/29(土) 10:46:03
どんだけドライバがうんこでも そもそもSetRenderStateの呼び出し自体はランタイムの領域なんだから 無駄にDrawPrimitive時にステート変更命令なんて送らないと思うけど。
>>31 お前も試してから書けよ
Ignoring redundant SetRenderState
31は、コンパイラ側の警告レベルを上げて試し、得意げになっていたに一票
いや、>31は
>>27 が間違っていると指摘したついでに余計なことまで書いたって落ちか。
そもそも、
>>27 のコードと
>>30 の指摘とは直接関係がないしな。
37 :
35 :2006/07/29(土) 11:51:54
36じゃないけど、==のことだったらそれこそ明らかに誤植で くだらない指摘だと思うんだが
>>38 31は本質じゃない指摘を上から見下ろしてする、何の役にも
立たないレスってわけか。
凄い自作自演臭
41 :
27 :2006/07/29(土) 13:16:21
>36じゃないけど、==のことだったらそれこそ明らかに誤植で >くだらない指摘だと思うんだが 誤植マジごめん。 m_RSLighting = state; こうね。 いや、自分で書いてるわけじゃないんだけど、行く先々でこんなコードを見かけるんだ。 あまりにもあちこちで遭遇するので、なんかそういう宗教でも流行ってんのかと思ったくらい。 俺の世間の狭さについては、この際置いといてもらって、 えーと、いらないでFAだよね? 「これがDirectXの常識です」くらいの指摘があったりすると、それはそれで助かるのだけれど。
うちはチェックするまでも無く明らかに変わらないステートが ほとんどだからそういうコードは書いてない。 ラッパーの実装が気になってきた時点でそんなもん卒業だと 思うんだけどな
>>41 いやだから同じステートを指定すると警告が出ると言う指摘は無視なのか
自分に都合の良い結論出てるなら聞かなきゃいいのに
例え無視できるようなのでも、デフォでwarningでるようなライブラリを公開する奴はアフォだし、 warning出さないための処理を宗教だなんて言う奴はもっとアフォだな
>>41 どれくらい意味があるか知りたいなら自分でベンチするしかない。
「なぜそのように書く人が多いのか」なら結論は出てる
また、アフォがわいてきたぞ。
48 :
27 :2006/07/29(土) 14:32:59
ごめん、自分で書いてみてた。 Direct3D9: (WARN) :Ignoring redundant SetRenderState (余分なSetRenderStateを無視しました) が出るんだね。 疑問に思ったのは、DirectX内部でも同等の処理をやっているのは確実だろうに、 これをその外側でもチェックするようにするのは定石なのかってこと。 もちろん同じステートの設定を繰り返し呼び出すことに意味なんかないに決まってるが、 誰もがご丁寧にSetRenderStateのラッパーを書くような事態は、正直少し異常に感じる。 この警告は減らすように努めるべきではあるけど、根絶を目指すほどのものでは無い様にも 思えるんだけど、どうなんだろうか。
ttp://www.gamedev.net/community/forums/topic.asp?topic_id=397317 ここだと
>However, it would be advisable to keep track of these yourself,
>so that you can avoid the overhead of making a useless D3D call.
>The memory and processing footprint of doing this should be really low, anyways.
いらんD3Dの呼び出しを回避するために、自分で追っかけたほうがいいよ。
そのためのコストなんて小さなもんなんだし、
という人もいれば、
SetRenderState( A, valueA ) // set on device
SetRenderState( A, valueB ) // set on device
SetRenderState( A, valueA ) // set on device
SetRenderState( A, valueB ) // set on device - only value that gets used
DrawSomething()
こうなるので、PureDeviceでないなら単純に描画の手前でまとめて処理するように
心がければそれで終了と言ってる人もいる様に思える。
単純にSetRenderStateだけを自前でラップしたところで
SetRenderState( A, valueA ) // set on device
SetRenderState( A, valueB ) // set on device
SetRenderState( A, valueA ) // set on device
は防げないし。
ステートの変更を自前で控えておいて、Draw〜系の呼び出し時に
まとめて迎撃するのは意味がある様にも思えるけど、
これはD3Dの内部で同じことをやってくれてないのかなあ。
警告が出ると言うことは内部でもチェックを行って回避している。 つまり自前でやれば二重にチェックが出来る。 これで安全確実。 無駄だけどな。
51 :
27 :2006/07/29(土) 14:49:39
>>49 は漏れが書きますた。
言葉が足りなかったけど、要は疑問に思ってるのは、
階層持ったモデルの描画とかを自分で処理してて、必要ないステート類の変更を
しちゃったりしないよう心がけるのはまあ当然としても、DirectXの関数を1対1で
直接ラップするような仕掛けは必要なのかということ。
Drawの発行すべてで迎撃しようとおもったら、DirectXの描画関連を全部自前で
ラップしなおして、状態を自前で控えなきゃって話になっちゃうと思うんだけど、
こんなの処理する居場所として相応しいのはDirectXのDrawXXX系の内側であって、
ユーザー側が責任持つのは不自然な気がするんだが、どうなんだと。
ラッパーの動作を崩さないためには、ラッパー外でのD3D系の関数の呼び出しは
一切禁止しなければならないだろうし、そこまで徹底したラッパーが求められるとすると、
DirectXのAPIの存在意義に関わるような。
いや、DirectXはそういうものですってんなら、それはそれで構わないんだ。
定石としてはどうなんだってところが知りたいと。
性能考えたら「自前の管理はするべき」がFA?
好きにしろで終了?
>>49 つステートブロック
最後のやつもステートブロックなら最適化される
って52だけだと誤解されるか。 同じステートブロック内なら最適化されるけど、異なるステートブロックを 連続で適用した場合には、同じステートの変更はたぶん最適化されない。
フィルターを掛けるものと、フィルターを掛けずインライン関数で素通しさせるもの 自分のエンジンでどっちがパフォーマンスが良いのか、 それは計測してみないと分からないから、そういうフィルターを実装してる人がいるんだろう。 しかし27は楽をしたがり、「いいから結論を教えろ」と威張っているのだ。
55 :
27 :2006/07/29(土) 15:50:28
>>53 理解しますた。ありがとう。
どっちかっていうとステートを塊で管理するためのものだよね。
>>54 ずばりその通りだ!
で、どうなの?
どうなのよ。
いや、本当のところ言うと、とっくに計測されつくされて
答えは出てるものかとばっかり思ってたんだ。
けど、実際にこの種の仕組みを組み込んでる人に聞いても、
潔癖症的な理由の方が先行してて(つまり自分で書いたコード以外は信用できないという)、
あまり実測に基づいてるってわけじゃないケースが多かったのさ。
自分で試した限りでは、関数呼び出しのオーバーヘッド回避くらいにはなるけど、
回避コードが増える分、長い目で見たらトントンかマイナス収支な感じっぽいし。
GPUの足を引っ張るので無いなら、少々の(少々なら)CPU上の負担は無視する選択があるだろうし。
この種のフィルターを実装したくなる人の気持ちはわかるのだけれど、
それが本当に意義のあることなのかどうか、先達の皆様の声を拝聴したいだけなんです。
だから自分で調べろっつってるだろうがこのド低脳がぁーー!
>>55 デバッグのときズラズラーっと警告がでると邪魔だから対処してるだけなんだが
今時関数呼び出しだのifだので処理速度気にするバカはいないだろ
はいはい定石定石
59 :
27 :2006/07/29(土) 16:20:10
>>56 初心者質問スレで質問して何が悪いんだー!
そう申し上げたい。
>>57 みたいな理由でやるのはわかるけど、そのためにデバイスのステート変更を
全部自前で控えといて対処ってのは、明らかに話が大きすぎると思う。
自前SetRenderStateの中でGetRenderStateして、値が同じだったらセットしないで
警告を回避するとかでもいい気がするし。
>>55 で書いたみたいな、自前SetRenderStateで処理してる人が何を主眼としてるのか、
それが知りたいわけですよ。
>今時関数呼び出しだのifだので処理速度気にするバカはいないだろ
は俺もそう思うけど、変に増えると読みづらくてかなわないじゃん。
もちろん、もし仮に自前チェックが意味無いならの話なんだけどさ。
SetRenderStateで同じものをセットしてもパフォーマンスに差は無いよ。 これでいい?
ソースは?
8月はヘルシー豆腐ハンバーグかー。 誰か作ってくれ。
自分で作れよ。
嫁さん欲しいな。
大阪だとDirectXのことダクトって呼ぶってほんと?
通天閣9 Windows阪神
↑この笑いのセンスはどこ地方?
よく吉本のお笑いが全然笑えないって言う人いるじゃんか。
俺住之江に済んでるけどそいつらにすごく共感できるんだよ。
「にいちゃんこれなんぼ?」「百万円」
これだけでぎゃはぎゃは笑える吉本ファンの脳みそはホント理解不能。
そんな俺があえて言おう!
>>68 はシベリア。
えーと、>70の笑いどころはどの辺?
吉本新喜劇の笑いどころは、笑点や水戸黄門に通じるところがあると思う。 いつも同じ単純なギャグや行動をすることで、見ている人が安心できるんじゃないかな。
あー、条件反射? つーか、頭使うことを放棄してパターンに浸る安心感か?
専門的には条件反射でなく予定調和と言います
DirectX風にギャグ言ってくれよ
突発的なのもあるけど 導入部分が大事なものも多い
win2kでSDKを導入しようしてるんですけど公式サイトの どのバージョンも未サポートみたいでインストールさえうまくいきません。 どのバージョンならインストールできたんでしょうか?お願いします
Update Octorber 2004がVC6サポートのラスト Update December 2004がWin2000サポートのラスト
80 :
77 :2006/08/01(火) 14:21:41
ありがとうございます。インストールすることができました
>>78 簡潔にして最良のコメント
これはテンプレに入れるべきだな
過去スレでも何度か質問されてたし・・・
ワールドトランスフォームで拡大縮小する方法は分かったんだけど、ちょっと違う気がして質問。 Xファイルからメッシュを拡大縮小して呼ぶ方法ってない?もしくはそれに類似する方法教えてください。
いや、それでいいだろ。 普通にスケーリングしたマトリクス乗算して描画しようよ。 変更後のサイズが固定で、法線正規化のコストを避けたいってんなら 読み込みの時に頂点加工するのも手だけど、ボーンとかまで書き換えなきゃならんし 面倒で意味ねーずらよ。
苦労して吐かせたxファイルがやたらと大きくて、他のxファイルとサイズが果てしなく違う・・・ それで個別に拡大縮小したかったわけです。
あー、わかった。 1モデル描画する都度、使うマトリクスは切り替えなさいな。
Xファイル中のトップの行列を縮小して保存し直せば?
ゲームなんですけど DirectInputでキーボードのAcquire()に失敗した場合 ループまわして成功するまでAcquire()してみるですか? それともスキップして次のフレームに委ねるですか?
DXTraceはリリースビルドでも有効?
fScaleをThingのメンバにしたらいけました。
>>88 有効。
消したい場合は
#define DXTRACE_MSG(str) DXTrace( __FILE__, (DWORD)__LINE__, 0, str, FALSE )
#define DXTRACE_ERR(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, FALSE )
#define DXTRACE_ERR_MSGBOX(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, TRUE )
を使う。
_DEBUGがdefineされてない場合消えてくれる。
ほー
覚えたての初心者です 今やっと色々ポリゴンを表示させてテクスチャを貼ることが出来たのですが 今の所は手順を 頂点バッファに頂点データを送る SetStreamSourceする SetTextureする DrawPrimitiveで描く という風にやってます。 これは毎回そうしないといけないんですか? それとテクスチャは必ず描画の前にやらないといけないんでしょうか もしかしたら何か効率的に出来るのか色々悩んでいます
頂点バッファに〜は一回でいい場合がほとんど。 SetTextureはサンプルみたいな極小なプログラムならともかく 実際ゲームを作る段階になればガンガン切り替えることになるだろ
>>92 ステートマシン、という言葉を覚えておくんだ。
DirectXの描画器は、常に最新の設定状態を覚えてる。
設定を変えないで描画を続けられるなら、それが一番低コストだけれど、
変えなきゃいけないところは変えるしかない。
効率よく変更を最小限にとどめるようにする努力は怠らない方がいいけど、
そうは言っても変えるしかない状況なんていくらでもある。
まずは気にしないでガンガン書くのがいいと思うよ。
>>93-95 なるほど確かに頂点バッファに転送するのは最初にやればいいみたいですね
と言う事は、今はまだ3個くらいしか表示させてないサンプルなので
そのまま表示させてますが
実際は
変更があれば、頂点バッファの変更内容の変更
表示したいテクスチャのオブジェクトのポインタを渡して
SetStreamSource
SetTexture
DrawPrimitive
をループさせてたくさん表示させるってことでしょうか
少しわかってきました
これから複数の画像ともっとたくさん表示させて色々やってみます
ありがとうございました
97 :
デフォルトの名無しさん :2006/08/07(月) 00:34:27
SDKをインストールしようとしているものなのですが 英語なので不安があり、おわかりになる方に相談したいのですが dxdsk_jun2006.exeを アメリカのサイトからダウンロードして ダブルクリックすると こんどは解凍の画面になって Unzip を選択して任意のフォルダに解凍して インストーラーが起動すると思うのですが 解凍後のファイルは削除しても大丈夫なのでしょうか? それとも何か意味あるんでしょうか? 教えていただけると幸いです。
大丈夫ない
99 :
デフォルトの名無しさん :2006/08/08(火) 03:21:12
D3DXVec3Project関数を使用して三次元空間の座標からスクリーン座標への変換を試みたのですが、 スクリーンの中心から離れれば離れるほど変換後の座標がズレていってしまいます。 なぜなんでしょうか? ちなみにシューティングゲームを作っていて、自機や敵を3Dオブジェクトにして、弾をスプライトという風にやっています。 弾を発射するとき、弾の初期位置を決めるときに…アレ?…と言う感じです。
つ[ 電卓 ]
デスクトップの画像を拡大縮小表示するようなプログラムで、 CPU負荷を軽減するためにDirectDrawを使用しているのですが、 マルチモニタ環境下でデスクトップからサーフェイスにBitBlt しようとすると激しく重いのです。 シングルモニタ時は秒間30回転送してもCPU使用率は0%で、 マルチモニタ時は秒間30回でCPU使用率100%に達しました。 マルチモニタ時には、DirectDrawサーフェイスはBitBltの アクセラレーションが効かないようなところに確保されるのでしょうか? それともまた別の原因があるのでしょうか? 試した事 ・ビデオカードはG550とGeforceFX5600で試したが何れも同じ結果 ・2つのモニタには同じ解像度と色数を設定した ・デスクトップ→(BitBlt)→DDBではモニタを跨いでもアクセラレーションは効いていた ・全てプライマリモニタに置いても状況変わらず デスクトップ ↓(BitBltでコピー:ハードウェアアクセラレーション効いてない) DirectDrawサーフェイス ↓(Bltで拡大縮小:ハードウェアアクセラレーション効いてる) DirectDrawサーフェイス ↓(BitBltでコピー:ハードウェアアクセラレーション効いてない) DDB
最近DirectXに興味をもったものです。 まずはDirectXを初期化(?)して、 ウィンドウを黒で塗りつぶすところからはじめようと思い、 単なるウィンドウを表示するだけのプログラムをいじり始めました。 ソース2つ、ヘッダを1つの構成で、 1つ目のソースは、WinMain関数とウィンドウプロシージャ、 それからLPDIRECT3DDEVICE9のClearとBegin〜EndSceneをしている関数。 もうひとつは、DirectXを初期化する関数です。 これはメッセージループに入る前に呼び出しています。 ヘッダはLPDIRECT3D9 pDevice、LPDIRECT3DDEVICE9 pD3d、D3DPRESENT_PARAMETERS d3dppを 定義して、二つのソースでインクルードしているのですが、 コンパイル時はエラーを吐かないのですが、 リンク時に既に定義されているというエラーが出てしまいます。 具体的には、 Main.obj : error LNK2005: "struct IDirect3DDevice9 * pDevice" (?pDevice@@3PAUIDirect3DDevice9@@A) は既に InitD3D.obj で定義されています。 Main.obj : error LNK2005: "struct _D3DPRESENT_PARAMETERS_ d3dpp" (?d3dpp@@3U_D3DPRESENT_PARAMETERS_@@A) は既に InitD3D.obj で定義されています。 Main.obj : error LNK2005: "struct IDirect3D9 * pD3d" (?pD3d@@3PAUIDirect3D9@@A) は既に InitD3D.obj で定義されています。 Debug/007_Direct3D最小コード.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 と出ます。 Main.cppでもInitD3D.cppでもこれらを定義した覚えはないのですが、 ヘッダファイルをインクルードしただけで定義されてしまうのでしょうか? ご教授いただけるとうれしいです。
外部リンケージの変数を2重定義してんだからそりゃエラーになるだろ。
104 :
102 :2006/08/08(火) 20:57:55
103さんありがとうございます。 ヘッダの中身をexternにして、別のソースファイルに実体を書いたところ、 リンクまできちんと通りました。 しかし、「アクセスが拒否されました。」と出て、プログラムは起動されませんでした。 フォルダの中を見てみるとexeファイルが出来ていたので、試しにクリックすると実行することができました。 Visual C++ 2005 Express Editionを使っていますが、何が原因なのでしょう?
うあ・・・ 微妙質問するなぁ・・・ そんなのわかったところでDirectX云々違うかもしれんそうかもしれんし、特定しにくいってばよ。 はじめはサンプルとか、チュートリアルとか確実に動くモンを改造しながらやってくれ。 当然動くべきサンプルが動かないとかいうならそりゃエラーをのっけりゃある程度原因はわかるけど 独自コードで「変なんです」言われてもソース眺めてみなきゃわかんねーよ。 過去に同じ問題に直面しました。って人ならわかるかもしれんけど。
106 :
102 :2006/08/09(水) 01:54:32
103さん、105さんありがとうございました。 PCを再起動してもう一度ビルドしたところ普通に動作しました。 最近PCの調子がおかしかったのでそのせいかと思います。
恐らくPCを再起動しなくても 開発環境を開きなおすだけでよかった予感
再起動しました=お祓いをして貰いました
109 :
デフォルトの名無しさん :2006/08/09(水) 18:44:56
質問です マウスの座標(つまり2次元のプロジェクション座標?みたいな)に応じた 画面上のZ値(Zバッファなどの)を取得する関数などはありませんか?
>>109 カーソル位置のZバッファを参照すればいい
質問です。DirectX9 SDKのaugust2006が出たようですが、 誰の役に立ってるんでしょうか
>>111 あれだ。
最新の環境で開発してる会社がどうしても治らない不具合をMSにわざわざ報告するんだ。
んで、DirectXの不具合が治ってそれに対応したら出荷する。
どっかMSと蜜にやりとりできるところがあんじゃねぇのかな?
いまだに2003Summerですがなにか?
>>111 実質DX10のベータだよ
DX9の更新はない
色々新しいもん入ってたけどXbox360の開発環境に興味がある奴が触るぐらいじゃね
>>113 DX9SDKもかなり頻繁に出たけど、スプライトぐらいしか目ぼしい更新なかったよな
使わないけど
>>114 コアは更新されないから目ぼしい更新がないのは当然。
基本的に機能に変更があるのはD3DXだけ。
変更で一番いたいのは引数の変更だな 順番と数が変わるとかライブラリとしては基地外に近い つか、残せよ。。。
>>116 禿同。
ほんのマイナーチェンジでまったくビルドが通らなくなっててビビるのはもうやだ。
あまつさえ同名の関数仕様が滅茶苦茶に変わってて、単に引数あわせるだけじゃ
どうにもならなかったりすることすらあるし…。
D3DXはほんまやりたい放題やでーフフフハーハーハー
ブヒヒヒヒすいません
さりげなくサポート対象OSにWindows2000が復活してる気がする。
( ゚,_・・゚)ブブブッ
少し趣が違うかもしれませんが、初心者がゲームプログラミングをdirectxではじめる時、 これを読めばいいぞっていう本がありませんか? アマゾンなどを覗いてもなかなか賛否両論でして…(ここでも賛否両論でしょうが、人数が多いのでこちらの方が良いかと) よろしくお願いいたします。
賛否両論です。
>>121 ここでも向こうでも賛否両論だとわかっているのなら
聞かずに自分で判断しろ。
124 :
デフォルトの名無しさん :2006/08/10(木) 18:40:14
フルスクリーンのゲームで スプライト使ってテクスチャを直接描画してるとき、 ウィンドウをAlt+Tabとかで非アクティブにしたら スプライトのEnd()でアクセス違反が起こるんだが 対処法知らない? DEVICELOSTとかは処理してるつもり。 スプライトなしの場合はうまく動く。
DEVICELOST時の処理で スプライトの OnLostDevice デバイスの Reset スプライトの OnResetDevice の順に処理してる?
>>125 してる。
TestCooperativeLevelって
エラー起こらなくても毎回呼ぶもの?
127 :
124 :2006/08/10(木) 19:39:40
TestCooperativeLevel毎回最初に呼んで調べたら うまくいったっぽい。 でもバグが出にくくなっただけかもorz
128 :
デフォルトの名無しさん :2006/08/10(木) 20:43:51
質問! モデルのツブツブ頂点FVF?が書いてるデータを取得したいのだがどうすればいい? 判定用に。 XFILEの読み込みはそこらへんに落ちてたアニメクラス使っている。
GetVertexBuffer 事故解決 俺って天才うおぉぉぉおおー!
うおぉぉぉおおー!
--------------------------- Setup - Microsoft DirectX SDK --------------------------- This version of the Microsoft DirectX SDK is not supported on this Operating System. --------------------------- OK --------------------------- ダメだぁあああああああああああ!!!!!!!
ただの記入ミスかよ。 MSめ、ぬか喜びさせやがって。
うおぉぉぉおおー!うおぉぉぉおおー!
135 :
デフォルトの名無しさん :2006/08/11(金) 06:05:55
>>131 なんだ?
インスコ
って?下手糞な自分用語使うなクズ野郎。
よしんば、インストールの略にしてもインストじゃねぇのか?
おー、すれてない人発見。
>>135 そういう言い回しが少なからず流布しているのだよ。
まぁ、間違って覚えている香具師も多いけどな。
#インストロールとかインストゥールとかインストオールってのもあったな。
ポリゴンが大量にある2D図面を表示するプログラムを作ってるのですが, 凹多角形があるので凸多角形分割したんです. すべて凸多角形なのでTRIANGLEFANで描画したのですが, 同じ関数を通っているのに,描画されない図形がいくつか出てしまいました. たとえば 多角形A x = -1437.273804, y = 15712.901367 x = -1444.715088, y = 15713.530273 x = -1437.696411, y = 15711.789063 多角形B x = -1437.273804, y = 15712.901367 x = -1437.696411, y = 15711.789063 x = -1433.636719, y = 15713.075195 x = -1434.369751, y = 15713.475586 が描画されません. 裏表を間違えているのかと思い描画順を逆にしたりしてみたのですが 意味がありませんでした. 頂点はカラーと座標しか持っていないものです. どういったことが考えられるでしょうか...どなたかお願いします.
「インスコ」なんて言葉を使う奴は十中八九初心者。
139 :
デフォルトの名無しさん :2006/08/11(金) 07:28:24
>>139 「ちがう」とまでは言えないべさ。
>136は語源に言及していないのだし。
実際、(余り知らずに)2ch語を使いたがる高校生辺りがよく使っているよ。
Googleでも434千件も引っかかるしね。
>>140 なにそれ?
池沼もGoogleでのヒット件数が多いからよく使うとか言っていいわけ?w
>>141 池沼はそれ単体でヒットしても本来の意味の可能性もあるから一概には言えないんでない?
音で聞いても本来の文字の積もりかもしれないわけだし。
で、それはさておき何粘着しているの? 正直どうでもいいじゃん。
>136や>138が間違っているってことでもないんだし。
#そもそもDirectXに全く関係ないことは言うに及ばず。
関係ないことをわざわざ長文で・・・
お前らそろそろどこが縦読みか教えてくれませんかよ?
インスコは普通に言うし、通じるしな。
リアルならともかく2chでインスコに突っ込む奴が居るとは思わなかった 壮大な釣りか
DIRECTINPUTの GetDeviceData したら DIERR_NOTBUFFERED がかえって来たんだけど、なんか順番抜かしてた? その対処法というかやるべきことみたいのとかググっても全然出て来ないし、教えてエロい人。
「間違えた奴がそう思わせたいだけ」ってどっかに元ネタあったっけ
インスコに突っ込まれるとはおもわなんだ。 誰もが突っ込みたくなる釣り。プロだな。
インスコって2ch用語でおkだよね? 俺釣られてる?
152 :
デフォルトの名無しさん :2006/08/11(金) 14:11:35
っていうか infファイル書き換えれば (たった数文字書き加えれば) 2000だろうが95だろうが インストールできるようになるでホンマに WMP9をWindows98SEにインストールする手順とまったく同じ。
まあこういうアホもいるよ 「インストールとは、ソフトウェアをOSで使用できるように格納することである」 これは明確な無知。 インストールというのは据え置くと言う意味で、 ハードウェアの取り付けにさえインストールと呼ぶ。 無知バカはソフトだけだと思ってる。
>>153 ソフトだけだろ。
ここは日本で、インストールと install は違うということは、
覚えておいたほうがいい。
>>155 「インストール」は日本語で
`install'は英語
とでも言いたいのか?
漏れの目の前には「演算プロセッサボードインストールマニュアル」なるものがあるのだが。 いつから演算プロセッサボードをソフトウェアと言うようになったんだ?
きっと
>>153 みたいなアフォが書いたんだよ。(w
Xファイル表示どうするんですか?
金曜夜9時にチャンネルを10に回せば表示されるよ
161 :
デフォルトの名無しさん :2006/08/11(金) 17:51:15
ソフトだけだと思ってたバカが図星突かれるとこうなるということだよw 無知すぎ
Wikipediaがどうかしたの?
164 :
デフォルトの名無しさん :2006/08/11(金) 19:13:18
結局ハードも対象なんじゃん(プ
165 :
デフォルトの名無しさん :2006/08/11(金) 19:17:11
ま、これに懲りたらサル未満のバカが人間様に口応えするなんていうバカをやめてもらいたいもんですなw サル未満の出来損ないはとっとと消えろ(プ
>>152 それで問題は出てない?
本当は動くのに単にバージョンチェックで弾いているだけってことでOK?
アパートに住んでいると言ったら、金持ちなんだとわざとらしく驚くような人種なんだろう。
アパートに住んでいると言ったら、金持ちなんだとわざとらしく驚くような人種なんだろう。
>なお、英語のinstallは「設置する」「取り付ける」といった意味であり、コンピュータやモニタを設置すること、周辺機器を接続すること、拡張カードを取り付けることなど、ハードウェア全般についても用いるが、日本語ではソフトウェアを導入する意味に用いる事が多い。 ???
>>152 infファイルなんて添付されて無いぞぉおおおおおおおおおお!!!!
>>170 インストールの履歴
(最新版) (前の版) 2006年8月11日 (金) 12:12 125.100.229.66 (ノート) (→概要)
これすれ見て慌てて書き換えたんだろ。(w
173 :
デフォルトの名無しさん :2006/08/11(金) 22:53:10
infでなくてなんだっけ 何かあるんだよ メモ帳で開くといんすころーのれバージョンが書いてあるやつ
そう言われてみればいんすころーのれバージョンが書いてあるやつあったな。 なんだっけ?
添付されてるサンプルがかなり変わってるな
俺の腹のバージョンがボストロールです。
>>153 より可哀相な子が何人もDirectXに関わってる事に衝撃を受けた
178 :
デフォルトの名無しさん :2006/08/12(土) 00:00:44
>>177 はぁ?何いってんの?可哀想なのはお前だろプゲラwwwwww
バージョン書いてるファイルなんてどこにも無かったぜ dx_setenv.cmdかと思ったら違うっぽいしな
>>179 何?君?ワレようと必死なの?
ソフトなんてワレてもどうせ覚えるの面倒で使わないぞw
会社でmax xsi lw maya のライセンスを買ってもらっておきながら
ついに起動するのすら面倒で(ライセンスキー打ってユーザ登録する画面から滅入るw)退職した
俺がいうんだ。間違いないw
クビか
LWはハードウェアのドングルじゃないのか? ほかは知らんがせいぜい一度登録したら終わりだと思うんだが…… 毎回入力するなら自動化すればいいのに
ニートの不安から精神を病むことは多い。 空想上の激務と空想上の退職を本当の記憶と思いこんでいるのだろう。
デスマーチで精神おかしくなった結果 起動するのすら面倒に感じるようになってしまった と考えればつじつまが合う
そういやこの手のツールって全然.NETみないな
187 :
デフォルトの名無しさん :2006/08/12(土) 23:24:52
ドングルころころ ドングルこー oh yeah(c'mon baby) にハマってさあ大変
ドジョウが出てきて、はいどうじょ↓
| ∧_∧ |. (・ω・` )スルー |スス… /J J ↓ ,,, し―-J
ティーポットは表示できたんだけど、これをアニメ調(トゥーン)表示にするにはどうすれば良い?
シェーダ使いなさいな。 固定機能だけでも、スペキュラを極端な値に設定してやるとかで ある程度までなら対処できる。 環境マップでも可。 インキング(縁取り)は拡大&反転でイナフだ。
Zバッファ有効にしてるから拡大してもう一つ表示しても大差ないってことですか light.Diffuse.r = 2.5f; light.Diffuse.g = 2.5f; light.Diffuse.b = 2.5f; でちょうど良くなった
ウィンドウサイズが1:1のときは普通にxファイルは表示されるのですが、2:1などの1:1じゃないときは拡大縮小されて表示されます。 ウィンドウサイズに関係なくそのまま表示するにはどうしたら良いでしょうか?
>>191 固定機能でトゥーンシェーディングやりたいなら、D3DTSS_TEXCOORDINDEXと
D3DTSS_TEXTURETRANSFORMFLAGSを設定してトゥーン用のテクスチャを
セットすれば簡単にできるが、シェーダを使った方が簡単だと思う。
xファイルの中に入ってるアニメーションを再生する方法がワケワカメorz
>>194 D3DXMatrixPerspectiveFovLH の Aspect を
(float)width / height ね。
>>196 TWIN TAIL LOVERS か
ウマイハナシ でググればソースがあるぞ。
SDKよりは判り易いかと
自分は野村XX(ウマイハナシ)さんの奴を、改造しまくって使ってるでよ。
DirectSoundBufferのRestoreっていままで気にも留めなかったけど、 使ったことないのに気づいた。これが必要になるようなバッファのロストって本当に起こるの?
>199 ハード上に専用メモリを持っているサウンドカードを使っている奴って本当にいるの?
DirectShow is no longer recommended for game developmentということらしいですが、 それなら何にすればいいんでしょうか?
まんどいから全部メインメモリに置いてる。 どうせストリームがほとんどだから大して使わないし。
て いうかよお------------------------------------------------------------------------------------------ なんでよお----------------------------------------------------------------------------------------- DXやってる奴というのはよお-------------------------------------------------------------------------- 「ファイル」というと「データファイル」 としか思い浮かべられねえんだ?あ?コラ。オウ。 「ファイル」といえば「キーボード」も含むよな?あ?コラ。オウ。 理由は言わんでもわかりますね。
>203 DXってDirectX?で「キーボード」といえば「DirectInputDevice」でウッドボール。
>>203 本当に頭のいい人間は誰にでもわかりやすい表現を使う。
君みたいにトリビアに頼らなくても普通のすごいの俺等はw
本当に頭のいい人間はとっくに自殺している。
詳しく
210 :
デフォルトの名無しさん :2006/08/15(火) 03:31:54
kwsk
なんのお?
本当に頭のいい人はとっくに自殺している件。
XNAハジマタ\(^o^)/~
214 :
デフォルトの名無しさん :2006/08/15(火) 19:24:36
まずはOSをXPに入れ替えるところから始めろ。
金がない学生とか、よく古い環境でなんとかしようと四苦八苦してるけど、 その時間をバイトして金を貯めた方が早くないの?
どうでもいい
どうせ新しい環境で四苦八苦することになる。
//-------------------------------------------------------------------------------------- // File: DXUT.h // // DirectX SDK Direct3D sample framework // // Copyright (c) Microsoft Corporation. All rights reserved. //-------------------------------------------------------------------------------------- #pragma once #ifndef DXUT_H #define DXUT_H #ifndef UNICODE #error "The sample framework requires a Unicode build. If you are using Microsoft Visual C++ .NET, under the General tab of the project properties change the Character Set to 'Use Unicode Character Set'." #endif DXUT.hをインクルードしてコンパイルすると、13行目の「#error "The 〜Set'."」でerror C1189が出るんだが、どうにかならない? 正直なんでここでエラーが出るか分からないorz
ヒント:エキサイト翻訳
ユニコードが必要って書いてあるままじゃん
ちなみに、 The sample framework requires a Unicode build. If you are using Microsoft Visual C++ .NET, under the General tab of the project properties change the Character Set to 'Use Unicode Character Set この通りにUnicodeセットでプロジェクトを変更すると、鬼のごとく参照エラーが・・・鬱だしのう
そっちのエアーを晒せ。
エラーだorz
解決したいものを解決したい粒度で情報開示せよ
もう解決したから
main.cpp error C2440: '初期化中' : 'const char [13]' から 'LPCWSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [13]' から 'LPCWSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 error C2664: 'UnregisterClassW' : 1 番目の引数を 'const char [13]' から 'LPCWSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
CDirectX9.cpp CD3DXObject.cpp error C2259: 'CAllocateHierarchy' : 抽象クラスをインスタンス化できません。 次のメンバが原因です : 'HRESULT ID3DXAllocateHierarchy::CreateFrame(LPCSTR,LPD3DXFRAME * )' : 純粋仮想関数は定義されていません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(134) : 'ID3DXAllocateHierarchy::CreateFrame' の宣言を確認してください。 'HRESULT ID3DXAllocateHierarchy::CreateMeshContainer(LPCSTR,const D3DXMESHDATA *,const D3DXMATERIAL *,const D3DXEFFECTINSTANCE *,DWORD,const DWORD *,LPD3DXSKININFO,LPD3DXMESHCONTAINER * )' : 純粋仮想関数は定義されていません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(168) : 'ID3DXAllocateHierarchy::CreateMeshContainer' の宣言を確認してください。 error C2664: 'D3DXLoadMeshHierarchyFromXW' : 1 番目の引数を 'char *' から 'LPCWSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 error C2039: 'GetMaxNumMatrices' : 'ID3DXAnimationController' のメンバではありません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(687) : 'ID3DXAnimationController' の宣言を確認してください。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。
error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C2440: '初期化中' : 'int' から 'D3DXPRIORITY_TYPE' に変換できません。 列挙型への変換には static_cast、C スタイル キャストまたは関数スタイル キャストが必要です。 error C2259: 'CAllocateHierarchy' : 抽象クラスをインスタンス化できません。 次のメンバが原因です : 'HRESULT ID3DXAllocateHierarchy::CreateFrame(LPCSTR,LPD3DXFRAME * )' : 純粋仮想関数は定義されていません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(134) : 'ID3DXAllocateHierarchy::CreateFrame' の宣言を確認してください。 'HRESULT ID3DXAllocateHierarchy::CreateMeshContainer(LPCSTR,const D3DXMESHDATA *,const D3DXMATERIAL *,const D3DXEFFECTINSTANCE *,DWORD,const DWORD *,LPD3DXSKININFO,LPD3DXMESHCONTAINER * )' : 純粋仮想関数は定義されていません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(168) : 'ID3DXAllocateHierarchy::CreateMeshContainer' の宣言を確認してください。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C2039: 'SetTime' : 'ID3DXAnimationController' のメンバではありません。 d:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\d3dx9anim.h(687) : 'ID3DXAnimationController' の宣言を確認してください。
CD3DXMesh.cpp error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE_ARRAY': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C2440: '=' : 'TCHAR *' から 'LPSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
CD3DXFrame.cpp error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C2440: '=' : 'TCHAR *' から 'LPSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 CAllocateHierarchy.cpp error C2664: 'D3DXCreateTextureFromFileW' : 2 番目の引数を 'LPSTR' から 'LPCWSTR' に変換できません。 指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。 error C3861: 'SAFE_RELEASE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'SAFE_DELETE': 識別子は、引数依存の照合を使用しても見つかりません。
逆切れと受け取ってもよさそうな長さです
238 :
デフォルトの名無しさん :2006/08/16(水) 14:49:06
[June 2005]から[August 2006:に変えてから >error C2660: 'ID3DXFont::DrawTextA' : 関数に 5 個の引数を指定できません。 のエラーが出るようになりました。 LPD3DXFONT pFont; RECT rect={iX,iY,iX+1000,iY+100}; pFont->DrawText(szStr,-1,&rect,DT_LEFT | DT_BOTTOM | DT_SINGLELINE | DT_NOCLIP,0xffffffff); この3行目でエラーが出ます。 検索してもDrawText(A/W)の引数は5個書かれているものしかありません。 この引数をはどう変えれば良いのでしょうか?
仕様がころころかわす糞APIなので、使わないのがベストな解決方法。 自分で簡単に作れる部分なので、使うメリットは微塵もない。
m_pFont->DrawText( NULL, szStr, -1, &rect, DT_LEFT | (略), 0xffffffff );
ドキュメント出てないの?
242 :
238 :2006/08/16(水) 17:14:55
レスありがとうございます。
>>240 のやり方で問題は解決されました。
ヘルプやMSDNを検索してみたのですがこの関数だけ古いものしか出てきませんでした。
DIERR_INPUTLOSTsDIERR_NOTACQUIREDfuit@at@4k?
質問です。
class Graphics {
public:
Graphics(); {}
Graphics(HWND hWnd) {
Initialize(hWnd);
}
void Initialize(HWND hWnd) {
this->hWnd = hWnd;
後は
ttp://rina.jpn.ph/~rance/directx8/02/05.htmlの 『2.IDirect3D8インターフェイスの取得』と、
『3.IDirect3DDevice8インターフェイスの作成』の
『ウィンドウモード・アプリケーションのデバイス作成例』と似たり寄ったり
(pD3Dなどがメンバである点と、CreateDeviceの返り値を調べ、
失敗ならメッセージボックスを出すようにしてある点で異なる)
}
(省略)
private:
HWND hWnd;
LPDIRECT3D9 pD3D;
D3DPRESENT_PARAMETERS d3dpp;
LPDIRECT3DDEVICE9 pD3DDevice;
(省略)
};
>>245 に続く…
>>244 のようなクラスを作って
Graphics graphics;
graphics.Initialize(hWnd);
とするとメッセージボックスは表示されず、描画も問題なく行うことができるのですが、
Graphics* graphics;
graphics = new Graphics(hWnd);
とするとメッセージボックスが出てきてしまい、
無視して描画を行おうとするとメモリ参照エラーが出てしまいます。
両者の違いは何なのでしょうか?
回答じゃなくてすまんが、クラスのhWndと引数のhWndみたいに同じ変数名で共存できるのか
this->hWnd = hWnd; こうなってりゃ平気。
DIERR_INPUTLOSTとDIERR_NOTACQUIREDはどこがちがうですか?
D3DERR_DEVICELOSTとD3DERR_DEVICENOTRESETと同じ
> とするとメッセージボックスが出てきてしまい、 なんで、どんなメッセージかぐらい書かないんだろうか…
251 :
244 :2006/08/17(木) 04:57:34
>>250 メッセージボックスはエラーが起こったことを知らせるために
自分で呼び出しているものなので、メッセージに意味はありません。
if(FAILED(pD3D->CreateDevice(〜))) {
MessageBox(〜);
}
みたいな感じです。
自己解決しました。
HRESULTが単なるbool値モドキではなく、
失敗の原因毎に返す値が違うということを
>>248-249 のおかげで思い出す。
↓
メッセージボックスにHRESULTの値を表示させて
原因を特定するべきだと
>>250 のおかげで気づく。
↓
D3DERR_INVALIDCALLが返されていることが判明。
メソッドのパラメータに無効な値が設定されているかもしれない。
引数のウィンドウハンドルかD3DPRESENT_PARAMETERS構造体が怪しい。
↓
D3DPRESENT_PARAMETERS構造体を
ZeroMemoryでクリアするのを忘れていたことに気づくorz
単純ミスですみません。皆さんに感謝します。
これは、単にインスタンスを宣言するのとnewによる動的生成を行うのでは
メンバ変数の初期化のされ方が異なるということですかね?
この辺りに詳しい方は是非教えてください。
253 :
244 :2006/08/17(木) 06:08:17
255 :
デフォルトの名無しさん :2006/08/17(木) 15:36:10
Xファイルから読み込んだ3Dのオブジェクトが全て表示されず 腹や腕の一部がすっぽり抜け落ちたり、体が半分無くなってしまう事があります。 輪切りにしたソフビ人形みたいな状態です。 小刻みにオブジェクトの座標を変えながら試行錯誤してたのですが もしかしてDirectXの3Dの座標の空間には「負の領域」は無いのでしょうか?
カビゴンが寝返りうってない?
258 :
デフォルトの名無しさん :2006/08/17(木) 16:33:16
DirectXのデバック版と製品版を両方インストールしてしまって、 製品版が使えません。誰か助けてください。
259 :
デフォルトの名無しさん :2006/08/17(木) 16:46:57
デバッグ版と製品版で速度差があるとか寝言こいてるバカは何なの。 全然ないのを見せても理解できる頭がない
Control Planel でDebug用ランタイムにしてデバッグレベル上げると流石に速度は落ちるけどな。
長い初期化が終わって、ようやくゲームできるぜいと思ったら Debugランタイムのままになっていて重ス!みたいなのってあるよな。開発機が一緒だと。
>>252 > これは、単にインスタンスを宣言するのとnewによる動的生成を行うのでは
> メンバ変数の初期化のされ方が異なるということですかね?
(暗黙の) 初期化? C/C++ には、そんな便利な機能はないよ。
「自動変数も動的に確保した変数も内容は無茶苦茶になっている」
と思ってプログラムしないとダメだよ。
(静的変数とかは別ね。)
>>252 > これは、単にインスタンスを宣言するのとnewによる動的生成を行うのでは
> メンバ変数の初期化のされ方が異なるということですかね?
初期化のされ方は同じ。この場合はD3D〜構造体のデフォルトコンストラクタ
(=何もしない)が呼ばれて、何も初期化されてない。
ただ領域を確保する場所が違うから、そこに入っていた値によって
たまたま上手く動いたり、動かなかったりしたのでは。
桐たんすとインスタンスと良いんでございますって似てるよね
DirectX12!!!!!!!!!!!!!
MeshTextureCoordsって、頂点に対するUV何ですよねぇ。 かなり不便な気が
267 :
デフォルトの名無しさん :2006/08/18(金) 18:01:36
すみません。質問なのですが、DDSファイルを作るためにdirectX utilitiesの 中のDirectX Texture Toolを起動しようとしてるのですが、 Unable to create Direct3D Device. Please make sure your desktop color depth is 16 or 32 bit. と出ました。画面の色も32ビットにしています。 texture作れなくて困ってます。何か他に起動しない理由とかありますか?? よろしくお願いします。
16bitカラーも試してみたか?
269 :
デフォルトの名無しさん :2006/08/18(金) 18:05:18
>>268 レスどうもです。。16ビットも試してみました。。
DirectXのサンプル動いてるの?
271 :
デフォルトの名無しさん :2006/08/18(金) 20:21:05
>>270 DirectX9のデモのドーナツというのを試してみました。
動いてました・・・orz
272 :
255 :2006/08/18(金) 20:45:39
自己解決しました プロジェクション変換してないのが原因でした…orz
273 :
デフォルトの名無しさん :2006/08/18(金) 21:04:01
>>267 メモリ足りないんじゃね?
画面狭くしてみたら?
C++でD3Dを使う場合 一番楽なのはELでFA? DirectX9.0cのサンプル見ながら一日かけてキーボード入力した方向に動くだけの物が出来た。 けどこんなペースじゃゲーム開発する前にDirectX10が出そうだよ…
>>267 OSはWindows2000?XP?
XPに変えたら動いたような気がする。それかバージョンアップか。
>>274 ELってのが何か知らんが、これから勉強するなら他人が作ったラッパーとか
使わないほうがいいよ。変なクセがつくから。
単純に楽してゲーム作りたいなら、何もDirectXにこだわらなくても
OpenGLっつーメチャ簡単なライブラリがあるし。
>>274 実際のゲーム製作だって土台がしっかりしてる分何をやるにも込み入った手続きがいるぞ。
ショボそうなステータス画面作るのだってどんなに全力疾走しても1週間以上はかかる。
1日でキー入力で動くとこまでいった?
もうゲームなんてできたも同然だろw
elは始めて触るには確かに良いけど、すぐに物足りなくなる DXライブラリも同じくらい簡単。こっちは更新もサポートもしてるから俺はオススメ
D3DXが一番マシ。 ただしSpriteとFont系は使うな。
xファイル内のアニメーション読んで再生するのが難しくて萎える。DX行こうかな・・
>>267 Unable to create Direct3D Device.
でググると一番最初に出るぞ。もし、これだったらググレカス
新しいSDKじゃSpriteは改善されてるけど、あれより速いの作れる奴なんて何人いるやら
>>283 速い?
なんで「速い」なんて言葉が出てくるのか疑問。
速さ求めるところですか?
また、速さ要求するところで使える仕様ですか?
頭空のくせにテキトウなこと言わないでくださいよw
某2D同人STGでスプライト描画が重い重い言われてんだから 速さは求められてんじゃね
>>285 使い手がアホなんだろ。
不透明のフィルレートどうにかして速くならなかったらもうどうしようもねぇって。
だしたらだした分だけ重くなる。頂点数なら気にするな3Dゲームと比較したら気にするほど無意味だろ。
それがライブラリちょこっと変えただけで速くなった程度の速度じゃ、
万人(といっても限度はあるが)の環境を考えたときにその速さに意味のあることかどうかなんて普通わかるだろ?
アホみたいに敵弾やら煙やら出しまくるゲーム見る限り 「普通わかるだろ?」に頷けはしないな。 実際どれくらい違うのか白黒つけたいならソース出すしかないだろう
無闇に噛み付いているアホがいます
だいたい弾幕っつったってDirectXのパーティクルのサンプル超えるぐらいの数だすわけ? そりゃとっても綺麗なSTGできてんだろうなw
あとで最適化すればいいやとか思って、最初は パーティクル1個がごとにワールド行列セットしてDrawPrimitiveしたんですよ。 それで、開発が進む中で、アニメ機能とかスクリプト機能とか ビルボードだけでなくスキンメッシュも扱えるとか、 デザイナーらの要望通りに高機能なパーティクルシステムを組んでいると、 いつの間にか、もうとうにもならなくなっていたんです。
292 :
デフォルトの名無しさん :2006/08/19(土) 01:50:18
DirectX9を使ってプログラムを組もうとしているのですが どうやら僕のPCにはデバイスが無いみたいです。 あれやこれや調べていたらどうやら設定を変えるなり ドライバをインストールすればどうにかなりそうな情報を得ました。が方法がわかりません。 私SOTECのS2120Cを使っております。XPです。 デバイスを入れるって言うのでしょうか? をしてDirectXを組めるようにするにはどういった 設定が必要でしょうか?
>>290 マジレスすると桁違いの数描いてると思われるゲームはある
日本語でおk
>>293 そんな市販にもありそうにねぇの想定して何がしてぇの?そいつ。
320X240でフィルレート気にしない生活送れよって感じだ。
>>295 なんか嫌なことでもあったのか?
それとも元からそんな性格なのか?
はいはいジェネレーションギャップジェネレーションギャップ
確かに市販にもなさそうなもの想定してるのには疑問だな。
>>290 ポイントスプライトとポリゴンばら書きを一緒に扱っちゃいかんのだろうが、
それってそもそも表現の方法論が明後日の方向向いてるから、そーいう目に会うってだけなんだよな。
1000枚を2000枚に増やしたところで見た目のリッチさが倍になるわけでもないだろうに、
なんでそんな方向ばっかり努力すんだろうか。
つか、実際どんだけ書いたら重いなんてことになるんだか、正直ぴんとこないんだが、
コード見せてもらったら
・メッセージループがBUSYループでCPUぱっつんぱっつん
・描画命令の発行が1ポリゴン単位
・色々理論武装している割には、頂点バッファのダブル、トリプル化等を試みた形跡はなくロックしまくり
なんてオチだったりするのも、よくある話。
フィルレートフィルレート言いながら、テクスチャ単位のソートもしてないから
フェッチ時のキャッシュミス頻発しすぎで重くなってたりとか。
フィルレート以前の問題ちゃうんかと。
>>299 そんなので遅く感じるようなことも俺はないと思うんだがな。
だいたい、その上の3つの奴だって気が付かずに組んでたら気にならない速度はでるでしょ?
>フィルレートフィルレート言いながら、テクスチャ単位のソートもしてないから
>フェッチ時のキャッシュミス頻発しすぎで重くなってたりとか。
あと、これ↑もシェーダ使いまくりでも問題無く動くのに
こんなの気にする必要ってあるわけ?
また、気にしてゲーム組めるの?普通に描画順優先じゃないの?
テクスチャ毎にソートする意味ってそんなにある?
301 :
267 :2006/08/19(土) 06:58:37
>>282 まさかソースをいじらなくてはいけないとは・・・
ほんと困ってたんです。ご教授ありがとうございました。
まあ描画順に並べれば大体は同じテクスチャで固まるだろうしな。
>>300 いや、気にしなくても最近のマシンなら相応の速度は出るが、
逆にこの程度のことを対策しないで速度のこと気にするのは
どっか前提が間違ってるって話。
シェーダ類を大量投入するような描画表現するんでも、多少は気にしたほうがいいぞ。
・メッセージループがBUSYループでCPUぱっつんぱっつん
これはただのプログラムミスだし、
・描画命令の発行が1ポリゴン単位
・色々理論武装している割には、頂点バッファのダブル、トリプル化等を試みた形跡はなくロックしまくり
これは描画内容の性質にもよるが、同じテクスチャ上のスプライトを大量に操作するなら
頂点バッファをCPUで加工して一括描画した方が通常断然速いのが普通だし、
>フィルレートフィルレート言いながら、テクスチャ単位のソートもしてないから
>フェッチ時のキャッシュミス頻発しすぎで重くなってたりとか。
これもカードの性能差でどうとでもなるように見えるけど、閾値を越えると隠蔽されないコスト。
それこそ1000枚が2000枚程度の違いにはなる。
とはいえ、違ったからなんだ?ってこと。
いずれも普通に作ってればテクスチャがあっちゃこっちゃ行った描画は無いだろうし、
ちょっと気をつければどうとでもなることだしなー。
ていうかパーティクルのサンプルって前のSDKに入ってたモーションブラー付きの奴だろ? あれぐらい余裕で超えてるゲームは本当にいくらでもあるはずだが。 もしDirect3D10のを指してるのなら知らん
知らんなら余計な口出しすな
>>303 俺はそんなの気にするより先にやることいくらでもあると言ってるんだがな。
いや、そういうと話が違う方へいくからやめるか
>>306 は撤回。
なんつーかね。
意味無いんだよ。
そんなの。
一体、いつの知識で止まってるの?
テクスチャでソートってマテリアルソートやるってことでしょ?
こんなの意味無いの。意味無ーし。前から描画してフィルレート稼いだほうがよっぽど速くなるよ。
いまどき1つのモデル内でテクスチャの切り替えが頻繁に起こるのに馬鹿な発言もいい加減にしろよ。
お前、バンプマップすら組んだことねーだろ?ん?
>307 なんか嫌な事でも(ry
現実をみるべき。 ここの住人のうち6割は弾幕シューティングか2D格闘を作ってる。 2割がちっさい技術デモ専門で、あとはただの初心者いじり。 だからニーズに合ってるんだよ
と、調べもしないで根拠のない自分勝手な妄想を語る人が確実に一人。
まとめると、 材質、テクスチャはまとめておけ。 しか言って無いじゃん...。
312 :
デフォルトの名無しさん :2006/08/19(土) 20:15:59
ttp://www.nomuraz.com/denpa/prog004.htm ここの中ほどにある『DirectX9のアニメーションな話』の『読みやすく整形する所からはじめましょう。』以下にあるサンプルを触っています。
ビルドすると
CAllocateHierarchy Alloc( this ); で
'CAllocateHierarchy' : 抽象クラスをインスタンス化できません。
というエラーが出るのですがどう解決すればいいのでしょうか。
VC++.net 2003、DX2006Aug です。
>>311 俺は不必要ならまとめるなといいたい。
まとめた時点で前から描画という後ろにあれば
「描画しない」というもっとも単純でかつ最速の方法ができなくなる。
それに物体が離れたときにまとまってると今度は片方はクリッピングで完全にはじいてしまえるのに
まとめてしまっているためにクリッピングができないこともある。
要するに、Zバッファを活かす派と、ステート変更を最小にする派の争いか 俺も前者の方が楽だからというだけで前者かな
俺は軽い描画パスでZバッファを埋めておいてから残りの描画をする派。
VMR9のレンダーレスモードを試してみたんですが、 なんかムービーに、メインのゲームの描画がチラチラ混じるんですよ。 やりたいことは、単に普通のムービーテクスチャなんですけど、 うまく同期をとる手段はないでしょうか? SDKのAllocaterサンプルのような形にメインループを大変更するのは嫌なんですけど・・・
317 :
312 :2006/08/20(日) 04:07:29
312のサンプルではなくDirectXのサンプル(C++\Direct3D\SkinnedMesh)は正常にビルド出来たのでそれを自分のプログラムに組み込もうとしたのですが、 >error C2664: 'StringCchCopyA' : 1 番目の引数を 'WCHAR [256]' から 'char *' に変換できません。 や >error C2664: 'D3DXCreateEffectFromFileA' : 2 番目の引数を 'WCHAR [260]' から 'LPCSTR' に変換できません。 などのエラーが出ます。 組み込むと言ってもファイル自体をコピーしてソースファイルとして追加しただけなのですが、これら以外に何か設定が必要なのでしょうか。 古いサンプルで時々上記のエラーを目にすることがありますが、 作った人は問題ないのにこちらでビルドすると引数で異常が出るとか・・・今回はDirectXのバージョンは同じなのになんでだorz
>317 ヒント:UNICODE
俺はDXUtil.hがないって帰ってくるな
320 :
312 :2006/08/20(日) 16:41:18
>>318 レスありがとうございます。
文字セットという項目があったのですね。
とりあえずUnicodeとマルチバイト共に対応できるようTCHAR等に変換していく作業を行っていきます。
あまり利点・欠点が掴みきれていないのですが、
アプリが海外向けでない場合はマルチバイト文字セットで開発を行って問題ないのでしょうか。
>>319 過去のSDKに入っているDXUtil.hを持ってくれば通りました。
過去のSDK・・・ 誰かDXUtil.hうpしてくれ・・・・
毎回思うんだけど、SDK開発者はアホなのか? 自分の環境で一度SDKを抜いてもう一度インストールして動くことを確認してからリリースしろよな。 もう、個人で適当に修正して確認もしないでリリースしてるようにしか見えない。
ただで提供してやってんだよ 嫌なら使うんじゃねーよということですよ
互換性を気にするなら何でOpenGL使わないの?
ものすごく生産性が下がると思ふ
QBで検索かけたら
>>5 >>43 >>187 の3人上がったからドラゴンフライの3人バージョンやるか(何か名前があった気が・・・)
>>5 を中心に
>>43 を走らせ
>>187 でガンガン攻める。
アイシールド21の真竜寺?のラン・パス・スクリーンやphoenixのopt.Sweepとか・・・
で俺はライン志望な
激しく誤爆スマソ
332 :
312=317 :2006/08/21(月) 04:17:44
たびたび申し訳ありません。 DX2006AugのC++\Direct3D\SkinnedMeshのソースをUnicode版から汎用版(TCHAR等)に変換する作業をしています。 調べつつ置換するだけですので問題ないと思っていましたが、肝心の置換するものが不明なのがありました。 >error C2664: 'MultiByteToWideChar' : 5 番目の引数を 'TCHAR [512]' から 'LPWSTR' に変換できません。 >error C2664: 'WideCharToMultiByte' : 3 番目の引数を 'LPCTSTR' から 'LPCWSTR' に変換できません。 >error C2664: 'CommandLineToArgvW' : 1 番目の引数を 'LPSTR' から 'LPCWSTR' に変換できません。 [MultiByteToWideChar][WideCharToMultiByte][CommandLineToArgvW] この3つの関数を何に置き換えるべきなのでしょうか。 合わせて WCHAR* dest; を TCHAR* dest; に変えると「定義されていない識別子」とエラーが出ます。 dest等に入れる値はTCHAR*型ですので通るはずなのですが、別の表記にしないといけないのでしょうか。
君にはDirectXはまだ早いんじゃね?
MultiByteToWideChar や WideCharToMultiByte が何を する関数か調べた? これらの関数が何のために使われているかが分かれば、 どうすればいいのか判るはず。
つか、関数名を見れば調べるまでもないなw
みんなUnicode対応ってしてる? 外人も使うツールを作る仕事をしてるとかなければ 自己満足に終わったりしない?
スレ違い
DirectXもこれからはUnicode対応が当たり前。 スレ違いと言うほどのこともない。
>>338 それをいったらほとんどのスレでOKな話題になってしまうわけだが
Unicode対応なんて当たり前だろ? 難しいことなんて何も無い。
めんどいからちゃー
>>336 俺は外人も使うツールを作っているがマルチバイトでしか作ってない。
多言語を同時に使うのでなければUnicode対応は必要ないな。
文字列は全てリソースに入れて日本語と英語を用意してある。
たまに勝手に中文リソースとか追加されて再配布されてたりする。
そもそも外人だって彼らが普段使っているローカルなコード体系で テキスト処理をしたい場合が多いわけで、Unicodeを押し付けるよりは OEMCPとかシステムのロケールとかで処理する方が適切なことも多い。
シェーダーと、シェーディングって同じ意ですか?
バッターとバッティングって同じ意ですか?
>>336 どっちでもコンパイル出来るようにしてるけど?
OS的にUnicodeがネイティブだから
348 :
312=317 :2006/08/21(月) 22:46:55
レスありがとうございます。 お蔭様でなんとかビルドエラーは解消されましたが、実行でエラーが出たのでサンプルを元に1つ1つ解消していくことにしました。 しかしまたエラーが出てしまい、調べても解決出来ませんでしたので手を貸していただけないでしょうか。 2006Augのサンプル[C++\Direct3D\SkinnedMesh]をフォルダごと[d:\test\]以下にコピーし、変更を行った結果 >error C2859: d:\test\skinnedmesh\debug\vc70.pdb は、このプリコンパイル済みヘッダーが作成されたときに使用された pdb ファイルではありません。プリコンパイル済みヘッダーを再作成してください。 (ファイル)SkinnedMesh のエラーが出ます。 エラー元はCommonフォルダ内の各ファイルに記述されている「#include "dxstdafx.h"」のようです。 変更は ・ソリューションエクスプローラー [Common]フォルダのファイルとアイコンの相対パスを下記に修正 C:\Program Files\Microsoft DirectX SDK (August 2006)\Samples\C++\Common\(ファイル名) ・プロジェクトの追加ディレクトリを上記に です。 リビルドやDebugフォルダを削除したりしているので前のビルド結果が残っていることはありません。 サンプル「SkinnedMesh」を同じ階層に「SkinnedMesh2」としてコピーし、 ファイルの相対パスに別の場所に置いたファイルにするとこの時点で上記のエラーが出ます。 他に変更する点があるのでしょうか。 尚、現在文字セットはサンプルと同じくUnicodeです。
>>348 を無視して悪いが、このスレ的にはVC2003って結構現役?
wfstreamのコンストラクタがwchar_tのファイル名を受け付けてくれなくてビビった。
VC2005に慣れてると、UNICODE対応も結構細かなところで蹴躓くね。
つっても上のくらいのもんではあるけど。
>>348 のは、その、なんだ。
悪い、誰か親切な奴答えてあげてくれ。
350 :
デフォルトの名無しさん :2006/08/22(火) 10:02:10
X ファイルから読み込んだ3Dオブジェクトを移動させようとしています。 移動量を行列で与えることで目的を達成するというのはぼんやりと判ってきまして ワールド行列に値を渡して移動や回転をすることはできるようになりました。 しかし個々のオブジェクトをバラバラに動かすことができません。 D3DXMatrixTranslation で移動用の行列を作成した後、 それを Direct3DDevice->SetTransform で登録することで移動を実行している様で SetTransform の第一引数に D3DTS_WORLD を渡すとワールド行列の値を変更できます。 最初は、D3DTS_WORLD の代わりに個々のオブジェクトを示すポインタか何かを渡せば それらのオブジェクトを動かすことができるのかと思ったのですが、 ヘルプで調べたところ、引数の型が合わないために無理だと判って行き詰りました。 ネットでサンプルを探しても、一枚のポリゴンや一つのオブジェクトを動かしているだけのサンプルしか見つけられず 次にどんな関数や型について調べるべきなのかもさっぱり判らなくなりました。 どなたかヒントをお願いします
今DXライブラリというものでゲーム作ってるものですが DXライブラリ→DirectXという手順でプログラミングを学んだ方いらっしゃいますか?
ここにいる
DXが3Dをサポートしたら完璧なんだろうな。
DX→DirectXというアプローチが効率的かは疑問だがな。
画面のサイズが640*480で 0,0,0の位置を中心にして640*480*1の箱があります 角度はまっすぐで箱の正面を画面にぴったりと表示するには カメラとプロジェクションを何処に設定すればいいですか?
Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 0.0f, 240.0f), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f)); Transform.Projection = Matrix.PerspectiveFovLH(Geometry.DegreeToRadian(90.0f), 640.0f / 480.f, 0, 240.0f); テキトー
>>353 DXとDirectXの相互関係が良く分からないんですが…
Directを使いやすくするために関数などを個人的に作ったのがDXなんですよね
自分はDXを細分化したものがDirectであると解釈しているんですが…
また、DXで一通りSTGが作れたとしてDirectXで同じようなものを作れるスキルまで
到達するのには目安何ヶ月くらい必要ですか?
DirectXの知識が一切ない状態から色々なビデオカードへの対応+ 安定した動作+フルスクリーンの切り替えやデバイスロスト時の処理まで ちゃんとやるなら3ヶ月じゃ足りないと考えといた方がいい。 RenderStateやSamplerState関係もちゃんと理解しないと思い通りに絵を出すのも面倒だ。
>>350 オブジェクトごとにSetTransform
D3DXMatrixTranslation(&mat1,x1,y1,z1)
SetTransform(D3DTS_WORLD,&mat1)
描画
D3DXMatrixTranslation(&mat2,x2,y2,z2)
SetTransform(D3DTS_WORLD,&mat2)
描画
・
・
・
一緒になってるけど、計算部分と描画部分はきちんと分けるように
だが、計算→描画→計算→描画の方が効率はいい。
それホントか?
環境による
いかにブロックを減らすかが大事だな。 DrawPrimitiveは基本的に描画キューにつっこんでGPUに投げるだけだから、 描画完了までブロックしない。 バッファのロックや、Presentの時に描画完了待ちが入る。 完全に分離できるなら、「Present()→描画Req→計算」が速いとおもはれ。
こればっかりは何を書いてるによるとしかいいようが
367 :
350 :2006/08/23(水) 12:02:58
オブジェクトごとにワールド行列を持たせればいいのかという所まで見えてきたのですが
相変わらず、「座標を示す行列」と「オブジェクト」を関連付ける方法がわかりません。
>>361 の mat1 , mat2 というのは単なるD3DXMATRIX型の変数だと思うのですが
これらの値がきちんと個々のオブジェクトを指してくれることが納得できないです。
D3DXMatrixTranslation , SetTransform , あと DrawPrimitiveUP という関数にも目を付けましたが
D3DXMATRIX 型データやD3DVECTOR3 型データを渡すことはできてもメッシュを示すポインタ等は渡せないし
これらの関数の持ち主が個々のオブジェクトであるという訳でもなさそうです
>>367 チュートリアルは一つもとばさず、きっちり動作確認して完璧に終わらせたのか?
>>367 お前さんがC/C++で開発しているものとみなして
定義したオブジェクト構造体(クラス)の中でオブジェクトの三次元座標(x,y,z)をがあると思うが
更にその中にD3DXMATRIX変数を保持すればいいじゃん
CLASS OBJECT{
float x,y,z;
D3DXMATRIX mat;
}object;
CLASS *p=&object;
移動ルーチン
void Update(CLASS *p)
{
移動処理
D3DXMatrixTranslation(&p->mat,p->x,p->y,p->z);
}
描画ルーチン
void Render(CLASS *p)
{
SetTransform(D3DTS_WORLD,&p->mat);
描画処理
}
>>359 ありがとうございましたm(_
参考にさせて頂きます
372 :
350 :2006/08/24(木) 10:46:36
お騒がせして申し訳ありません 個々の描画の前にワールド行列の設定を持ってくることで、ようやく動くようになりました ありがとうございました
お礼などいらない。古参がつけあがるからな
まあ、結果報告は大事だよ。
EndScene後にPresentするんだ!
>>376 動きました!ありがとうございます。
やっぱり初歩的なミスorz
ホントに初歩的なミスなのかね?
379 :
デフォルトの名無しさん :2006/08/26(土) 20:58:34
VisualC++6.0、DirectX8使ってます 3Dで、パースを無効にする方法を教えてください
pd3dDevice->SetPerspective(NULL);
381 :
デフォルトの名無しさん :2006/08/27(日) 00:33:21
>>380 IDirect3DDevice8のメンバーではありませんって言われてコンパイルできません
382 :
デフォルトの名無しさん :2006/08/27(日) 00:52:09
正射影
384 :
デフォルトの名無しさん :2006/08/27(日) 01:43:18
>>382 ありがとうございました
結局D3DXMatrixOrthoLHを使うことにしました
386 :
デフォルトの名無しさん :2006/08/27(日) 02:46:00
>>385 1時間近く試行錯誤してみましたが、なんとかいけそうです
387 :
デフォルトの名無しさん :2006/08/27(日) 13:01:53
DirectXでの質問です。DirectXを使って全画面表示するときに なぜか画面全部に映像が行かなくて、800×600になってしまいます。 診断ツールを見たらちゃんと1024×768になっています。 あとDirectXを使う各ソフトも設定では800×600になっていません。 なぜなんでしょうか?教えてください。
>>387 それは自分で組んだプログラムの話なのか?
ディスプレイの設定がおかしいんじゃね
390 :
デフォルトの名無しさん :2006/08/27(日) 13:07:55
>>388 いや、違います。
ネットで落としたゲームやハンゲームなどです。
391 :
デフォルトの名無しさん :2006/08/27(日) 13:10:33
>>ディスプレイ設定はどうするんですか?
ここは自分でプログラムを組む人のための板なので、そういう質問は ソフトを作った人や、そのソフトのためのBBSでなさってください
394 :
デフォルトの名無しさん :2006/08/27(日) 13:11:35
395 :
デフォルトの名無しさん :2006/08/27(日) 13:12:27
あ、すんません。
Imageを用意せずに Color.〜から単色のTextureを作れますか?
クォータニオンで姿勢を変えた後、 オブジェクトを前方に進めるにはどうしたらいいんでしょうか? オブジェクトを回転させると、前向きに進ませるのに必要なベクトルの成分も変わってきますが D3DXQuaternionNormalize 関数はどうやら進行方向の x y z を教えてくれる関数ではなさそうだし クォータニオンについて説明してるサイトもあまり見つからなくて困っています
クォータニオンについての真の理解が必要ないなら、回転だけを扱う行列程度に思っとけ。 D3DXQuaternionNormalize()は単に積算等を重ねて誤差の溜まったクォータニオンを 正規化するだけなので、残念ながら見当違い。 クォータニオンからは3x3の回転行列が作れる。 自力で展開してもいいが、D3Dなら D3DXMatrixRotationQuaternion() で4x4の行列が作れるから その結果使って回転しれ。
>>398 初期の方向から回転成分を掛けるだけで求まるだろう。
難しいところでも考えるところでもないのに、
何が分からないのかがさっぱり分からん。
何がわからんのかもわからんという状態なんだろう。 お前にもそういう頃が無かったとは言わせんぞ。
なにも回転してない状態のベクトルは、自由に決めていいわけだけど、 キャラクタのモデルは、たいてい手前向き(DirectX的に-Z方向) に作ってあるから、初期ベクトルは (0,0,-1)が無難かしらね。
まあ、特別な理由が無いのなら、普通そんなもんだろうな
クォータニオンは、もうアニメーション制御できるくらいの理解で良いやと思っている
実際それで十分だ。 知らなくてもアポロは月までロケット飛ばせたんだしな。 3行3列への展開式を手元に持っておくと、最適化の時に少しだけ便利だ。
アポロで思い出したけど、ジンバルロックがよくわからん。
>>407 クォータニオン使わずに回転行列作れば嫌でも見ることになるやってみろ。ここで聞くな。
ホネホネロックは知ってるんだが
>>409 じゃあ、全部歌いきってみろ。
どうせサビしかしらんくせにテキトウなこというな。
DirectXの習得には必須事項 人食い酋長が大太鼓 月夜にこっそり叩いたら 博物館の恐竜が 一緒に浮かれて踊ったぜ ホーネホネロック ホーネホネロック ホーネホネー ホネロック 松明持ってガイコツも ちょうつがい外し踊ったぜ 路地の裏のゴミ箱じゃ イワシの頭も踊ったぜ ホーネホネロック ホーネホネロック ホーネホネー ホネロック 砂漠じゃ死んだライオンも 鬣乱して踊ったぜ ムカデや蛇の亡骸も 太鼓にあわせて踊ったぜ ホーネホネロック ホーネホネロック ホーネホネー ホネロック ホーネホネロック ホーネホネロック ホーネホネー ホネロック
ホネホネロック歌えない奴が居るわけ無いだろ! ただ411はコピペだな
ほーね。
ガシャ
ちっ!アンガールズ歩いてんじゃねぇよ。 高校時代バリバリの体育会系だった俺からしたら歩いた時点で失格。 拍手なんてなくていい。
>>416 何気に3D演出(2Dでもできるけどw)でフイタw
>>416 なつかしすぎwwwwwwwwwwwwwwwwwwwwwwwwww
419 :
デフォルトの名無しさん :2006/08/27(日) 22:00:20
ボンバーマンのような格子状のフィールド(3D)を一人称視点で移動するプログラムを 作成しています。Zバッファを有効にしているのですが、見る方向によって前後 が正しく表示できません。遠くのもの(壁)は小さく表示されますが、一番遠くのもの(壁)が 一番上に表示されてしまいます。D3DRS_ZFUNCをD3DCMP_LESSに設定すると今まで おかしかった方向からの視点では正しく描画されるようになるのですが、いままで 正しかった方向からがうまくいかなくなります。 原因などわかりますでしょうか?・・・これじゃ伝わらないですかね・・?
420 :
419 :2006/08/27(日) 22:27:50
>>420 × 0.0f, // 最も近い面の Z 座標
とりあえず1.0fにすればいいわ。
422 :
419 :2006/08/27(日) 22:55:13
>>421 出来ました!!ありがとうございます!
理由はわかりませんが(^^;考えてみます!
5日くらい悩んでたんで助かりました。
423 :
デフォルトの名無しさん :2006/08/28(月) 18:28:38
DirectX SDKのなかにDirectX10のサンプルがけっこうあるけど どのビデオカードだったら動作させられるんだ? 9800PROじゃ無理だった。 X1000シリーズなら大丈夫なの?
テクスチャが描画されね。はまった ふぁ;kjslkfj;かjf
それを聞いてハッキングでもする気ですかw
この質問にそういう答え方をする時点で予想通りアホだというのは分かった。 ビデオカードをいくら最新にしても動くわけがないだろ。
びすたんが必要なんだっけ
430 :
423 :2006/08/28(月) 20:46:18
その画像に書いてあるやん・・・
じゃ、Radeon9800で動かないわけはないわけだが・・・
435 :
デフォルトの名無しさん :2006/08/29(火) 13:38:25
ID3DXAnimationControllerを使った複数モーションに挑戦しているのですが 現在のモーションの再生時間や各モーションの終端フレーム数(秒数)を取得することは出来ないのでしょうか。 歩くモーションの終わりと走るモーションの始め(またはその逆)を繋げば動きが綺麗に見えるのに 現状では歩くモーションの途中で走るモーションに移行し、動きが飛んでいるように見えてしまいます。
そんなもん使うな。以上。
>>434 それでもディスプレースメントマッピングなんて前からできてたやんけ。
DirectX9にも虎が拉げてるサンプルあったべ。
WindowsXP SP2、VisualC++ 2005 Express Editionで、 DirectX SDK入れようと思うんですが、 バージョンは August 2006 で大丈夫でしょうか?
>>439 October 2004 なら大丈夫でしょうか?
間違えました。 DirectX 9.0 SDK Update (June 2006) DirectX 9.0 SDK Update (April 2006) DirectX 9.0 SDK Update (February 2006) この辺なら大丈夫でしょうか?
駄目です。
ID3DXAnimationControllerって進化の果てに無駄な抽象化をして 使い物にならなくなったってこと?
そんなことは無いっちゃ無いんだが、ドキュメントが無さ過ぎるのが困ります。 まあ、元から珍妙な進化の仕方してた奴だったけど… コントローラGetしたあとReleaseが必要だって時点で激しくビビった。
>>443 つか進化するのはいいんだが仕様が変わりすぎなんだ。
重要な関数が消えたり、なぜか他のと同じ機能の関数が出来てこれは未サポートで従来のを使えとか。
>>444 でも書いてる通りドキュメントが明らかに少ないから、VerUp毎にサンプルを弄ったほうが正確じゃないだろうか。
自作するって言ってもそれだけでだいぶ時間が取られるから個人的には重宝してる。
モーションのブレンドなんて、誰が書いても大して変わらん品ー。 の割りに、なんでAnimationControlerがあんな変な進化したのかは本気で謎だけど。 誰か止めなかったのか?
そんなことは無いっちゃ無いんだが、ドキュメントが無さ過ぎるのが困ります。 まあ、元から珍妙な進化の仕方してた奴だったけど… コントローラGetしたあとReleaseが必要だって時点で激しくビビった。
>>445 >自作するって言ってもそれだけでだいぶ時間が取られるから個人的には重宝してる。
お前、作ったことねぇだろ。
こんなもんかかっても1日ありゃできるし、わざわざ他人様の使って悩まされる時間のがよっぽど無駄だっての。
それにこの辺が複雑に見えるのはようはよくわかってないから。
綺麗にまとめればこんな(AnimationControler)に無駄に複雑にはならない。
実際キーの抽出とブレンドして行列を生成するだけだからね。 あとはそれを各フレームに適用するだけ。 別に難しいところは無い。
>>448 >>445 を擁護するつもりはないが、ゼロから組んで1日で上げる自信は俺には無いなあ。
いや、それこそコード自体は1時間かそこらで十分書きあがるんだろうが、
ちまちま細かい間違いやったりとかしそうだし。
うん、それだけなんだけどね。
>>435 LPD3DXAnimationController pAnimCtrl;
・再生時間
D3DXTRACK_DESC desc;
pAnimCtrl->GetTrackDesc( 0, &desc );
desc.Position←コイツ
・終端フレーム
LPD3DXANIMATIONSET pAnimSet;
pAnimCtrl->GetAnimationSet( 0, &pAnimSet );
pAnimSet->GetPeriod()←コイツ
SAFE_RELEASE( pAnimSet );
・移行( Track0→Track1へブレンディング )
pAnimCtrl->SetTrackEnable( 0, TRUE );
pAnimCtrl->SetTrackEnable( 1, TRUE );
pAnimCtrl->SetWeightScale( 0, 1.0f - weight ); 1.0〜0.0へ
pAnimCtrl->SetWeightScale( 1, weight ); 0.0〜1.0へ
× pAnimCtrl->SetWeightSacle ○ pAnimCtrl->SetTrackWeight 間違えた
453 :
435 :2006/08/30(水) 14:49:47
>>451-452 ありがとうございます。
ID3DXAnimationControllerだけしか見ていませんでしたが他に入ってたんですねorz
ドキュメントには一通り目を通しておいた方がいいぞ。 メソッド名とか引数の意味とかは覚える必要は無いが、 どんな機能が用意されてるかくらい知っておけば、こんな所で質問する必要もなくなる。
454は454で、一度ドキュメント読んでから説教すべきだと思ったり
>>450 だったら、自分のコードのミスよりMSの仕様変更なんか確実にやってくるんだからそのほうが嫌だろ?
DirectXのバージョンが変わったらほぼ確実に組み直しなんだぞ。
突然仕様が変わるのはD3DXの高レベルAPI部分だけ。 で、仕様が変わる上に使いにくいのに馬鹿ほど使いたがる。 馬鹿だから自分で何とか出来ずにわめくだけ。
いままでスキンメッシュ使うっていうと シェーダアセンブリとか見せられてなんだか嫌になっちゃった。 って奴多いんだろうな。 HLSLなら気持ちいいほどすっきり組める。 ・・・はず。なんだけど肝心のMSのサンプルがこれまた糞。 サンプルとは思えないほど要らんことまでサポートしててスキンメッシュを単体で覚えたい奴向きじゃない。 Xファイルのデータの何をどういう計算に使うのか? ってところもちゃんとは理解してないまでもスキンメッシュを動かせる程度の理解を求めてもまだ敷居が高いだろう。 さらにできたところでモデリングツールって何のどんな機能を使ってどんなオプションを付けて吐き出せばいいの? とかいうところまでくるとまた頭が痛い。しかも、物によっては駄目と来てる。(見た目スキニングはできているにも関わらず) さらに追い討ちをかけるようなアニメーションコントローラーのインターフェイス。 「ここまで御馬鹿さん専用クラスなら、フレーム毎で呼び出す形にして引数1アクション番号、引数2:tでセットして drawで裏画面に描画って形でアニメーションしてくれてよかったんじゃないか?」 と思うが、実はそんな単純なことにはなっていないどころか アニメーションコントローラーの仕様はウンコそのもの。これだけ複雑にした割りにはなんの恩恵もないし できることはアクション番号+tと同じようなもん。にも関わらずこの複雑さ。一体どんな脳みそかかえてんのじゃ? と、いうわけでスキニング嫌いだったんす・・・でも、最近全部自分で組んですっきりしたよw
(´`).oO(なんでこんなに必死になっているんだろ) サンプルでは読み込みは自力のように見えるけどフレーム管理だけしかしない? もしかしたら自作より扱うの難しくないか。
DirecxtXのGUIについて詳しく解説してくれてるサイトってありませんでしょうか? ボタンやコンボボックス、エディットボックスを使いたいです。 ぐぐっても見つかりません。 よろしくお願いします。m(_ _)m
DXUT自体がドキュメントみたいなもんだー。 頑張ってカットアンドペースとしれ。 つったってDXUT、あんましシンプルとは言い難いんだよな。 情報はググればいくらでも引っかかってくるけど、日本語のドキュメントには大したものは無い。 頑張れー。
DirectSoundのバッファが短か過ぎると不安定になるというのが昔あったと思うのですが(DirectX5とかの時代) 今でもそれあります?
不安定ってノイズが乗るとかそういう話?
DirectXsdkのサンプルのコンボボックスとかボタンとか要らないんだが、どこを削れば良い?
EmptyProjectじゃ駄目なのか。
取り敢えずCの入門書を軽く流して 「はじめてのWindowsプログラミング VisualC++」でAPIの 初歩をひととおり学んだのですが,ボチボチdirectxにゲーム作成を 学ぼうと思っています。 とっつきの良さそうな「DXライブラリ置き場」のライブラリを使うべきか 使ってるひとが多そうだけどあまり文献が充実していないLunaを使うべきか悩んでいます。 両方使ったことのあるひとの使用感の違いをお聞きしたいのですが
その前にC++を勉強するのが先だと思います
APIの学習をやるくらいなら C++を学んでおいた方がよかったんじゃないかと思う。
471 :
デフォルトの名無しさん :2006/09/01(金) 09:16:54
ゲームでもなんでもそうだけど、CとDirectXAPI(もしくはライブラリ)の使い方がわかったところで なにも作れないよ。 自分がゲームやって、画面に映ってるシーンがどんなプログラムになってるか 頭の中で多少でも組めないと、無理。 初心者っぽいからDXライブラリを進めとく。 ドキュメントが充実してるし、ゲームのサンプルプログラムもあるから。
質問です。なぜか定数として宣言した配列の一部の内容が書き換わってしまい、 終了時に「データが壊れたぞ!」と警告メッセージが出てくるのですが、どうすればいいのでしょうか?
473 :
472 :2006/09/01(金) 14:37:54
デバッガーで覗いてみたところ、なぜかtimeGetTime関数を呼ぶと値が変わってしまうようです。 よくわからないので、その部分だけ値を入れなおすようにしました。
>>473 constで宣言したって事?
普通にメモリ管理ちゃんとしてないだけでしょ。
どっかの変数に配列を超えて書き込んでるだけ。
つーか、DirectXの話題じゃないし。言語の本でも読んどくといい。
>>473 値が変わるときにって条件でブレークポイント設定すればいいと思うよ
>>475 たぶんブレークポイントに引っかかるのはシステムのDLL内部だから
473にデバッグは無理w
症状的に、どこかでバッファオーバーランをやらかしていると思う。
バッファオーバーランをしている部分と、定数を破壊している部分が
全然関係ないという類のやつかと。
>よくわからないので、その部分だけ値を入れなおすようにしました。 ワロタ
道路の上に家を建てたらなぜか壊されてました。 よくわからないので、もう一度建て直すことにしました。
DirectXで2D画像表示するためにスプライト使ってるんだけど スプライト重くて・・・ なんか他にいい方法ない?
>>476 自分は473の症状から
何かのポインタ=timeGetTimeの時にstaticのポインタ渡して弄ってる場合ってのが思い浮かんだから
それで解決できると思った。
まぁとりあえず参考意見程度に
>>479 何をどうしてどのように重いのか、一切省略せずに適切に書け。
話はそれからだ。
>>479 3Dでも60FPS出来るんだ。
全画面1ドットずつ動かしても毎秒60ドットはスライド出来るってことだ。
それと比べても遅いと思うならやり方が間違ってる。
9.0だとスプライト表示って3Dより重くね?
9.0に限らずスプライトは素の3Dより概ね重い。
本来そっち用途でない3D向けのハードにエミュレーションさせてるのが大半なんで、
性能比で見ると非常に損した気分になる。
でも、それでも必要十分な程度には(むしろお釣りが来るくらい)速いのが普通。
致命的なほどに重いとなったら、使い方に問題があるとしか思えん。
何をどうしてどのように重いのかちゃんと書いたら、
>>481 が適切に答えてくれるだろう。
そもそもDirectXにはスプライト機能など存在しない。 D3DXの似たような名前のAPIをスプライト機能だと思っているのなら完全な勘違い。 あえて言えばオーバーレイや別レイヤで描画されるカーソルがそれにあたるだけ。
機能がスプライトなら、それはスプライトだろう。 古式ゆかしくハードで実装してなきゃ認めんとか言うのは勝手だが、論点がずれてる。
名前がSpriteを名乗っているだけで、スプライト機能ではない。 もし話を出すのならスプライトと書かずにD3DXSpriteと書くべき。
スプライトというより、ピクセルフィルの問題の気がする。 CPU遅いやつなら妥協は必要だと思う
むしろ論点が明らかにされていない
何をしたのかという条件を明示せず遅い遅いと言われたって、 遅いのはテメエの足りない脳の処理速度だろという話になる。
初心者質問スレの癖して、このスレに常駐してるのは毛が生えたばかりの子供が 昔の自分を口汚く罵るだけという罠。
>スプライトというより、ピクセルフィルの問題の気がする。
>CPU遅いやつなら妥協は必要だと思う
わかるんだが、それだとスプライト以上に3Dが遅い環境だということに。
つーか
>>479 は何処行った。
寝たのか?
途方もない大議論が展開されているこのスレに
どの面下げてレスしたらいいかわからず影から見守る
>>479
裏でスプライト関連の警告が出まくってて遅いとかじゃねえ?
俺が思わず頭を抱えた発言を一括晒し上げ > 9.0に限らずスプライトは素の3Dより概ね重い。 > 本来そっち用途でない3D向けのハードにエミュレーションさせてるのが大半なんで、 > そもそもDirectXにはスプライト機能など存在しない。 > D3DXの似たような名前のAPIをスプライト機能だと思っているのなら完全な勘違い。 > 名前がSpriteを名乗っているだけで、スプライト機能ではない。 > もし話を出すのならスプライトと書かずにD3DXSpriteと書くべき。
中身ってただの板ポリちゃうんかと・・・
最低限、CPUとビデオカード、 そしてどのくらいのサイズの物を一つのフレームにいくつ出して何FPSで、 どの程度を想定して遅いと言っているのかぐらい書くのは質問する上での義務。
スプライトスプライトってX68000じゃあるまいし Windowsマシンにスプライト機能はありませんよ
つ【FM TOWNS】
ドリキャス
おそらくパーティクルみたいなのを1スプライト1DrawPrimitiveで大量に出していると見た。
X68000の奴が正しいスプライト機能って誰が決めたんだろう・・・
基準は別レイヤになっているかどうか。 なっていなければスプライト機能ではない。
>>504 それはどこで定義されてるの?
君の脳内以外で。
しかしMSも、イメージを描画するだけの機能によくSpriteとか、 頭の弱い馬鹿を勘違いさせるような名前を付けたよな。
スプライトってID3DXSPRITEインターフェイスの話じゃないの? 描画するだけで糞重いんだが違うのか。
また重いとしか書かない馬鹿が来た。 脳味噌が足りないのは十二分に分かったから最低限の情報ぐらい出せ。
>>508 以後1000までスプライトの定義について話し合いますか?
ちなみにセガサターンみたいなのはどう認識してるわけ?
もう放置しろよ。
もう結論は出てるしね。
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>479 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
515 :
デフォルトの名無しさん :2006/09/02(土) 15:06:39
なんか最近無理やり2Dゲーム作ろうとしてるボーヤが こことかゲーム製作技術板にも一定数いるみたいだな。 なんでそんな無駄なことしてるのか一体どんなゲーム目指してるのか一度聞いてみてぇ。 マップチップで作りたいとかもう時代じゃねぇんだよ。 色んなリソース食い潰した挙句そんなショボイもん作ってどうするのかと。 DirectXのスプライト機能なんて板ポリちゃうんかとあのクラスなにか恩恵あるのかと。 お前、どこまで脳みそ無いのかと。
時代とか関係ないだろクズ
結論 D3DX系の高レベルAPIは使うな。 APIそのものも腐っていれば使う奴はもっと腐っている。
>>517 DirectXは腐っているから自前でGPU叩こうぜ。
Windowsは腐っているから自前でOS書こうぜ。
x86アーキテクチャは腐っているから自前で設計しようぜ。
この世界は腐っているから(ry
テクスチャ読む('A`)マンドクセに
>>516 あるよ。
マップチップ配置してるゲームって見た目ショボイもんしかできないじゃん。
一体何を目指してるのかマジで知りたい。
vectorにもマップチップ使ったショボイゲームが転がってるけど
何を目指してそんな見た目にしようとしたのかマジで聞いてみたい。
SRPG作るならFFTみたいなの作りたいとか思わないのかと。
見た目信者はPS3でも買ってろw
>>521 いや、見た目がすべてとはいわないけどさ。
わざわざショボクする必要はないわけじゃん。
マップチップを使っている人は わざとしょぼい物を選んでいるというわけではないと思うが…。 そんなに言うなら手当たり次第本人に忠告してやったらどうだ?
>>523 なんかそれ荒らしっぽいじゃん。
それになんか参考にしてるゲームでもあるのかもしれないし。
>また重いとしか書かない馬鹿が来た。 実際描画1つで糞重いんだからしょうがないだろうがwwwwww
お前のPCが糞杉なんだよwwwwww
>>525 描画一つで何十秒もかかるのか。
オマエの脳内PCも大変だな。
無茶な結論を示してくれたり 人が作ってるものの内容を一々気にしてくれる親切な人がいたり ほんとの初心者は実は見ないほうがいいスレになってるなここ
実際の所、D3DXのSpriteとかFontとかX系の機能は使わない方がいい。
昔から、DirectX初心者(が)質問(を叩く)スレだよ?
>>528 ID3DXSPRITEのDraw1回分でDrawPrimitiveで4角形(3角形2個分)24〜25個の描画が出来た。
後者はトランスフォーム済み頂点使ってるから対比するには合ってないかもしれないけど
お世辞にも「軽い」とか「同じぐらい」と言えるレベルじゃない。
なんでこんな関数消さずに残しているのだろうか。
初心者ホイホイなんじゃね?w
ちゃんとした例で示したのは偉すぎるが 4角形とか3角形とかって凄い表記だな。
>>536 いや、本当に普通に遅いんじゃね?
俺も一度使っただけだけどそんとき「おっせ」って結論出した記憶がある。
厳密に数字出したわけじゃないけど。
まあ、それ以上に俺が思ってたようなことができなくて扱いづらくて止めたって記憶もあるが。
・頂点バッファロック ・描画する分板ポリ情報を頂点バッファにCopyMemoryする ・頂点アンロック ・頂点ストリーム設定、頂点シェーダ設定とか諸々 ・DrawIndexedPrimitiveで描画 これじゃあダメなんすか?
>>538 ちょこっとだけシェーダ書けば(ホント5〜6行)
ロック、アンロックもする必要ないんじゃない?
2Dの弾幕ゴチャキャラゲームがザラにあるのに 簡単に重い言うなよ
>>540 ああいうのはDirectXのスプライトなんて使ってたらできないだろ。
DirectXにスプライト機能など無い。
>>542 いや、だからD3DXSpriteのこと。
>>542 てか、いちいちうざいな。
日本語は話の流れを組み取るようにできた言語なんだよ。
だからよくあるセリフのほとんどに主語が存在しない。
まあ、言ってみれば馬鹿には扱えない言語ってことw
間違いを正していかないと、勘違いする馬鹿が量産されるだろ。 省略していいものと間違いとは全く別の話。
だいたい、そんな昔のスプライト機能なんて知ってる奴のがめずらしいだろw まあ、知ってるけどさw まさか、今、話題だしてそのスプライトのこと言ってるとは思わないよ。
DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。 DirectXにスプライト機能など無い。
>>542 は昔のスプライト好き過ぎ。
そんな古の技術が神秘大陸アトランティスと共に沈んだときに
>>542 も一緒に心中すればよかったのに。
背景の復元機能まで実装していたら、ソフトウエアスプライトとして名乗っても何の問題もない。 しかし少なくともDirectXにはそんなAPIは存在しない。
間違いを指摘されても、頭が悪いのにプライドだけは高い奴は、 決して自分の間違いを認めず、間違ったまま恥の上塗りをし続ける。 しかしほとぼりが冷めた頃、いつの間にか間違いを正して、 以前の間違っていた事実を無かったことにする。
551 :
デフォルトの名無しさん :2006/09/02(土) 21:38:29
なんか沸いてるなw
552 :
デフォルトの名無しさん :2006/09/02(土) 21:52:37
で、話を元に戻すけどD3DXSpriteは遅いの? (スプライトって書くと妙なのが湧くから面倒でもこう書こう)
D3DXのSprite、Font、X関係は使い物にならない。
じゃ、早いスプライトって何?
飲み物。
2004年頃のD3DXSpriteと比べると今のは段違いに速いよ ただ基本的に楽するためのものだから速度や自由度に差はある 弾幕系だと楽になるわけでもないので他の方法で組めよ
>>556 速度上がったんだ。
知らなかった。
つーか今までが理不尽なくらい遅くて使い物になら無かったからなあ。
普通にバラで使うなら楽でいいが、例によって弾幕系はあれか。
頂点バッファ自前で持ってトリプルバッファリングとかで回しつつロックしまくりか。
DrawPrimitiveUPでだだ書きしても速度なんか大して変わらんかった気もするが、どうでもいいね。
D3DXのFontは、あれ英語圏に特化してるもんなー。 文字コードが散ってる国じゃ、レンダリング結果のキャッシュなんか使い物にならん。 普通に書いてたらGDIよか遅くなるくらいだし。 つーかご丁寧にWindowsGDIのフォーマット指定なんか真似しないでいいのに。 使い辛いったらない。 D3DXのX関係は、誰だこんなん作った奴はってくらいのわかり辛さだが、 機能自体はそれなりに充実してるよな。 アロケータを継承してカスタム化したりする一連の手続きを拒絶反応起こさずに 呑めるかどうかはあるが、素性としてはそんなに悪くない。 ゼロから自分で書くのも面倒くせーしな。 アニメーションコントローラは死んでいい。リアルで。
使いこなせない奴の僻みキタ――(゚∀゚)――!!
>>559 こんなもん使わなきゃできない時点で終わってるw
(・∀・)ニヤニヤ
>>561 いや、さすがにあるもの使えっていっても使えるものと使えないものがあるよ。
D3DXSpriteにしてもアニメーションコントローラーにしても作った奴のセンスが糞過ぎて
どうにも使い物にならない。
そうそう、さすがに居る人使えっていっても使える人と使えない人って居るよね。
D3DXSpriteはまだ許せるがFontはどうしようもない
DirectXにスプライト機能など無い。
ドリキャスハァハァ
568 :
デフォルトの名無しさん :2006/09/03(日) 19:11:39
SDK(Augaust2006)で作ったプログラム動かそうと思ったら d3dx9_30.dll←これがないって出るんだが…
ふーん
そのdllはアプリケーションと一緒に配布しないといけないものなのに 配布しない奴が悪いんだろう。
>>572 普通の感覚が失われつつあるがそのシステムからいって頭おかしいけどなw
>>571 GameSDKの頃から統括してた人はDX7で辞めちゃって違う人になってる。
だからDX8でごちゃごちゃし始まって、DX9なんて好き勝手やってる状態。
周りに振り回されてその場しのぎで仕上げるのがバレバレ。
こう言っちゃなんだが、DirectX7までだって非道かったけどな 特に5や6までは、初期化すら出来ない奴が多かったろう
>>575 いやそうではなくて
一貫して現場出身の人間が統括していたのがDX7までってこと
だから気難しいSDKだったと思う
ごちゃごちゃし始めたのは、なにも8からじゃないわな
ごちゃごちゃ所か、8以降は、もの凄いすっきりして来ている様な。 良くD3DXのアニメーション周りと、そのDLLの件が引き合いに出されるけど、俺にとってはどちらも瑣末だな。
579 :
sage :2006/09/05(火) 12:01:13
シーン(カメラアニメーション、ライトアニメーション)付の人物モデルを DirectX9で表示したいと思っていて、モーション付の人物モデルは.xファイル で吐き出そうと思っているのですが、カメラやライトのアニメーションデータ や背景データ(ビルボードで作成予定)はどのような形式で吐き出せばよい のですか?(一般的なのですか?)ちなみに、3DSMAX8を使用します。 初めてDirectXを使って3Dプログラミングをやるため、どのような形式でデータ を用意すればよいかわかりません。 どなたか教えていただけないでしょうか?
DirectSoundで コンパネで設定されているExclamationとかQuestionの設定を取得して鳴らせますか?
581 :
デフォルトの名無しさん :2006/09/05(火) 16:57:01
助けてください。 Xファイルに頂点2点設定して SDKのサンプルViewerでその線分を見ることは可能ですか?
マルチウザ はわわわわわ
>Xファイル
現在directXでキャプチャするソースをsdkについていた playcapを弄って書いています。 開発環境は VS.NET2005で、現在までに フレームのサイズを落としたりインターレースの解除はできたのですが fpsの変更というのがよくわかりません。 ヘルプを見ると VIDEOINFOHEADERでできそうだったので VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)pmt->pbFormat; pVih->AvgTimePerFrame = 666667;//フレームレート決定(100ナノ秒) pConfig->SetFormat(pmt); こんな感じで書いて見ましたが全く駄目だったので IAMTimelineを使い CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC, IID_IAMTimeline, (void **)&g_pAmtime); g_pAmtime->SetDefaultFPS(10); みたいな感じで書いてみました。 がこちらも全く駄目した。 フレームレートを変更するにはどうしたらいいのでしょうか?
DirectXを使ってプログラミングしているんですが DirectXで描画した上にボタンやエディットボックスなどを表示できなかったのですが ゲームなどで見かけるボタン等は自分で実装するものなのですか? それとも自分のやり方が悪かったのでしょうか?
単純な設定ミスと自己解決しました スレ汚しごめんなさい
>>586 いろんなアプリがあるからなんとも言えん。
もうぶっちゃけゲームゲームした画面なら99%が自前だと思うよ。
たまにWin32APIのを使ってるのもあるけどゲームアプリでイベント処理するの面倒臭いw
>>586 コンフィグとかだけWin32APIで作って
本編のゲームと独立してるやつって結構ない?同人ゲーとか
>>589 ああ、なんか主人公の名前入れるところで
日本語入力ができる(IME?)ゲーム画面みたことあるなぁ。
ちゃんとイベント処理すりゃできるんじゃねぇ?(とか、よくわからんけどテキトーなこと言ってみるw)
でも、俺だったらゲーム画面に取り込むようなことしないで設定なら
泥臭いMFCウィンドウだしちゃうかな。
主人公の名前ぐらいは用意したほうが雰囲気いいとおもうが、
さすがにIPやら解像度設定までゲーム画面で頑張らなくていいと思う。
>>586 コントロールのためのWM_があるんでそれ拾えば対応できるよ
ソースはネットに転がってるからお好きなのどうぞ
これから目標のDirectXを学び始めようと思っています。 最低限動くソースに自分で追加改良して習うより慣れろ的なやり方で学びたいのですが どこのサイトを見てみても2、3年前のものばかりでソースをそのままコピペしたものでは ためしにコンパイルすることもできません。 dswごと入ったサンプルならもちろんコンパイルできるのですが、 これを編集していって慣れていくやり方で将来オリジナルのものを 作れるようになるものなんしょうか? できれば勉強方法のアドバイスとかが欲しいです
工学社からIO別冊でDirectX9の本が出てる。 必ずしも良書とは言いがたいし、DX7くらいの頃から内容も大して変わってないが、 高価いもんじゃないし、CDにソース付きでサンプルが大量に入ってる。 入門って意味ではそれなりにオススメ。
拾ったシャキーンのソースをコンパイルしたらd3dx8.hが無いと起こられたのですが DirectX9ではコンパイル不可なのですか?
(`・ω・´)
>>593 お金かかるが、
>>594 の方法にしなさい。
どこのサイトの話かわからんけど、ソース公開してるのにコンパイルできないんじゃ
DirectXというよりWIN32API(もしかしたら言語レベル)とかの知識が全然足りないと思う。
言語レベル以前に、ツールレベルで知識が足りないように見えるがね コピペして出来たソースをプロジェクトに追加する方法すら分かってない気がする
大文字英数字使うプログラマの助言は、なにか安っぽいなw
600 :
デフォルトの名無しさん :2006/09/08(金) 15:31:26
サンプル云々以前にチュートリアルをやればいい。
工学社の本のサンプルこそ
そのままではコンパイルできないんじゃなかったっけ?
>>593 はよく調べていないだけ。ちゃんと調べれば出てくる。
604 :
593 :2006/09/08(金) 17:30:37
いろんなアドバイスありがとうございます。 Cを一通りとC++のクラスだけやった程度ではまだまだ 初心者の域にすら入れていなかったようです・・・。 もう一度勉強し直して初心者の域まできてからまたよろしくお願いします。
いやぁ一時的にVC6.0を捨てようと思ったぜ・・・ もぅ.NETなのか・・・。 始めてVC見たとき感動したのにな・・・orz
>>599 大文字/小文字と全角/半角を混同する方も大差ないと思うw
>>604 君の言葉どおりだとC++はクラスだけだとしても、Cは使えるんだよな?
だったら、VC++EE2005とDirectX9SDKをDLすれば、とりあえず環境はバッチリ整うぞ。
無料だし。俺も同じ環境でやってる。
頭の中の環境が整ってない
609 :
593 :2006/09/08(金) 22:01:57
>>607 本当にいろいろありがとです
自分もVC++EE2005でC/C++の勉強してまして、そろそろDirectXの勉強もしてみたいと思い初め
DirectX9SDKとPlatform SDKも導入したので環境の方はばっちりなんですが
>>608 のとおり頭の方が・・・。
とりあえずいろんな解説サイトを周って見たもののサンプルはver8で作られたソースだったり、
そのままコンパイルしても突然増えたたくさんのヘッダとライブラリに関するエラーが続出して唖然としてばっかりです。
ツールの知識もディレクトリの設定やらリンカ→入力の設定など基本的なことしかわからないので
自分では対処もできそうにないのでまた最初から出直してこようと思った次第です。
もうめんどうだしDXライブラリとか使っちゃえよ
もうDirectX直いぢりは素人にはおすすめできんな。 仕事にするのでもなければ、大人しくライブラリ使ったほうが賢いと思う。
ライブラリの楽なところは、Dx周りがバグってても掲示板で直せっていうだけで直るからな。
613 :
593 :2006/09/08(金) 22:44:03
ホントにいろんな助言いただいて恐縮です。
実はここ↓のページで勉強しようとしていたときにライブラリ使ってやっていたのですが
ttp://ponk.jp/el/index.php?page=0 型が違うとエラーが出まくりでして・・・。どうもVC6時代のものだと最近のコンパイラでは
厳密に判断し過ぎて型チェックでエラーが出るとかなんとか。
もうホントどうしようもねーな俺・・・
型は分かるが、CのI/O周りでエラー出すのはマジウザイ
>>609 とりあえず、ウィンドウ出すだけのソースとかコピーしてみれば?
あれは毎回コピペだから変わんねーし。
それすらもコンパイル通せないんだったら、素直に本を買うといい。
616 :
593 :2006/09/09(土) 00:28:01
まんま。 文字コードセットをUNICODEにしてる。 文字列定義してるところにLつけてL"ぬるぽ"みたいにするか、 マルチバイト文字使用に切り替える。 VC2005とかEEだとUNICODE使用が標準なんで、少し前のソースは そのままだとビルド通らないことは結構ある。
>>616 つーか、超親切なエラーがでてるじゃん…
>>617 の方法とか、TEXTマクロつかうとか。
この辺は自分で具ぐれ。
>>616 ソースまるまるコピペじゃ力つかないよ。
他の人も言うようにウィンドウ作成から地道にやるべし。
ドキュメントのチュートリアル1オススメ
ウィンドウ表示できたらキャラクタ描画とかキー入力とか一つずつ入れていく。
そうそう。 一見、わかりきった作業でもやってみなきゃわからんもんさ。 とくになんもかんもわからんときは、今わかってるつもりのものが 実はわかってなかったって場合が多い。 完全にブラックボックス扱いならまだしも、 触らなきゃいけない部分でおぼろげに見えてるだけのものなら一度は組んでみるべき。
まあ、根気が続けばの話だがなー。 作りたいゲームがあるなら、DXUTとかをわけもわからず使うのも有りだろ。 細かなところを自分で書くのも、それはそれでまあまあ楽しいが。
622 :
593 :2006/09/09(土) 02:46:45
>>617 ,618
このことがわかっただけでほかのエラーがぐっと減りました・・・。
やっぱり基礎から地道にですね・・。
大学生は暇なんでがんばってきます!
>>622 プログラミングに関しては何事も経験だ。がんばれー!
目的にもよるんだよなぁ。 DirectXを習熟するのが目的ならWindowsAPIから色々と調べて、 いずれは自前のライブラリを・・・・って感じだろうけど、 ゲームを作るのが目的ならありもものライブラリ引っ張ってくる方が はるかにいいわけだし。 DirectXをまじめに習熟なんてゲーム作るよりまんどい。 ゲーム作るために自前ライブラリってパターンはほぼ確実に途中で投げるな。
だな。 どうしてもゲーム作りたくて、最低限のスキルが欲しいなら、 いっそプロになってしまうのに限る。 毎日画面に向き合ってりゃ、その程度のスキルは嫌でも身につく。 ゲーム作る気力はごっそり萎えるが。
626 :
デフォルトの名無しさん :2006/09/09(土) 23:51:36
DirectXを使った、チャットアプリを作りたいのですが、 参考になるサイトってありますでしょうか?
ソース丸パクリできるレベルで参考になるサイトは知らない
>>626 そもそもチャットのどこにDirectXを使いたいのか。
629 :
デフォルトの名無しさん :2006/09/10(日) 03:01:01
頂点バッファを使った描画で、DrawPrimitive時に増えたVRAMを解放するにはどうすればいいのでしょうか?
頂点バッファを開放しろ。 参照の期限はドライバだけが知っている。 管理しようと思うな。
>>628 チャット画面とは別に3Dのおねぇさんが横で踊ります。
ここにDirectXを使います。
相手のレスを解読して反応を返します。
(例)
「こんにちは、いやー今日は・・・(略)・・・でしたよ」
→「○○さん、今日は機嫌がいいみたいだね!」
という感じです。
また、レス情報に付加して自分の状態を伝えるたり、ファイルを付加することもできます。
(例)
「こんにちは、いやー今日は・・・(略)・・・でしたよ」<state:楽>←感情コマンド(付加するとこっちの状態を伝える)
→「○○さん、今日は機嫌がいいみたいだね!」
「ちょっとみせたいものが・・・」<file:C:\Doc\bbbin.bin>←ファイル添付コマンド
→「はーい、○○さんから!贈り物!いつものところにおいておくね!」
というアフォなアプリケーションです。こっちは正直、キャラ萌え狙いでしょうか?
また、オプションで切り替えて画像チャット(画像掲示板のようなものです。レスといっしょに画像が送れます。)もできます。
と、いう仕様です。
>>631 それはチャット部分とDirectXを使う部分に分離できるから
DirectXを使ったチャットと質問する意味がない。
別々に作って糊で張り合わせればいいだけ。
チャット程度ならWinSock使ってTCP/IPで通信すりゃええ
>>632 そうだな、「DirectX を使った、3Dのおねぇさんが踊るアプリを
作りたいのですが、」の方が回答者も真剣になると思う。(w
626 = 某社の奴 このチャットは特典としてつく奴だろ
637 :
629 :2006/09/10(日) 14:26:53
描画について質問させてください。 DirectXでSetRenderTargetを用いて、 BackBufferではなくCreateTexture関数を用いて生成したテクスチャーに シーンを描画したいのです。 しかしながら、その際Zバッファーが適用されずポリゴンの描画順序が おかしくなってしまいます。 CreateTextureを用いて生成したテクスチャーにZバッファーを適用 する方法はあるのでしょうか?どなたかお知恵を貸してください。
>>639 俺は何も考えずにSetRenderTarget使ったら
勝手にバックバッファと同じZバッファが使われたけどな・・・
たぶん前の値が残ってるんだと思うからZバッファをクリアしてみたら?
IDirect3DDevice9::SetDepthStencilSurface() 基本的にレンダリングターゲットを変更した場合はZバッファも設定しなおし。 Viewportも設定しなおす方がいい。 SetRenderState()でZ関係の設定も再設定すると安心。 デバイス生成時にZバッファ自動生成だとどうなるかワカラン。
642 :
639 :2006/09/10(日) 22:56:50
で・・・できたー!テクスチャーにZバッファーを適用出来たよっ! ご指摘された部分に加えて、テクスチャ生成時、サーフェイス生成時の バックバッファと同じサイズに調整しなければならなかったようです。 640さん、641さん、ありがとうございます!
同じサイズではなく、同じサイズ以上なら問題ない。
小さいサイズでもViewportがサーフェイス内に収まってたら平気じゃないっけ?
645 :
-403- :2006/09/11(月) 00:35:54
DirectX9の最新バージョンをインストールしたいのですが、自分のPCが清規Windowsか いわれます。 どうにかダウンロードする方法教えていただけないでしょうか?・
ダウンロード版に帰れ。 それが嫌ならMSに金払え。 いずれにしてもこのスレには帰ってくるな。
こういうところで堂々と違法ソフト使ってますと書くのもすごいな
>>645 >どうにかダウンロードする方法教えていただけないでしょうか?
正規版買えばいいんじゃね?w
DirectXがWinが正規か判断するとは思えん。
Microsoftのサイトが判断してるんだよ。 Windows UpdateやMicrosoft Updateなんかでも認証してないと 正規版使えハゲって言われる。
じゃあその辺が突っ込んでくるActiveXをつつき回せば、 何を持ってして正規版か判別しているか解るから、 そこを適当に誤魔化してやれば回避できるって事だな。
そんな面倒なことをしなくても普通に正規品を使えばいいだけの話。
認証って何だ。シリアル入力のことか? そんなのした覚えないけど。
>>645 上のほうの 今すぐ確認 とか書いてあるところをクリックしたら確認される。
つ[ スルー ]
日給換算すれば、そんなの解析するより買ったほうが安上がりじゃないか? まあ無職だというなら納得だけど。
WindowsXPのProfessionalって3万くらいで買えなかったっけ? Visual Studio Professionalの16万に比べたら安いもんだろ。
無職でもなきゃ普通に買うだろうな。 その程度の買い物もできんモラル足らずの無職に恵んでやる知識なんかねーよ。 くたばれ。
DirectPlayってデンジャラス?
もうサポートされないって意味ではデンジャラス。
マルチテクスチャマッピングについての質問をさせてください。
テクスチャの上にアルファチャンネルを保持したテクスチャ(PNG画像を読込)を描画させることにかなり苦戦しています。
http://www.kurokichi.net/inside/up/src/up1881.jpg この画像のように背景テクスチャ(Tex0)とα値保持のテクスチャ(Tex1)を合成して右端のを表示させたいのですが、
現状では白色が透明色になったり、元の画像では完全に透明の部分が黒で表示されたりします。
SetTextureStageStateに何の値を入れ組み合わせれば画像のような合成が出来るのでしょうか。
見た目はTex0をテクスチャにしたポリゴンの上にTex1をテクスチャにしたポリゴンを描画し、それを上から見たのと同じになります。
ただ、これだと処理が多くなるのでテクスチャの合成を試みています。
664 :
デフォルトの名無しさん :2006/09/12(火) 04:06:23
3D(ライト無)で、テクスチャ付きで描画しようとしているのですが struct LVERTEX_UV { D3DXVECTOR3pos; D3DCOLORcol; D3DXVECTOR2uv; static const DWORDFVF; }; const DWORD LVERTEX_UV::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1; と宣言しておいて D3DXCreateMeshFVF( div*2, div*2, D3DXMESH_MANAGED , LVERTEX_UV::FVF , g_pd3dDevice , &m_pMesh ); で作成して Lockして内部パラメータ設定して g_pd3dDevice->SetTexture(0,m_tex); m_pMesh->DrawSubset( 0 ); で描画してるのですが、テクスチャが表示されません。 形はきちんと表示されています。 ので座標系の設定は間違っていないと思います。 m_texもきちんとロード済みです。UVの範囲は0〜1.0fです。 何が間違っているのでしょうか?
ポリゴンの姿勢制御で質問があります ちょっと言葉で伝えるのが難しいのですが、 Y軸を45°傾けた状態でX軸を回転させるのではなく、 直接斜めに回転させたいのですがどうすればよいでしょうか? 1┌─┐2 3│ ..│4 5└─┘6 上の図で言うと、2-5で結んだ角度でぐるぐる回したいのです よろしくお願いします
>>665 一番楽なのがローカル座標を使うこと。
つまり、2-5の線を軸にもつマトリックスをもって普通に回転させる。
もう1つは、@Z軸に対して2-5がY軸に垂直になるように傾ける
→AY軸を回転させたいだけまわす→BZ軸に対して2-5が元の位置に戻るように傾ける。
具体的に
>>665 の図でいうと
@Z軸-45度傾ける(2-5をY軸に垂直に)
AY軸をまわす
BZ軸45度傾ける(2-5を元の位置に戻す)
ってやる。
>>663 D3DTOP_BLENDTEXTUREALPHA
668 :
663 :2006/09/12(火) 09:42:04
>>667 レスありがとうございます。
試してみましたが
http://www.kurokichi.net/inside/up/src/up1886.jpg このように完全に透明な部分が真っ黒になってしまいます。
pDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
pDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
pDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_BLENDTEXTUREALPHA );
pDevice->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_CURRENT);
pDevice->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_TEXTURE);
ステージ0:Tex0(画像左上) ステージ1:Tex1(画像左下)
これは間違っているのでしょうか?
Zバッファについて質問なのですが、複数の描画先(レンダーターゲット)で 一つの深度バッファを使いまわすことは出来ないのでしょうか? 特定のモデルを描画したピクセルだけを別なテクスチャに抜き出したくて、 そのモデルを描画する際にレンダーターゲットに別なテクスチャを指定して、 深度バッファだけはいままで使用していたものを使いまそうとしています。 // 描画先の変更 LPDIRECT3DSURFACE9 rt; newTexture->GetSurfaceLevel(0,&rt); g_pD3DDevice->SetRenderTarget( 0, rt); rt->Release(); //いったんクリア g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(255,0, 0, 0), 1, 0 ); //今まで使ってた深度バッファを適用 g_pD3DDevice->SetDepthStencilSurface( pZbuffer ); といったプログラムを組んでるのですが、描画先を変更する前の 深度バッファの値は新しい描画先では無視されてしまい、 レンダータゲット変更前に描画されたオブジェクトの影になる部分まで 表示されてしまいます。 深度バッファを使いまわすことは出来ないのでしょうか?
>>666 ありがとうございます
D3DMATRIX m1, m2, m3;
D3DMatrixRotationZ( &m1, PI*0.25 );
D3DMatrixRotationY( &m2, y );
D3DMatrixRotationZ( &m3, -PI*0.25 );
m1 = m1*m2*m3;
という処理にしてみた所、上手くいきました、
45°ではなく任意の角度でやってみた所
D3DMATRIX m1, m2, m3;
D3DMatrixRotationZ( &m1, z );
D3DMatrixRotationY( &m2, PI*0.25 );
D3DMatrixRotationZ( &m3, -z );
m1 = m1*m2*m3;
こういう処理をした場合、zがどの角度であっても生成されるマトリクスは同じものになると思うのですが
実際には傾きが変化しつづけて相殺できません
回転軸を任意に回転させるにはどうすればよいでしょうか?
>668 ARG1とARG2逆じゃね?
672 :
663 :2006/09/12(火) 12:32:09
>>671 ありがとうございます
無事解決できました
>>669 >無視されてしまい
D3DCLEAR_ZBUFFERしてるからじゃないのか
>>670 任意軸周りの回転行列を出すD3DXMatrixRotationなんとかっていう関数があるから探すんだ
>>673 D3DXMatrixRotationAxisですね
ありがとうございます、希望の動きになりました
なんとなくはDirect3Dのサンプルプログラムや本買ってきて理解したんだけど、 複雑なモデルを表示させるには当然モデラーがいるんだよね? そのへんがよく理解できてないんだけど、フリーウェアでDirect3Dでも読み込める 形式で出力可能なモデラーってあるんですかね?
metasequiaが無料でxも出力する けど、モーションはない
>>677 さんくす。使ってみるよ。
でもモーションが使えないとかは残念な気がするけど、そこまで自分のスキルが
追いついてないからちょうど良いのかも。
今はモーションまで吐けるフリーソフトが結構あるよ Animadioとか、MotionWorksしかなかった頃に比べると便利になったもんだ MotionWorksも良かったけど、フレームアニメーションだけだったしな
kwsk
親戚「大学どこよ?おいらっち早稲田なんやけど〜wwwwww」 俺「東大です」 親戚「・・・え・・・!?」 俺「東京帝国大学です。」 親戚「・・・う、うわあ・・・ああ・・・ああああああああああ(イスから転げ落ちる)」 俺「どうかしましたか?」 親戚「ああ、あふゥッ・・・ひいいい・・ガクガク(足が震える)」 俺「やだなあ、そんなにびびらないで下さいよ。ちょっと頭がいいだけです から^^」 親戚「ああ・・あ・うんっ・ああ・・・ビクンビクン(小水を漏らす)」 俺「ちなみに理3です。」 親戚「あんっ!ああん・・らめ・・・もうらめえ!ビクンビクン(射精する)」
Windows2000のパソコンを親戚からお下がりでもらったので
ttp://www.amazon.co.jp/gp/product/4899771517/ この本で遊んでみようと思い、インストールしました。
コンパイル済みのサンプルを実行するとなにも起動せずに終了して、
exeと同じフォルダにログファイルが出来ていたのでそれを見ると
「0:DXライブラリは24ビットカラーモードに対応していません」
という文章が書き込まれていました。
このパソコンでは24ビットモード以上にはならないみたいなのですが、
どのようにプログラムを書き直せばうちのパソコンでも動くのでしょうか?
(16ビット以下には落としたくないです。)
24ビット以上にならないのなら24ビットも使えない。
あの、法線マップとかいろいろ使うと 三角ストリップとかの高速化技術は意味なくなってくるものなんですか? それはそういうものだとしてこのまま行っていいものでしょうか?
>>681 メタセコイアで形を作ってmqoファイルに吐き出す
→RokDeBone2でmqoファイルを読み込んでモーションを作る
(→RDB2で複数のモーション合成)
>>670 もう、解決したからどうでもいいっぽい?
でも、一応w
そのやり方だとY軸に垂直にしなきゃならんので
正方形なら必ず45度にしないといけないんだ
つまり、長方形だとすっげぇ半端な角度になったりする
まあ、D3DMatrixRotationAxisのほうがいいね(俺はその関数しらんかったけどw)
>>681 mikotoデータを流用できるmikoto2x筆頭に
吐き出し部分書けば好きなデータも付けられるプログラマ向けのRokDeBone2、
αテスト中だけど一本で出来るMusket、
シェアで良いならエルフレイナも分かりやすくて良さそうだな
後はBlenderでも吐けそうだ。プラグイン誰か書いてたような
初期化についての質問なんですが、 初期化の仕方によって、FPSって変わるものなんでしょうか? 書籍や、そこらのホームページに載ってる方法で、初期化したものは、 大体75FPSぐらいしか出ないのに、SDKのサンプルを利用したものだと 普通に100FPSを超えます(表示するものはポリゴン一個) どこを弄ればこんなにも差が出るのでしょうか? よろしくお願いします
まさかとは思うが垂直同期とってるとかいう落ちはないよな?
>>691 >>692 ありがとうございます。
そのまさかの、垂直同期とってることが原因でした。
D3DPRESENT_PARAMETERS構造体のメンバーPresentationInterval
の設定をしなかったせいで、デフォルトの値0(D3DPRESENT_INTERVAL_DEFAULT)
になってしまい、垂直同期を行っていました。
そのため、D3DPRESENT_INTERVAL_IMMEDIATEを設定し、垂直同期しないように
した所、FPSが120ぐらいになり改善されました。
実際に、SDKのサンプルを見るとコメントに
↓こう書いてあったので、これで正解みたいです。
// For windowed, the framework defaults to D3DPRESENT_INTERVAL_IMMEDIATE
// which will wait not for the vertical retrace period to prevent tearing,
// but may introduce tearing
Win98を無視するならフルスクリーンでならリフレッシュレート弄れるんだよなぁ
>>686 > あの、法線マップとかいろいろ使うと
> 三角ストリップとかの高速化技術は意味なくなってくるものなんですか?
そんな質問をしているようじゃ、とても法線マップとか使えないから安心しな。
ヒント:外積
ストリップは単に頂点キャッシュの効率最大化が目的だしなー。 上に何張ろうと有効性は変わらないよ。 最近はもう少しすすんで、オブジェクトを外側から内側に書くよう 渦巻き状にストリップを進めるみたいだね。 こうすると無駄なフィルが減ってオクルージョンカリングの効率が向上し、 帯域保護に繋がると。 色々考えるもんだ。
外積ってなんですか?
法線マップとかを使ったときの負荷を考えると
ストリップ化した程度の高速化では焼け石に水。
とかいう意味でなら、
>>686 も正解と言える。
外側→内側に描画するのはZテストで早期にはじくためにも
以前から言われてたことだけど、オクルージョンカリングがハード側で
行われるようになれば格段に速くなるかもね。
アルファブレンディングを考えると内側→外側なんだけどな(´Д`)
俺もストリップ化なんてやらねー。 全然、速くなんてならない。 貼るものが固定だったときはそれなりだったけど もうメッシュごとにテクスチャ切り替えまくって描画してるし ストリップ化してもマテリアルが違うからほとんど結びつかない→ストリップ化してない状態とほとんど変わらない。
C++(orC)/DirectXでゲームを作ってる人、エディタは何使ってる? 何かのパッケージを買おうと思うものの・・・・・・どれもそれなりの値段だからなぁ・・・・・ イマイチ踏み切れない俺
ee jumpを思い出した
FPSを100くらいに抑えてある状態だと問題ないんですが 抑えないで300くらいの状態で動かすと一定間隔でがくっっとなってしまいます 何が原因なんでしょうか・・・ FPSを抑えてるときは問題ないことから ハードウェアのほうがいっぱいいっぱいなのかな?と思うんですが 情報が少なすぎかもしれませんが、思い当たることがあればご教授ください
>>704 時々でいいので、OSにも処理を戻してあげてください。
イベント残業が溜まってしまいますので・・・
即レスありがとうございます 一応レンダリングが終わったらSleepしてたんですが・・・1だけ ちょっと増やしたらその分FPSも落ちますが制限しなくても大丈夫になりました
つーかFPSなんて60ありゃ十分だろう
708 :
デフォルトの名無しさん :2006/09/15(金) 00:21:29
>>707 やだよ。
なんか最近75はほしいと思うようになった。
FPS75を維持するってことは実際問題として グラフィック的なクオリティはかなり妥協するってコトだぞ。 2Dゲームなら余裕だろうけど。
FPS75で3Dすらすら動くとか言ったら、どんだけポリゴンが少なくてショボイかがばれちゃうぞ
>>711 60で動くもんは75でもだいたい動くよ。
カメラの設定が悪かったりデザイナが腐れミカンだと一画面にポリゴン敷き詰めすぎてよろしくない。
俺は、速度が出ないのって最適化とかグラボの処理速度より、
この辺のセンスが悪いことが原因の方が大きい気がするけどね。
全部デザイナーのせいって言ってるようなものじゃねぇか....
BumpとかHDRとかやってないなら十分出そうではあるが・・・ あとはゲームのシステムにもよるか。
60FPSは半ば以上慣習的なもんだしなー。 ときに一応人間の筋反射は1/16秒前後が限界、 連続量の見切りだけなら1/100程度までいくらしい。 PCが速くなった分フレームレートを上げるのはいいんだが、 今度は昔に比べて遥かにメジャーになった液晶の反応速度の問題が出てくるな。 こっちの反応速度は高級品でもなければ実質50FPS程度。 それ以上にしたところで残像まみれで見れたもんじゃなくなる。 つーか下手すると回路の都合で信号を捨てられたりしてしまう。 75FPSあたりからフリッカフリーになるとは言うが、 それは走査線走らせてるモニタの話で、液晶とかでは関係ない。 あんまり速くしたところで、今度はノッキングの問題が出てくるし、 結局のところ自己満足の世界だな、今のところは。
絶望した!垂直同期の話がまったく出てこない現状に絶望した! ディスプレイが60回しかフレームの更新してないのに、200回300回更新して何の意味があるよ。
75以上出るデバイスはあるのと、操作自体の感度は上がるので。 まあ、絵に描いた餅だけどな。 液晶は大抵60固定で、実質30未満なんてのもザラだけど。 そんなんでも普通に使うには困らんからなー。
別に液晶の話なんてしてねーし。 ただ、いいディスプレイ使ってる奴にはいい画でプレイしてほしいね。ってだけ。
TVも60くらいじゃなかったけ? FPS30で何が困るっちゅうんだろう?
そもそも映画はFPS24だしな。 垂直同期に関してはソフト側でリフレッシュレートを Win9X系では自由に変えられなかったから その流れでWindowsはタイマーで管理って流れがあるし。 いっちゃ何だが今は液晶の方が利用者は多いと思うぞ。 FPS75だと半分に落とすことが出来ないしいっそ80で作ったら?
CRTほしんだけどな・・・・
つーかハードごとに違ってメンドくせーから、DirectXが標準で60FPS、ディスプレイも60FPSを必ずサポートして 初期化で完全に同期するようにしてほしい。 それ以上の解像度は性能の高いものだけサポートされると。 コンシューマはこの点でうらやましい。
>>717 > 75以上出るデバイスはあるのと、操作自体の感度は上がるので。
操作系の処理は別スレッドでやれよ・・(;´д`)
FPSとかリフレッシュレートの話をすると、最後は宗教論争になるぞ。 警告はした、あとは知らん。
アニメは24fps
俺の携帯は5fps
727 :
デフォルトの名無しさん :2006/09/15(金) 19:50:59
FPSを固定しなければすべて解決。
それもそうだ なぜ皆固定したがるんだ?
じゃ、FPS非固定のゲーム作ってくれ。 リプレイ付きで。
>>728 可変だと色々調節するの面倒だからじゃん。
可変でもリプレイは普通に作れるゾ
>>730 しずちゃーん、平成18年だよ? 平成3年の知識ひけらかすのやめてよー。
別にユーザーの環境によって多少速度変わっても ええんじゃね?と思う。 どうせわかんねえよ。 '60FPS'って適当に文字列を表示してたら。 バーチャとかアーケード筐体の対戦ゲームの開発者ならともかく
FPSは固定した方が断然楽だからな。
可変(非固定)にすると衝突した時の計算とかスゲー大変。
>>734 可変=速度が変わる ってのは間違いだぞ。
FPS非固定っていうのは要するにカクカクな動きになるってことだ。
移動速度とかは変わらない。(変わらないようにしなくてはいけない)
FPS可変なら、敵が弾幕撒いたときに回避が楽になるジャマイカ。
ヒント:名前欄
固定にしてても描画が追い付かなければOUT(;´Д`)
論点が違うのでOUT(;´Д`)
固定で描画が追いつかなければ計算部分だけ落ちた分回せばいい
>>743 それをやるために1フレの目標FPSを決めてそれを基準にするんじゃないか?
745 :
716 :2006/09/16(土) 21:21:52
>>724 >FPSとかリフレッシュレートの話をすると、最後は宗教論争になるぞ。
分かってるんだけどきれーにスルーされてるのがむかついたもんでついな。
てか、皆泥沼を恐れてこの話題避けてるから、
D3DPRESENT_INTERVAL_IMMEDIATEにしたら速くなったぞやったーで終わっちゃう無邪気な初心者と、
カクカク動くゲームが量産されてるんだよ。DirectXローカルで閉じてるのならまだいいが、
最近はゲーム機やアーケードにまでそういう無頓着な作りのゲームが紛れ込んできてるからな。
たぶんDirectX出身のプログラマがアホやってるんだろう。
ディスプレイがハードウェア的に固定回数のフレームの刷新をしていることを無視して、
究極の映像美などありえんのだよ。
と燃料投下
>>745 無頓着とかDirectXは関係ないだろう。
処理落ちなんてアーケードでは普通にあること。
2Dの頃は処理落ちしたらそのままゲームのスピードまで遅くなっていたんだから
今よりよっぽど無頓着だったかと。
>>746 ちと論点がずれてるっぽい。
処理オチだけの話じゃないし、そういうレベルの話じゃない。
俺は
>>716 が危惧してることも分からなくはないが、
垂直同期というのもを理解しようとしない人が多いのと
FPSには強い信念を持ってる人が強情なのと、とにかく議論が平行なんだよね。
基本的にコンシューマ機ではティアリングとか無視できないけど
PCではリフレッシュレートが一様じゃないのと、スペック的に
60FPSで回すこと自体が満足にできないマシンが多いから、諦められる。
知って実装してる人と、知らなくて理解をしようともしなくてゲームを作ってる
人がいることは、大変な危機感を抱く。本当はみんなに理解してほしい。
理解してない人が心配ってのは、ようするに60fpsを下回るような プログラムで満足しちゃうってこと? 常時48fpsくらいで回ってるみたいな。
>>748 そういう心配じゃなくて、ハードの特性を理解しないままでいるってことが。
垂直同期が60/秒だったら、それ以上速いタイミングで画面を更新しても
意味がないっていうか、そもそも更新することができないってこととか。
垂直同期を無視した場合に、画面にチラチラ何かが横切ってる(ティアリング)
原因がわからないとか。
無知を心配してるんじゃなくて、「でも、まあ動いてるからいいか」とか
「こっちの方が速くなった」とかで満足してる人が心配。
ユーザが同じハードを使うなんて どこのゲームメーカだ?
DirectX9でサーフェイス作成してサーフェイスに画像ファイルを読んで バッファに転送して画像を表示しています。 このサーフェイスのRGBの値は変更出来るのですが、アルファ値が変更出来ません。 どうしたらいいでしょうか?
サーフェスのフォーマットにアルファは含まれているか。 アルファ書き込みモードはONになっているか。
>>752 サーフェイスもバックバッファも全部アルファありにしてみたんですがダメでした
テクスチャのアルファは普通に変更出来るんですが、サーフェイス作成の方は
出来ないです。
なにか設定が足りないんでしょうか…
質問に便乗。 LockRectで取得したピクセル列の並びがよく分からない。 ピクセルを4バイトずつ進めても上手く書き込めない。 アルファ値だけおかしい。
サーフェスのフォーマットは?
>>751 何をしたいのかわからんがサーフェイス間転送ってそのまんまコピーしかできないぜ。
DirectX7みたいなカラーキーの処理は無理。
そもそもStretchRectできるサーフェイスってD3DPOOL_DEFAULTのみなんだし
ロックできないんじゃねーの?
メッシュについての質問なんですが、 下記の工程1の場合に比べ、工程2で描画した方が、なぜか描画のFPSが飛躍的 にあがります。これは、どのようなことが原因なのでしょうか。 ちなみに作成したメッシュは立方体*36であり、立方体の6面、それぞれに対して テクスチャを貼り付けてるので、アトリビュートの値は、それぞれバラバラで 整理されていません。 よろしくお願いします。 工程1: D3DXCreateMeshFVFで空のメッシュを作る ↓ 頂点、インデックス、アトリビュートをロックして情報を入れる ↓ 描画する 工程2: D3DXCreateMeshFVFで空のメッシュを作る ↓ 頂点、インデックス、アトリビュートをロックして情報を入れる ↓ D3DXSaveMeshToXでXファイルを作成する ↓ メッシュを解放 ↓ 作成したXファイルをD3DXLoadMeshFromXで読み込み、新しくメッシュを作る ↓ 新しく作ったメッシュで描画する
>>757 1と2でメッシュがどう変わってるのか調べればいいじゃないか。
頂点をハードでもってるか、ソフトでもってるかの違いだけだったりしてw
Optimize
>>758 今、調べてみたんですが、
作成したXファイルをD3DXLoadMeshFromXで読み込んだ方のメッシュは、
なんか、最適化されてるみたいです。
バラバラになってるはずのアトリビュートの値が整頓されており、
対応するようにインデックスの値も最適化されていました。
最適化を行うOptimize関数は、プログラムに書いていないので、
D3DXLoadMeshFromX関数によって、xファイルから読み込む時に最適化されてる
ようです。
D3DXLoadMeshFromX関数って、勝手に最適化するんですか?
ヘルプには、単にXファイルを読み込む関数としか書いてないんですが・・
情報お願いします
ホントに最適化のせいなんかなー。 頂点作るときにハードかソフトかの設定が影響してんじゃねーの?
メッシュの中身をデバッガで見れば分かることで(ry
ところで立方体*36は全部同じ頂点バッファに突っ込んでる状態?
765 :
757 :2006/09/17(日) 11:33:59
>>762 >>763 デバッグでメッシュの中身を見た結果が
>>761 です。
ちゃんと、整頓されてました。
>>764 D3DXCreateMeshFVF関数を呼び出して、メッシュを作る時に
頂点の数を引数に指定するわけですから、この関数の内部で頂点バッファ
が作られ、その頂点バッファに
pMesh->LockVertexBuffer(0, (void **)&pV);
でロックして全部頂点を突っ込んでます。
>>761 断言はできないけど、D3DXSaveMeshToX で最適化してるんじゃね?
出力されたXファイルの中身を確認してみなよ。
767 :
757 :2006/09/17(日) 19:19:21
>>766 D3DXLoadMeshFromX関数が、やっぱり最適化してました
これで、一つ疑問が解けました。
ありがとうございました
そこまで来たら、ついでにSave&Loadを使わない方でも Optimizeしてみて比較するのが真のプログラマ。
>>768 それはDX10で無駄になるのでやめるべきだろう
Xファイルなんて右も左もわからない初心者が3Dモデルをロードするだけのものじゃん。 ブラックボックスの仕様に悩まされるなんて馬鹿らしいと思わないの?
全然ブラックボックスでも何でもない。 D3DXの高レベルAPIが癌なだけ。
IAnimationControlerとか気まぐれで仕様変えるヤツを 使わなきゃ癌ってほどひどくはないだろ。 普通のXファイルを普通にアニメーションさせるぶんには問題ない。 テクスチャUVを複数もてないのがネックといわれていた頃もあったけど、 今じゃそんなの使わないし・・・デカールは1つありゃ十分だ。 デカール以外のテクスチャ座標は全部シェーダー内で作るしな。
あほみたいに初心者レスなんだけど、2D処理する場合 昔のDirectDrawとDirectX Graphicsって結構違うの?
>>773 ずいぶん違う。
昔のは回転とかしようと思うだけでアフォかってほど手間がかかる。
しかも、激遅。
今のは今ので3D絡んで面倒だけど楽は楽。
>>774 ありがとう。
初期化処理とか手続きとかAPI名とかも変わってるの?
D3DXはスキンメッシュの読み込みにもバグがあって使い物にならない。
むかしどっかのスレに書いたから探してこい。
>>780 無理。いま、IE7入れたからバグりまくってて検索する気になれない。
つか、たまに日本語入力できなくなって鬱。
なんでいま、2ちゃんぐらいしかやってない。
とりあえず
警告<IE7はいれるな!>
いつもはこんな人柱やんないんだけど、仕事でしょうがないからいれたらこのザマ。
>>781 WMP11といいIE7といい
ほんとM$社はアルファも良い所で公開するよな
>>782 いままで作ったもんが普通にずれるのはこれからの標準になっちゃうのか
これはバグなのかとりあえずはっきりしてほしい。>MS
359 :名前は開発中のものです。:2006/08/24(木) 12:13:30 ID:sJxsspLQ ちなみにD3DXのXファイル読み込み関数は、 頂点ウエイトが入っているときのインデックスの展開にバグがある。 頂点とウエイトと法線のデータの展開時に、 頂点と法線が別々のインデックスで管理されているはずなのに、 頂点側の並びに合わせて、インデックスで重複を省けるはずの法線データを無駄に増やさないと、 正常に展開できずにウエイトの付き方に異常が起こりメッシュに穴が開いたりする。 これは最新云々関係なく昔からのD3DX側のバグ。 はっきりいってD3DXのXファイル関係の高レベルAPIは使い物にならない。 エクスポートされたデータそのものに異常はないので、 Xファイルの読み込みぐらい自分で作ればいいだけの話。
なら問題ねぇや。 法線自体もたないXファイルしか使ってないし。 面の角度に合わせて法線を重み付けして計算しないと 分割数の多いほうに法線が寄るから法線は自分で計算してる。
それは単に変なモデリングソフトを使っているせいだろ。
>>776 ナイス情報!
職業柄DirectXばかり見てきたが、GDI+だけでもいろいろ出来そうだね。
Javaみたいに手軽なのが便利だな。
実際問題高レベル描画はGDI+使った方が格段に楽だと思うわけだが、 そのGDI+自身がDirectXで走ってたりすることはあるのかしら。 教えて詳しい人。
>>785 いや意外に多いよ。
D3DXの法線計算も面法線を単純に合成して正規化してる
だけだからポリゴン分割数多いほうに法線が寄る。
>>783 IE6では見れたのにFirefoxやOperaで見れなかったなら
作ったもんが異常
これまでのどのブラウザでも見れたのにIE7だけズレるならバグ
>>790 だってすでにテストが面倒だからIEしか対応してねーしw
ActiveXあること前提だし。
792 :
デフォルトの名無しさん :2006/09/18(月) 17:45:26
>>788 それはない
一般道と高速道みたいに通り道が違う
>>792 いや、正直よくわからんって感じ。
クラスの関数一覧みるとインターフェースにそれっぽいのあるし。
回転がハード使ってるとしか思えないほど速い(と思う)。
普通に1ピクセルずつ画像を処理するよか速い気がする。
DirectXは関係ないとしてもグラボのハード機能は使ってるんじゃね?
>>795 あるんじゃね?
昔も今もハードを制御してるのはOSなんだし。
GDI+はぜんぜんビデオカード側が対応していないので、 ことごとくソフトエミュレートになっている。 GDI+のベンチマークソフトが使われるようになればメーカー側も考えるだろう。
DirectX入れてなくても動くって事は?
GDI+がグラフィックボードを利用してるかどうか確かめる方法ある?
>>785 法線がない状態で曲面とか角をどうやって判断するつもりなんだ?
せめてスムージング情報をモデリング時に引っ張ってこないと復元できないぞ。
>>789 そのこと俺もずっと前に言ってみたが、理解してる人はほとんどいなかった。
あと、D3DXのバウンディング球も重心求めてるだけで、最小包含球ではないね。
そもそもグラボっていうのはグラフィックアクセラレータって言って・・ って遡らないと話は通用しないのかな? Window自体の描画だってグラボ使ってるんだからGDI+だって使ってるだろう、 っていう単なる推測なんだが。 まさかポリゴン描画だけがグラボの仕事だとか思ってないよな? > GDI+がグラフィックボードを利用してるかどうか確かめる方法ある? グラボから伸びてるケーブルがディスプレイにささってるから。
>>802 αブレンドとか回転とか、GDI+で追加されたものが、
専用のアクセラレーションで機能しないということ。
表示されていれば利用しているとか、幼稚園児かお前は?
>>803 逆に聞きたいんだが、なんでグラボのハード機能を使ってないって思ってるの?
OSがハードを制御してるしハードは描画に特化してる、使わないって考える方が
すごく不自然なんだが・・・
>>804 いや、用は3Dアクセラレーターが使ってあるかどうかって話なのよ。
自前で計算したときよりもGDI+を使った方が遙かに速度が遅いから。 ちなみに3Dアクセラレーションを使った場合は桁違いに速い。
>>805 んー3Dの話は全然してきてないんだよね・・・GDI+って2Dじゃん。
DirectX=3D とか グラボ=3D とか 変な認識があるのかもね。
で、その3Dアクセラレーターが使ってあるとグラボによって そのサポート状態が違うわけよ。 で、できないグラボで3Dアクセラレーターを使ってしまうと、 それを無理やりエミュレーションする場合があって、その場合今度は糞重たい(実用にならない) だから、ハード(グラボ)の特有の機能を警戒してるわけ。
>>806 おお!それは有力な検証結果ですな。
じゃあ描画自体は自前でやってる可能性もあるかも。
回転させたときに描画が速いっていうのが気になるが・・
>>807 ちがうんだよ。
2Dでも3Dの機能を使って2Dの描画をしてる場合があるんだよ。
特に回転なんてソフトでやったら糞重たい、重たいどころの話じゃない。
3Dの機能を使うことと3Dの描画しかしないことは等価じゃないのよ。
3Dの機能を使って、2Dの描画をやってる場合を考えてるのよ。
>>807 DirectDrawが打ち止めになった理由が分かってないだろ。
2Dでαブレンドや回転のアクセラレーションをハード側に載せるのが無駄だから、
全部3Dでやれということになったんだよ。
その為、メーカ側が2D用の拡張アクセラレーションをわざわざ作らなくなった。
GDI+でアクセラレーションが欲しければVistaを使うしかない。
その為のAero。
>>808 やっぱ「グラフィイクアクセラレータ」の話からしないとダメなのか?
今で言うグラボが出た当時はね、OSの描画全般を早くこなすために
アクセラレートする目的のハードだった訳よ。もちろん普通の描画に使うのね。
それが、「最近ではハード使わない」っていうのは考えにくい。
通常のウィンドウ描画にハード使ってるんだったら、GDI+にだって
もちろん使ってる可能性は高い。むしろ使わない理由が見当たらない。
ちなみにAero環境下ならGDI+のAPIは、ブレンドだろうが回転だろうが、 ほとんどブロック転送と変わらない速度で動く。
>>812 だからそれはGDI用のアクセラレーションを使っているだけで、
GDI+用の拡張部分には対応していないから、
対応していない部分はCPUが計算しているという話。
一切使っていないわけではない。
>>810 あなたは俺と同じ認識みたいだよね。
GDI+という2D描画にもハードの機能を使うことが考えられるって意味で。
>>811 それでOSが描画にハード機能を使ってないって説明になってるの?
ウィンドウを自前で書いてるとでも??
で、GDI用(GDI+ではない)ってのは回転なんてサポートしてない(と思われる)わけよ。
>>815 だから、俺等のいうハードの機能っては3Dアクセラレーターのことなの。
で、それをもし使っているなら各グラボごとにサポート状況が違うはずなのよ。
結論 GDI+の拡張部分をアクセラレーションがある状態で使いたければAeroを使え。 XP以前なら遅くても我慢しろ。
>>817 >>810 の言ってることもよく見てみなよ。
3D描画機能を2D描画に使うこともあるって書いてあるでしょ。
そもそも、回転とかアルファブレンドとかGDI+で設計してるのに
「ハードが対応してないから自前でやるしかないか・・」って話ないでしょ?
最大公約数なハードができることを設計してると思わない?
ちなみにGDIの時代は単なる矩形転送だけをハード利用してたから
回転とかアルファブレンディングに対応しなかっただけでしょ。
いや順番を正すと、GDIの設計がそうだからハードが対応しなかったってこと。
>>819 どのライブラリ使ってもそのへんの機能を使うにはまずデバイスの初期化が必要でな。
俺は使ってないとおもう。
ちなみにAeroは、Direct3Dに対応したデバイスドライバが必須。 結局GDI+は3Dアクセラレーションの機能に間借りする形で存在することになった。
>>820 もーーーーーーーWindows起動時に初期化しとけ。OSなんだからw
アプリで初期化が必要なのはOSに宣言するためってことも考えられる。
そもそも「DirectX使わないとハード使えない」って勘違いしてる人に向けて
いろいろ書き込みしてきたんだけどさ、話がそれすぎてるしOSの実装なんか
分かりっこないんだから、誰も断言はできない訳よ。
っつーことで最後に一言。「スレ違い」(´Д`)
>DirectX使わないとハード使えない だれだよそいつは?
>>822 無理っしょ。
いままでことごとく無理だったのに、いきなり動きはじめるわけないだろ。
解像度切り替えで全てのりソースが噴き飛ぶショボイ設計なんだからw
Direct3Dを使わないと現在のドライバ対応では、 回転やαブレンドなどのアクセラレーションは使えない。 拡大縮小などは大抵のドライバが対応している。
昔はビデオカードのうたい文句にDVD再生支援機能とかあったが、 おおすげえと思った後、実はただの拡大縮小機能だった悲しみを覚えている。
おまれらの意見を総合すると ようはDirectX使うな、と。
使いたくなければ使わなければいい。
こういう場合、半角英数の方を信じることにしている
一匹変なのがいるなw
タイトルバーつかんで移動すると Messageの処理が帰ってこないので メインループ動かないんですが、スレッド化以外で これを回避する方法ありますか?
タイマー
だけどWM_TIMERも、タイトルバーをクリックしっぱなしで 全く動かさない状態だと来ないんだよな。 そこで俺が考えた代替案。 WM_TIMERを送信するスレッドを作るw
>>834 でつ
( ろ WM_でタイトルバーつかんでるの拾ってその間はPAUSE
そもそもマルチスレッドを使わない理由は?
面倒くさいとか、面倒くさいとか、面倒くさいとか。
GDI+の専用スレある?
やはりスレッドにすべきなのか
じゃあWMでタイトルバーつかんだの検地したら 以降システムメッセージを無視する→ループが動く&マウスの位置にあわせてウインドウ移動 タイトルバーいじるの終わったようなら元に戻す
ゲームでマルチスレッドって今当たり前なのかな? 折角なら俺も使いたいところだ とりあえずDirectX側のパフォーマンスは少し落ちるらしいけど
必要なら使えばいいじゃん。 ゲームでマルチスレッドって、PCなら10年前から実装したけど。 アクションゲームなら必須。もちろん無くてもできる。
スレッドは普通使わない
>>845 は異世界の住人なので、こちらの世界の事ではないというところに注意してください。
(゚Д゚)ハァ
俺も別にゲームはマルチスレッドにはしないな。 使うのはネットワーク処理と、ファイル読み込みくらい。 まぁどっちもゲーム部分ではない。
ウインドウメッセージのために余計な処理を考えるくらいなら、 マルチスレッドにした方が遙かに楽。
せめて描画と入力関係は別のスレッドに分けろよ。 取りこぼしとか最悪だぞ。
タイピングソフトならまだしもアクション程度で取りこぼしとか別にいい気がするんだが。 コマ落ちするゲームは話が別だが。
853 :
843 :2006/09/24(日) 19:56:49
みんなレスサンクス やっぱりまだ、色んな流儀があるようで 今まではシングルでやってきたけど、入力を取りこぼしたことは無いかなぁ
すまん、取りこぼしって言葉は間違えだな。 シングルスレッドだと描画がカクカクになったら入力も同調するだろ? それを回避するには、入力だけでも別スレッドで処理しないと駄目ってことを 言いたかっただけだ。要するに入力のフレーム落ちね。
よし、FPS制御について語ろうぜ
FPSの話はもめるんで嫌ですw
directxなんて使わなくてもゲーム作れるよー directxのゲームは動かないことが多くていやです
>>854 いつの時代の話をしてるんだ? 1描画=1入力なのかw?
わかっているけど2Dゲームの考えが捨てきれない
1フレームの描画に時間がかかるようなケースだとスレッド使うしか対策無くね? そこまでスペックが低い場合は切り捨てるっていうのも手だけどさ
無駄な苦労がしたければシングルスレッドでやればいいんだよ。 ただしそれで問題が出てもグダグダ言うな。
シングルスレッドで問題が出るって言うほうが信じられん
ほんの少し前の書き込みすら読めない、能無しの
>>862 には一生分からないから安心しろ。
てst
1フレームの描画に時間かかるっていうが、 仮にえらい重い処理が入って1秒落ちたら60フレーム分キーデータバッファリングしとくのか?
モデルデータの読み込みとか展開なんかをしている間、 ブロックしっぱなしにするつもりなんだろうか?
重いデータのやりとりもない、入力も適当でいい、 処理中はブロックされても気にしない、 そんなプログラムを作っている人間にとってマルチスレッドは不要。
>>886 ,887
それ別スレッドにするのは読み込みであって入力じゃない気がするんだけど
小規模なミニゲームみたいなのしか作っていないのなら、 マルチスレッドの必要性なんて分からなくて当然。 気にするな、それが普通だと思っておけばいいんだよ。
なんらかの区切り毎に、モデルデータをまとめて読み込むゲームの方が多くね 動的に展開する必要があるのって、メモリ容量が不定なPCゲー? いや別にどっち使っても良いけど
さすがにサウンドは別スレッドにするなぁ それ以外はゲームループ内で全部やっちゃうけど
作ったことがない奴がいくら気をもんだって分からないんだから、気にしなくていい。
自己紹介が続いてますなw
>>867 別スレッドで重いデータを読み込んでも、結局間に合わないならブロッキングが起きるっしょ。
それどころか間に合わない場合の同期とか、処理落ち管理が面倒なだけな様な。
シングルなら、やる気ならその辺の制御は厳密に出来るっつーか。
データ読み込みで処理止めるような実装する奴はいないっしょ。それが必要なら、だが。
どっちかっていうと、楽したいから別スレッドに丸投げするもんだと思うんだけどな。
ゲーム中にリアルタイムでデータ読み込みとかは普通にやるが、 読み込みスレッドを別にするだけで入力だけ分けたりはしないけどなぁ。 ここで入力を別スレッドって言ってるやつは、 描画/演算/入力 って分け方なわけでしょ。
そこまですると全体的なスループットは逆に低下しそうだな。 結局どこかで同期しなきゃならないわけだし
マルチスレッドにするメリットって?
他の処理はともかくファイルの非同期読み込みや サウンドのストリームはさすがにシングルスレッドじゃ無謀だろw ネットワークはWinSockならWindowメッセージにイベントとして データのやり取りを受け取るように出来るからスレッドを別にしなくても ゲーム次第ではシングルスレッドでも出来るな。 非同期I/Oもあるし。
マルチスレッドはサウンドのストリーム再生にしか使ってないので、質問。 ファイルの読み込みを別スレッドでって言うけど、 読み込みなんてファイルのデータが必要なときにやるわけだから、 別スレッドで読み込んだって、どうせ読み終わるまで次の処理に行けない。 ってことは、先読みで別スレッドに読み込み処理をさせておくの? データが必要なときに、読み込みスレッドが読み込みを終えてなかった場合はどうするの? そんな心配をするくらいなら、いわゆる Now Loading の画面中に先読みしとけばいいんじゃないの? こんな俺に、ファイル読み込みを別スレッドでやるメリットというか、 むしろ方法を教えてください。
>ネットワークはWinSockならWindowメッセージにイベントとして >データのやり取りを受け取るように出来るからスレッドを別にしなくても >ゲーム次第ではシングルスレッドでも出来るな。 どんだけキューに積むつもりやねんとw まあ、自分で書いても、この種の処理は大抵自前のキューに積みまくることにはなるんだけどさ。
バタンキュー
>>879 データが必要になるずっと前からロードを開始しとくんだよ。
それでも間に合わなかったら、もっと前からロードを開始。
NowLoadingで良いという人はそれでもいいんじゃん。
コンシューマ畑にはそんなやつはいないと信じてるが。
>>876 同期が必要ならマルチスレッドなんか意味ないよ。
大人しくシングルスレッで頑張ってなw
シングルスレッ! 実際問題、マルチスレッドは楽するために使うもんだ。 問題が複雑化するなら使うな以上のことは何も無い気がス。 といいながらひとつ質問。 ウインドウのメッセージループ本体と描画&更新のメインループを 別スレッドで回すのは典型的だとは思うんだが、デバイスロスト時の 復元とかはどっちのスレッ!にやらせてる? 俺は今まで何も考えずにウインドウ側にやらせてたんだが、 これをメインループ側に押し付ければ、D3Dのライブラリは シングルスレッ!の方で済んだりするのか? マルチスレッ!版とパフォーマンスの違いがどの程度あるのか 知らんのだけど、誰かお母さんみたいに優しく教えてくれないか。
キー入力が同期しなくてもいいってそれはそれですげーな。
お母さん「好きな方でやりなさい」 アイツ「どっちを選ぶかは・・・自由だ!!!」
メカ物でNowLoadingは重要だよな。 本当に読んでいるかは別として
>>884 スマンが、デバイスロスト関連の処理はやったことないんだ(;´д`)
なんせマルチスレッドで組んだの、DirectX3〜5の時だったもんでな。
でも、やるとしたら描画の方のスレッドだろうな。
ロストして困るのは描画だし、DirectGraphicにアクセスするスレッドだから。
ちなみに描画はメッセージ処理するメインループ側だよ。
キー入力とゲーム処理を別スレッ!でやらせてた。
>キー入力とゲーム処理を別スレッ!でやらせてた。 それはそれで凄くね? J2MEのアプリとかだとキー入力が全部イベントだから そんな感じの迂遠なコードになるんだけど、D3DInputなら 普通に更新側で回した方が楽な方が。 WM_KEYDOWNとかから直接回収してたのん? デバイスロストしてても描画はスルーされるだけだから、 復元は本体側スレッ!でやるのが典型なのかもね。 ただ、Present失敗->復元はその場でできるのだろうけど、 アダプタの切り替えとかはウインドウ側でやらないと、 毎度毎度ウインドウ位置の問い合わせとかしないとならなくなりそうだ。 誰が書いても最終的には同じ処理になるんだろうが、地味に面倒だなあ。 DXUTに全部書いてあるんだろうか。 アダプタ変更とかはメッセージループ側でやってた記憶があるが。
>>889 当時のグラボは、パンチスルーすらも無いのがあるくらい低能で
とにかく描画が遅かったんだよね。だから、描画とそれ以外を分ける必要があった。
具体的にどうやってたかは覚えてないんだがw、キーボードにも対応してたから
メッセージを直接取ってたんだろうね。D3DInputは普通にね。
>普通に更新側で回した方が楽な方が。
更新側ってのが何を指してるのか分からんが、ゲーム処理は入力と同じスレッド
だから、そっちが更新側とも言える。描画更新という意味だったら別だね。
描画は同期を取ってないから必然的にトリプルバッファになったかな。
座標とか描画に必要なものだけをトリプルで管理してた。
入力→ゲーム処理で更新するもの、したもの、描画中のもの。
OK、描画コンテキストの生成が別スレで、 更新周りは切り離してたわけだね。 今のGPU事情考えたらまず無いタイプの実装だとは思うけど、 当時はそうするメリットがあったってことなのかな。 実感は追いつかないけど、なんとなく想像はつく気がする。 とりあえずお疲れ様でした。
> 今のGPU事情考えたらまず無いタイプの実装だとは思うけど、 何か特別な制限がない限り今でも同じ実装をすると思う。 PCってのは実行環境がまちまちだから、スペック低いのから高いのまで 同じ「ゲーム感覚」で遊べるようにしたいんだよね。 それには最低限、入力処理は別スレッドで同じタイミングで、って。 > とりあえずお疲れ様でした。 ありーん( ´∀`)
フレーム落ち対策で、更新側と描画命令生成側とを分離するのは 割とよくやる手ではあるよね。 ただ、それをスレッドで分けてまでやる価値があるかについては 賛否分かれるところな気がする。 ひとつには単純にタイミングの問題、描画周りはGPU側の応答つーか 端的には垂直同期の縛りがある以上スケジュール応答性に縛りがあるし、 それに足並みを揃えて同期をとる以上、更新側もプッシュバッファ的に 描画前準備情報を積んでおいて、描画側は詰まれた情報を元に描画命令を生成って 流れになると思うんだけど、そのオーバーヘッドはあまり小さく無い気がするし、 作りとしては少々大掛かりになっちゃうよね。 俺は単純に前フレームで経過したデルタ時間を更新側に渡す手をよく使うわ。 フレームを厳密に見たいとか、ゲームの質によっては許容できない場合もあるのだろうし、 誤差周りがついて回るので、これはこれで設計に気を配るところは多いんだけど、 PCゲーでかつ3D物だったりする場合、内部更新が60FPS固定で描画を分離〜のスタイルより 作りやすいのは確かだし、人間が感知できるレベルでの違いらしい違いもほとんど現れないし、 スループットも概ね上。 まあ、この辺は好き好きなのかな。
> 流れになると思うんだけど、そのオーバーヘッドはあまり小さく無い気がするし、 > 作りとしては少々大掛かりになっちゃうよね。 結局はそれなんだよね。面倒って。 あとオーバーヘッドは小さくはないが、描画の重さからすると微量なんだ。 もちろん描画が軽ければ別スレッドにする意味なんかなくなるよね。 > 俺は単純に前フレームで経過したデルタ時間を更新側に渡す手をよく使うわ。 今勉強用に作ってるやつとか、ちょっとしたデモだったら同じ方法使う。 アクションゲームだと無理が出てくるけどね。ネット対戦対応とか。 でも作りやすいのは確か。フレーム落ちにも対応できるし。普段だったらコレ。
最近はハイパースレッドやデュアルコアなCPUなんで スレッド使ったほうが処理効率上がるモナ
>> 俺は単純に前フレームで経過したデルタ時間を更新側に渡す手をよく使うわ。
ELがその方法とってるよね。
あとは基本的に60固定で組んでおいて、落ちたときに差分の時間見て演算部分だけ複数回回すっていう方法もあるね。
>>895 それはどっちかというとOggのデコードみたいなCPU使う部分をスレッド化した方がよさそうな気もする。
なんか変な使い方してる奴いるな。 内部処理と描画を別スレッドでってなんかメリットあんのか? しかも、描画が遅いときって別スレにしても結局CPUもある程度負荷かかってるような気がするんだが・・・ 確実に負荷も分離できるもんなのか? スレッドってぐらいだから1描画につき何回か内部処理を実行してるんだろうけど、 描画が1回されてる間、内部処理をそう何回もできるほど内部処理って負荷すくねぇかな? 当り判定で枝狩り処理してみたり、開発終盤になると意外と重くなるような気がするんだが・・・(どんなゲームでも何故か) マルチスレッド使うときって、先読みのロードとか曲やムービーの再生とか、そんなもんじゃねぇの? ここまで読んだけど他はあんまりメリット感じないなぁ。
>>897 スゲー古い話で、グラボが貧弱だから描画が遅いって言ってるのにね。
そんな当時のゲームなんで、内部処理は本当に軽いものなんだよ。
> マルチスレッド使うときって、先読みのロードとか曲やムービーの再生とか、そんなもんじゃねぇの?
ロードとかBGM再生でも使うに決まってるじゃん。
Athlon64X2のマルチコア環境で衝突判定とフレームの計算を二分割して、 2スレッドで処理したらFPSが1.4倍ぐらいになった。 キャラクターを増やすとさらに差が開く。
シームレス
いかに処理を分散させるかが重要だな
>>897 は、ちと勘違い
今のうちにスレッドを効率的に処理する方法を覚えておかないと、 今後化石と呼ばれるようになるぞ。 もうすぐ4コアがやってくるような時代だし。
セガサターンを思い出した
とりあえずキーワードは volatileな。
いや、volatile厨はこのスレまで出張ってこなくていいから。
> いや、volatile厨はこのスレまで出張ってこなくていいから。 マルチスレッドでvolatile指定しなくてどうするよ?w 別スレのvolatile厨の話と混乱してるなキサマ(´Д`)
>>902 CPUが複数あるのとアプリケーションのスレッドが複数あるのとどう関係があるのか全くわからない。
>>907 アプリがマルチスレッドだと、複数CPUにスレッドを割り振ってくれるんですよ。
別にゲームって組み込みじゃないからvolatileいらんのでは
volatileを指定しないと、最適化がかかって、 別スレッドからの値の変更が認識できなくなる場合がある。 この辺りの話は常識だと思うんだが。
>>908 それってそれぞれのスレッド同士が完全に分離してない場合でもその方が速いの?
例えば、キャラのボイスにしたって再生の命令を送ること自体は内部処理のスレッドになるわけじゃん?
終了を待つ処理があったとしたら、それを待つのも内部処理のスレッドなわけじゃん?
こんな状態で別スレッドって本当に速いの?
負荷のかかる処理を出来るだけ均等に分けて待ち時間を減らす必用がある。 いかに効率的に処理させるかどうかはプログラマの腕次第。 旧時代の化石プログラマには無理な作業。
>>911 別スレッドで終了を待ってたら(同期を取るっていうことね)
マルチスレッドの意味無いよね。もちろん速くもならない。
ループでぐるぐる直列で回している作業は、 きちんと考えればお互いのデータが依存していない範囲を分析して分散出来るんだが、 頭が硬いと、こういう処理を想像することすら出来ない。
何故オタは他人の人格否定から始まるのだろうか
どこに人格批判なんてあるんだ?
>>916 あ?わかんねーのかよww馬鹿だろ、おめー?
>>914 既にあるプログラムをマルチスレッドに分散するのは至難の技だよ(;´д`)
やはり最初からマルチスレッド前提で組み始めないと
どこでデッドロックするか分からなくて怖い。
もしかして今までの自分を否定されてしまうような、 なにかショッキングな事に気がついてしまったのか。
>旧時代の化石プログラマには無理な作業。 これとか? サターンは旧時代のハードだがマルチコアじゃないのかと。 てかもっと昔にもマルチコアのハードなかったっけ・・・?
>>920 どこにも人格に対する言及は含まれていないように見える。
>>915 「頭が硬いと、」ってところに反応したのかも知れないが
普通に「頭が硬い人は〜できない」って意味じゃねーか?
能力 != 人格
だけど真面目な話、これからはマルチスレッドは必須だから ちゃんと注意点・問題点と利点などを理解しておくといいよ。 最初は簡単で確認もしやすいファイルロードを別スレッドでやってみるとかね。 テクスチャファイルだけだったら停止することもないだろうし 問題があったら見た目にも分かりやすいし入門にいいんじゃん?
そういやファイルI/Oのスレッドって裏でずっと回してる? それとも読み込み時にスレッド立てて完了したらスレッド閉じてる?
>>925 人それぞれだと思うけど、最近よく聞く「スレッドプール」でやる人は
読み込み時にスレッド起動して完了したらプールに返すんじゃないかな。
ファイルはBGMストリームにも使われるから、アプリ起動中ほとんど使ってる
って考えだったら、専用のスレッドにしてずっと回してればいいと思う。
もちろん暇な時はsleepしてね。
>既にあるプログラムをマルチスレッドに分散するのは至難の技だよ(;´д`) 簡単かと思って迂闊に手を染めると大抵ドツボだな。 一度徹底的に解体して再構成する羽目になる。 見合った成果が得られるかは状況次第だけど、 このところのCPU事情鑑みるに、DirectX的には美味しいかもだな。 命中判定部分だけ切り離したりしたコードが高速に動いてくれるのを見るのは楽しそうだ。
深夜になると盛り上がるな。このスレ。
>>920 セガサターンはマルチプロセッサ。論理的には一緒だが。
サターンでも最後期のバージョンはマルチコアらしいが未確認。
たんにマルチプロセッサなだけなら、全然珍しくない。
旧世代のマルチプロセッサシステムは、マルチスレッド的な使い方よりも
マルチプロセス的な使い方だから、OSがCPU時間を勝手に割り振って
くれるような今のマルチスレッドとは全然違う。
単なる複数プロセッサ搭載マシンとSMPで組まれたシステムを一緒にしてはいかんよな、うん
どっちにしてもOSにまかせたほうが楽そうな話だけどな。 こんなの自分で管理してホントに速くなるのかね?
処理手順が思いつかず、そういう疑問を抱く
>>932 には無理。
スレ伸びすぎ つかマルチスレッド自体は相当前からあるだろうに、 なんで「最近出てきた新しい技術!」みたいな奴がいるんだろ
質問失礼します。 A1R5G5B5のテクスチャーをTRIANGLELISTで2Dとして描画しています。 頂点のアルファを変更し、半透明にしようとしたのですが、全く効果がありません。 (不透明になります。ただし、テクスチャーA1R5G5B5のピクセルの抜き色は反映されています。) 頂点色 D3DCOLOR_ARGB(128, 255, 255, 255) 0x80FFFFFF の時に半透明になるようにしたいです。 アルファブレンディングの設定は以下のようにしています。 dev->SetRenderState(D3DRS_ALPHABLENDENABLE, true); dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); ドライバーは最新です。 (他のソフトで半透明になるのを確認しました) 環境は以下の通りです。 DirectX 2005 April VS2003 Win2000 リモート DirectX 9.0c Win2000 原因が分かる方、よろしくお願いします。
考えるまでもなくテクスチャのα値を参照するようになっているからだろ。 それに何か疑問点があるのか?
>>936 それをどうやったら頂点カラーを参照するようになるか?って質問だろ。
オマエは初心者に厳しいなw
SetTextureStageState()のAlphaOP
939 :
935 :2006/09/27(水) 14:32:09
返答ありがとうございます。 SetTextureStageStateに関しては嫌な予感がします。 今会社なので試せませんが、夜見直して結果を書き込みます。 ありがとうございます。
wave読み込むmmio〜なAPIで、 ファイル(mmioOpen)でなくメモリから読み込むやつってあります?
mmioOpen自体にメモリから読み込む機能があるので頑張ってください。 とってもとっても応援してます。
「デバイスの消失」についての質問です。 SDKに書いてあるようにデバイスが消失したらD3DPOOL_DEFAULTで取得した 頂点バッファとかを解放する必要があると書いてあるわけなんですけど これって、わざわざ、↓の工程をしないといけないのですか? せっかく、頂点バッファを取得して、そこに頂点のデータを代入しても デバイスが消失したら、その頂点バッファを使えなくなってしまい、 代入した頂点データがパーになってしまうということですよね? 皆さんは、どのような対策をしてるんでしょうか? 代入する頂点データとかを別の場所に保存してるんですか? よろしくおねがいします。 工程: デバイス消失 ↓ D3DPOOL_DEFAULTで取得した頂点バッファを解放 ↓ Resetできるなら、Resetメソッドで復帰 ↓ また、頂点バッファを取得しなおす
元に戻せばいいだけの話なのに何が問題なんだ?
>>942 データを元に戻すのが面倒だったらアプリ終了しちゃえ。
「デバイスロストしたので終了します」って。マジでそれで十分だ。
945 :
942 :2006/09/27(水) 21:33:05
>>943 元に戻すためには、頂点バッファに入れた情報を別の場所で
保持し続けなければいけないわけで、もったいないと思うから。
ハァ、何がもったいないんだ? 必用な処理にもったいないも糞もないだろ。
面倒というなら分かるけど、そういう風になっているからしょうがない。 D3DPOOL_MANAGEDを使うか、DirectX10を待つしかない。
>>946 >>947 頂点も数が多くなれば、それを保持するのも
もったいないと思ったわけですが、
D3DPOOL_DEFAULTフラグを使う時は節約することは
できないようですね。
ありがとうございました
裏で保存する処理が行われていれば、どんなにメモリが無駄遣いされても絶対気にしないくせに、 面倒な作業だと思うと、途端にもったいないとか言い出す。
裏でバンバンメモリの確保開放が行われてるのに 断片化を嫌がって初期化時以外は一切mallocやnewをしない方針の人。 昔はよくいたよね。
>>950 別に同じヒープから確保されているとは限らないじゃん。
メモリプールだ
最近はOSがやってくれてるから わざわざアプリ側でそんなことをする必要がない
俺、メモリまわりの勉強ってやったことないんだけどさ。 今、自分のプログラムで何にどのくらいメモリを使っているか? ってどうやったらわかるの? あ、タスクマネージャーでわかるようなのじゃなくて どのクラスがどれくらい食ってるとかそういう情報まで調べようと思ったら 一般的な方法としてはどういうのがあるの?
malloc/free自分でこしらえたら?
とりあえずスレタイを読むと良いと思う。
>>955 もう、newとdeleteでかなり組んでるので勘弁してくださいw
>>957 オーバーライドするだけだから変更箇所は少ない
>>958 オーバーライドする方法は昔試みたけどSTLかなんかで妥協した覚えが・・・
>>959 じゃあ今回も妥協しなさい・・・妥協?挫折?
962 :
ヶロス :2006/09/27(水) 23:08:13
用語わからんw
>>954 メモリの残り容量取得する関数があるから
自分のアプリだけ立ち上げてテストして見れ
それだったらタスクマネージャーで見たらええやん
そういえばそうだ
そろそろ次スレの季節 俺無理だった。他の人ヨロ
>>941 kwsk
MMIOINFOの説明が無いしポインタっぽい指定も無い><
ウィンドウで描画してる間、別のコンソール画面で情報を表示したいのですが、具体的な手段が分かりません。 教授願います。
969 :
935 :2006/09/28(木) 01:10:05
>>938 解決しました。
ありがとうございました。
>>968 デバッグモードでアウトプットウィンドウで見たらいいんじゃん?
>>968 リッチテキストのウインドウでも作って、好きなように出力すれば?
>>970 ,971
ありがとうございます。
とりあえずprintfで出力できるコンソールウィンドウを考えています。
>>972 デバッグんときはシステムを/consoleでビルドして、
リリースんときは/windowsでビルドしろ。
int main( void )
送っちまった・・・ #ifdef _DEBUG int main( void ) { return WinMain( ... ); } #endif とかやれば問題ねぇ
そういうのパッと見わけがわからないからやめてくれない?
Windows厨は、黙ってOutputDebugString(TRACE)
>>973 ありがとうございます
コンソールウィンドウは出せましたが、今度は描画してるウィンドウがなくなりました。
描画しつつコンソールに文字出力というのは無理なのでしょうか?
んじゃ
>>975 の要望にもこたえる方法
::AllocConsole();
hConsole = ::GetStdHandle( STD_OUTPUT_HANDLE );
void Printf( const char *pStr,... )
{
Uint32 WriteSize;
char Temp[1024] = "";
vsprintf( Temp, pStr, (char*)(&pStr + 1) );
::WriteFile( hConsole, Temp, (int)strlen(Temp), &WriteSize, 0 );
}
>>977 コンソールアプリでもCreateWindowで普通にウィンドウ作れるわけだが・・・
UpdateWindow()とかShowWindow()とかしてないだけじゃない?
e:\デスクトップ\dx9animation\cd3dxobject.cpp(6): fatal error C1083: include ファイルを開けません。'DXUtil.h': No such file or directory とか言われるんだけど、DXUtil.hって昔のヘッダか何か?
SamplesのCommonの下にある、サンプル類が共通で使用してるファイル。 DirectX本編側に組み込まれてるわけじゃないから、自前で組み込んでなければ それは出るだろうさ。
982 :
デフォルトの名無しさん :2006/09/28(木) 11:48:25
教えてエロい人 スキンメッシュアニメーションと、ボーンアニメーションっていっしょ? 肌と骨で違う感じするけど、どうなん? DirectX使って再生する場合って、それぞれまったく違う プログラムが必要でつか?
984 :
982 :2006/09/28(木) 12:21:32
>>983 ありがとうごぜいます。
これで安心してプログラムくめまつ。
せっかくだから俺はボーンアニメーション使って
エロい同人ゲーム造るぜ。
Vistaが来るぞ、気をつけろぉ!
DirectXを初期化するとdoubleの割り算の結果が変わるのはなぜ?
>986 つD3DCREATE_FPU_PRESERVE
>987 ありがとうございます。 お手数ですがもう一つお願いします。 このパラメータDirectX8以降に対応してるっぽいけど、 DirectX7だと_controlfpしかないですかね? 使って戻してがかなり不便・・・
>988 自分で調べろよ DDSCL_FPUPRESERVE
>>989 度々ありがとうございます。
>自分で調べろよ
ここで聞くことは調べてることになると思いますが違いますかね?
調べるということは情報を得るということですから、
このスレで情報を得ようとすることは調べてることと同じと思います。
それにこのやりとりを他の人が見ることで、
その人もここで調べることができるわけですから、
決して無駄ではないはずです。
これがゆとりの成果。
初めて超理論展開を体験した
宇宙の真理がここにある
銀河の歴史に新たな1ページ
宇宙の授けた光の答え
次スレないの? じゃあ完結おめでとう?
997 :
デフォルトの名無しさん :2006/09/28(木) 23:14:14
何度でも蘇える!
>>990 日本語ドキュメント1つ読むコトすらできないの?
ってコトだ。
>>990 天然なんだねw
自分で調べろって言われるってことは、ぐぐればすぐわかることを質問してるからだろ?
そして時は動き出す。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。