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


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

【C++】 DirectX初心者質問スレ 【C++】
751 名前:744 :04/11/15 09:36:37
>750
これまた参考になります。
やはり自分はEffectのヘルプの読み込みが不足しているみたいですね、
もっと読んで頑張ってみます。

752 名前:デフォルトの名無しさん :04/11/15 13:10:04
BMPbottunを押すと
そのBMPが拡大されるプログラムを作りたいんでダレカ優しい人教えてください
自分は拡大されたBMPが貼ってある新しいウィンドを開く方法でやっていmすが

m_BmpBtn1.LoadBitmaps(IDB_BITMAP○);
void ○○::OnButton1()



753 名前:デフォルトの名無しさん :04/11/15 17:20:18
directx8でAOEのような高低差のある2Dマップの作り方教えてください

754 名前:デフォルトの名無しさん :04/11/15 17:20:22
初心者に最適は書籍あるいはwebページを教えてください

755 名前:デフォルトの名無しさん :04/11/15 17:41:08
自前でXファイルローダを作っています。
マテリアル部分の話なのですが、Specular、Emissive、Powerはそのまま読み込めました。

詰まったのはXfile側にDWORD faceColorしかない箇所です。
これはD3DMATERIAL9::Diffuseと、D3DMATERIAL9::Ambientの
両方にfaceColor値を入れるだけで良いのでしょうか?

これだとなんだか、思った以上に明るくなってしまう気がします。
(といっても元の発色が不明瞭なのでなんとも言えないのですが)
かといってそれぞれを2で割ってみても暗すぎますし…どうするのが正しいのでしょうか。

756 名前:デフォルトの名無しさん :04/11/15 19:29:08
なんでdiffuseとambientだけ、デフォルトのテンプレが無いんだろうな

757 名前:デフォルトの名無しさん :04/11/15 20:07:39
>754
本屋にいって立ち読みしてコレいいかもって思った本がいいよ
いや、マヂで
解説がわかりやすいとか読みやすいとか個人差があるから、
自分の目でたしかめるのが一番いい
で最初は解説本をベースにしてやっていくと専門用語がでてきたりするから、
ネットではそういった専門用語をキーに詳しく調べていく
多分経験上これがいちばん効率がいい

758 名前:デフォルトの名無しさん :04/11/15 22:24:13
I/Oの本は三冊買うまで役にたたない事に気づきませんんですた

759 名前:755 :04/11/15 22:28:00
>>756
そうなんですよ、なんだってこんな仕様に…。
昔はマテリアルのメンバにDiffuseとAmbientが無かったんですかね。

760 名前:デフォルトの名無しさん :04/11/15 23:02:15
マテリアルの色は、単色一つとスペキュラパワーで十分だろがボゲェ!!
By DirectX設計者



761 名前:デフォルトの名無しさん :04/11/15 23:05:45
ふたりはスペキュラ

762 名前:デフォルトの名無しさん :04/11/15 23:15:42
>>760
設計者さん、俺もそう思うからその単色の
セットの仕方を教えてくれインボーストリーム

( ゚Д゚)ハッ!!

763 名前:デフォルトの名無しさん :04/11/15 23:20:56
RM時代から化石と化したフォーマットなど使わず、独自形式でやれ。

764 名前:デフォルトの名無しさん :04/11/16 00:48:01
>>763
そうしたいのですが、この形式で何かをするとかではなくて
この形式を読めなければいけないというジョブでして。

ここまで回答が出ないとは思わなんだ_| ̄|○ <マイナー?

765 名前:デフォルトの名無しさん :04/11/16 08:20:30
なぜだろうな…
一度書いた線がずーっと残るっておかしいな
1フレームごとに画面をクリアしてるのに
なんで残ってるんだろう?
クリアされた後は線の描画は実行されないはずなんだけどな
あと、描いた線の色がまだらになったり、頂点の色は一緒だからグラデーションはかからないはずなんだけど
DirectX8の線の描画はなんか不思議な現象がよく起こるな

原因と解決法を教えてください

766 名前:デフォルトの名無しさん :04/11/16 08:51:45
どういうプログラムを組んでいるのかすら説明せず、ソースの提示すらしない。
他人はエスパーだという妄想でもいだいているんだろうか?

767 名前:デフォルトの名無しさん :04/11/16 09:02:01
>>766
ソースはサイズが大きいので提示できないです
DirectX8で線を描くプログラムで
頂点を設定してD3DPT_LINELISTで線を引くという単純なものなんですけど
ラインで繋がれる頂点の色はすべて同じなのにラインが3等分されたようなグラデーションがつくんです
3等分された両端が頂点色で真ん中だけが他の色になるんです

768 名前:デフォルトの名無しさん :04/11/16 09:31:47
ソースサイズが大きいのならそれは単純ではない。
まずはそれだけのための最小限のプログラムを作って試すこと。

769 名前:デフォルトの名無しさん :04/11/16 09:54:15
>>765
どこをどう考えてもオマエのプログラムミス。
FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
どうせその程度。
自分のプログラムを100回疑ってからDirectXとドライバを疑え。

770 名前:デフォルトの名無しさん :04/11/16 11:26:27
大抵、間違ってないっと思ってたところが勘違いであってると思い込んでる場合があるからな。

771 名前:デフォルトの名無しさん :04/11/16 16:34:58
傾いた地面に沿って物体を傾けたいのですが、どうしたらよいでしょうか?
地面の法線ベクトルはおそらく正しく求まっていると思うのですが、
これを使ってHPBの値を求めたいです。。
Bはそのままでいいと思うのですが、HPは一意に求まるんでしょか…
あたまがごっちゃになってきました。なるべく簡単な方法があればお願いします。
なにかDXでそれ用の関数とかあれば一番よいのですが。

772 名前:デフォルトの名無しさん :04/11/16 16:51:44
>>768
最小限のプログラムを作って試したところ
ビットマップと線を重ならないように表示させたのですが
なぜか線の色とビットマップの色がブレンドされてるんですけど
おかしいですよね?
>>769
>FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
これはどうやって調べればいいんですか?
>>770
そうですねたぶんそうだと思うんですがなかなかどこが間違ってるのか見つからないです

773 名前:デフォルトの名無しさん :04/11/16 17:06:32
>>772
>>FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
>これはどうやって調べればいいんですか?

どうしてこんな質問が出るんだ??????????
自分で作ったプログラムじゃないのか?

774 名前:デフォルトの名無しさん :04/11/16 17:16:21
>>773
プログラムの解説ページのプログラムをいじってるので
へんないじり方はしてないのであってるとはおもうんですが

775 名前:デフォルトの名無しさん :04/11/16 17:17:37
最小限にしたんだろ
ならソース見せてみろよ

776 名前:デフォルトの名無しさん :04/11/16 17:19:53
>>774
D3DFVF_なんとかいうとこを検索しろ。
その近くに、構造体宣言があるはず。
それらに矛盾がないか、構造体の宣言順番に問題がないか。

777 名前:デフォルトの名無しさん :04/11/16 17:22:57
>>775
600行近くありますけど見てもらえますか?
>>776
見てみます

778 名前:デフォルトの名無しさん :04/11/16 17:25:13
理解はしてないのに
へんないじり方してないからあってる

んなアフォな話があるか

779 名前:777 :04/11/16 17:56:07
http://up.isp.2ch.net/up/382f6bb28b65.zip
600行近くありますがほとんどがウインドウ表示やDirectXの初期化とかです
灰色のビットマップと赤い線を重ならないように表示したのですが
線が灰色がかった赤で表示されます

重なってないのになんで色がブレンドされるのかわかりません

780 名前:777 :04/11/16 17:58:34
パスワードは”1116"です

781 名前:デフォルトの名無しさん :04/11/16 18:04:34
なんだ、SetTexture(0, 0)してないだけじゃねえか。

782 名前:デフォルトの名無しさん :04/11/16 18:12:01
SetTexture(0, NULL)かな

色の違いがさっぱりわからんですが

783 名前:782 :04/11/16 18:13:47
更新してなかったorz

しかし600行ってほとんどコメントなのね

784 名前:777 :04/11/16 18:19:59
>>781
>>782
>>783
おかげさまで不具合がなくなりました
ほんとうにありがとうございました

785 名前:デフォルトの名無しさん :04/11/16 18:21:31
ていうか
gl_lpD3ddev->SetVertexShader(FVF_TLVERTEX);
ってなんなんだよw
gl_lpD3ddev->SetFVF(FVF_TLVERTEX);
の意?

786 名前:785 :04/11/16 18:31:03
あぁ、これでもいけるのか、無知すまそ。

787 名前:777 :04/11/16 18:31:37
>>785
プログラム解説のHPから拝借したので詳しくわかりませんw

調べてみたところ

頂点フォーマットを定義するには
IDirect3DDevice8::SetVertexShader() メソッドを使います
図を描画するには、まずこれを用いて頂点フォーマットを決定する必要があります

HRESULT SetVertexShader(DWORD Handle);

Handle には、頂点フォーマットのフラグを指定します
この引数には、以下の定数を組み合わせて指定することができます

だそうです

788 名前:785 :04/11/16 18:42:42
>>777
DirectX8 か、はやとちりした… orz
ちなみにDirectX9の場合は SetFVF(FVF_TLVERTEX)にする必要があるよ。

789 名前:デフォルトの名無しさん :04/11/16 19:12:38
質問ですけど
2Dの描画って頂点バッファつくってテクスチャ貼って表示するのが主流なんですか?
スプライトで表示するのって少数派?

790 名前:デフォルトの名無しさん :04/11/16 19:37:03
>789
スプライトに相当するものはもうないので、
それしか方法はない
D3DXSPRITE(だっけ?)のことを言ってるんなら
内部では結局頂点にテクスチャはってる
最初は練習の意味もかねて簡易スプライトクラスみたいのを作るといいと思う
最初は指定矩形に表示して、あとで回転とか移動とか拡大縮小とか、
マルチテクスチャとかシェーダとか、少しずつ機能を増やしていけば勉強になる
そのあとずっと使えるし

791 名前:デフォルトの名無しさん :04/11/16 19:37:37
>>789
大抵の場合古き良きDirectDrawを使う

792 名前:デフォルトの名無しさん :04/11/16 20:15:27
>>790>>791 thx
とりあえずDrawPrimitiveに移行してみます
挫折したらSDLでもやってみるか…

793 名前:デフォルトの名無しさん :04/11/16 21:46:59
>>791
スプライトは仕様がコロコロ変わりそうで実際変わってるので
DirectDrawを使うのが当分いい具合。

794 名前:デフォルトの名無しさん :04/11/16 22:42:51
そういえばDirectShowのところにIDirectDrawというのがあるんですけど
これを使うんですか?

それとも古いバージョンのDirectXを指してるんですか?

795 名前:デフォルトの名無しさん :04/11/16 22:59:59
古い方。

796 名前:デフォルトの名無しさん :04/11/16 23:03:59
>794
最新のSDKにもちゃんとddraw.h入ってるから使えるだろ

797 名前:デフォルトの名無しさん :04/11/16 23:48:50
(゚Д゚ ) ダイレクト ドロー・・・。
ノヽノヽ
  くく

(゚Д゚ ) !!
ノヽノヽ
  くく

(゚Д゚ )
ノヽノヽ=3 プゥ
  くく

直訳すれば
「直接引き分け」

つまりは勝ち負け無し 平和
リャンメン待ちってこった

798 名前:デフォルトの名無しさん :04/11/17 16:20:25
プログラムをコンパイルしたら、
g:\プログラム\sample\sample.cpp(5): fatal error C1083: include ファイルを開けません。'd3d9.h': No such file or directory
と出てしまったのですが、どうすればいいのでしょうか?



799 名前:デフォルトの名無しさん :04/11/17 17:08:57
ヘッダーのパスを通せ。

800 名前:デフォルトの名無しさん :04/11/17 22:16:18
ヘッダーのパスって、d3d9.libとかってやつですよね?
それをやったけど、エラーが出てしまうんです。
思い違いだったらすいません。

801 名前:デフォルトの名無しさん :04/11/17 22:22:38
>>800
>それをやったけど

何をやったんだ?

802 名前:デフォルトの名無しさん :04/11/17 22:31:34
ヘッダじゃなくてlibファイルのパスを通しただけに違いない

803 名前:デフォルトの名無しさん :04/11/17 23:15:29
>800
ツール→オプション→Project→VC++ディレクトリ
ディレクトリを表示するプロジェクトでインクルードファイルを選びDXSDKのincludeディレクトリを追加
同様にライブラリファイルを選びDXSDKのlibでぃれくとりを追加
初心者本なり初心者向けサイトなら最初にやるべきこととしてあげられてるはず
ちゃんと読みなさい

あと
>それをやったけど
こういった他人に通じない抽象的すぎる言葉は極力避けなさい
具体的に書かないとわかりません

804 名前:デフォルトの名無しさん :04/11/17 23:27:42
アホのお約束

ヘンなところは自分勝手に脳内変換解釈するのに
何でもないようなところは理解できない


脳内変換
・Cでプログラムしています -> C++でプログラムしています
("C"と言うと"C++"に勝手に置き換わるバカ)

日本語読めれば理解できる流れ

・「○○ができません」
 『△△しろ』
 「それはやってます」
 『何をやってるんだ?』

(自分で振っといて「それ」の対象を理解できないチョン)


805 名前:デフォルトの名無しさん :04/11/17 23:30:10
DirectXも全然関係ないし、チョンなだけ

806 名前:デフォルトの名無しさん :04/11/17 23:32:55
「DOSモード」と「リアルモード」は違うんですよ








みたいな感じ

807 名前:デフォルトの名無しさん :04/11/17 23:49:09
DXSDKをインストールして初めてのコンパイルでエラーした時
「ヘッダとライブラリへのパスをとーしてねーんだよ!!氏ね!!カス!!」
と表示されるウイルスきぼん

808 名前:デフォルトの名無しさん :04/11/17 23:54:46
やけに親切なウィルスだなw

809 名前:デフォルトの名無しさん :04/11/18 00:06:26
プログラムはC言語を今日から始めます
って人でもPC使ってて
>>ファイルを開けません。'd3d9.h': No such file or directory
こんな如何にもDirectX関係のファイルですって名前のファイルが
ありませんとか言われたら

インストールか設定に問題があることぐらい察しがつくと思うのだが

810 名前:デフォルトの名無しさん :04/11/18 00:07:07
いや無理だと思う

811 名前:デフォルトの名無しさん :04/11/18 01:12:31
警告やエラーが英語だと無条件で読まない奴がいるからな
全然難しい英語じゃないのに

812 名前:デフォルトの名無しさん :04/11/18 01:55:53
文でなくて図と認識すんだな。

813 名前:デフォルトの名無しさん :04/11/18 04:42:12
おまえらは初心者じゃないみたいだし、初心者の質問にも答える気がないなら
そろそろスレを移動する時期だ。

814 名前:デフォルトの名無しさん :04/11/18 09:07:48
>813
質問には>800で答えてる

815 名前:デフォルトの名無しさん :04/11/18 10:37:01
>>813
ここはDirectXの初心者質問スレであって
>>798のようなVC++初心者質問スレではない

816 名前:デフォルトの名無しさん :04/11/18 18:50:06
メッシュを読み込んで表示するまでは出来たんですが、
メッシュを回転して表示するにはどうすればいいんでしょうか??

817 名前:デフォルトの名無しさん :04/11/18 19:13:51
行列作ってセット

818 名前:デフォルトの名無しさん :04/11/19 11:57:28
>>816
ワールドトランスフォーム行列に回転行列をかける。
つまり、

ワールドトランスフォーム行列=回転行列*移動行列

とする。

819 名前:デフォルトの名無しさん :04/11/19 12:14:14
「行列のできるプログラマ」

820 名前:デフォルトの名無しさん :04/11/19 23:25:46
Direct3Dの行列は転置してるのが気に入らない。
なんであんな仕様に?

821 名前:デフォルトの名無しさん :04/11/19 23:33:27
左手座標系が気に入らない

822 名前:デフォルトの名無しさん :04/11/19 23:45:29
PS2は左足座標系だ。

823 名前:デフォルトの名無しさん :04/11/20 00:35:18
華麗に822をスルー

824 名前:デフォルトの名無しさん :04/11/20 01:36:14
#if 0
    >>822-823
#endif

825 名前:デフォルトの名無しさん :04/11/20 04:19:16
文字表示の方法がわからないのですが・・・
D3DXCreateFontで作った後、
DrawTextを用いればよいのでしょうか?

826 名前:デフォルトの名無しさん :04/11/20 04:27:14
>>820
頂点シェーダかSSEでマトリクスxベクトル書いてみれば分かる

827 名前:デフォルトの名無しさん :04/11/20 10:38:55
DirectX8で1フレームごとに画面を全部書き換えたほうがいいのか
変更のある部分だけ書き換えた方がいいのか
どっちがいいのでしょうか?
画面内でたくさんのキャラクターが動き回るようなことを想定しています

828 名前:デフォルトの名無しさん :04/11/20 10:55:30
>827
どうせZバッファクリアしなきゃいけないから漏れなら全部消す
多分速度的に問題が発生したら、そんなところよりも他で稼げるところがあるはず
どうしても60fpsキープする必要があって、ほんのあとちょっとで60fpsがキープできるのに
ってことになったら試してみる

829 名前:デフォルトの名無しさん :04/11/20 11:14:05
どのみちたくさんのキャラクターが動き回るなら
変更のある部分だけなんて
やってられなくなると思うが

830 名前:デフォルトの名無しさん :04/11/20 12:05:00
カメラが1度傾いただけでも全画面更新なのにアホな質問だな。
こんな想像力もないんじゃもうプログラマなんて辞めた方がいい。
どの道、この先何をやっても駄目。

831 名前:デフォルトの名無しさん :04/11/20 12:36:24
視点移動するとは書いてないけどな

832 名前:デフォルトの名無しさん :04/11/20 12:44:18
視点移動が行われない可能性を想像できなかったんだろ

833 名前:デフォルトの名無しさん :04/11/20 12:46:24
D3DXSPRITE(だっけ)みたいのでも使って2Dやってるんじゃないかな

834 名前:デフォルトの名無しさん :04/11/20 13:00:35
つまるところ、シェーダって何なのですか。

聞いた話では
ピクセルシェーダというのは本当に点を表示するだけであり
この点を表示する一連の行為自体をシェーディングと呼ぶ

というのですが

835 名前:デフォルトの名無しさん :04/11/20 13:09:56
他人にいちいち聞かないで、実際に使ってみること。

836 名前:デフォルトの名無しさん :04/11/20 13:41:42
>834
最近は初心者本でもシェーダまで取り扱ってるから
読みながらやっていったほうが早い
C++なんかに比べれば難しいものでもないし

ただし、ちゃんと対応したハードウェア上でやってくれ
最低でもげふぉ5200かな

837 名前:デフォルトの名無しさん :04/11/20 13:47:02
>>836
あれはゲフォと読むのかジーフォースと読むのか
どっちなのか迷ったがゲフォの方がヒット件数があまりにも多いのでゲフォでいいのかとか
思ったがやっぱりジーフォースって読むような気がするんだよね。

っていうか、セミナーとか言ってみたひとに聞きたいんだけど
外人ってGeForceのことなんて読んでた?

838 名前:デフォルトの名無しさん :04/11/20 13:48:18
外人は差別用語。

839 名前:デフォルトの名無しさん :04/11/20 13:52:05
>>838
じゃあ、外国の人
つーか、そんなんどうでもいいよ。
俺はジャップでも甘んじて受けるぞ。

840 名前:デフォルトの名無しさん :04/11/20 14:06:53
概念を知りたいんじゃないの

最近は名前ばかりが多く取り上げられているから
PixelShaderというと「キャラクターを描画すること」
しか思い浮かばないだろう

何のどういうプロセスを踏んで何を描画するのか
そういう作動方式と言うかそこまで伝わってないのが現状

841 名前:デフォルトの名無しさん :04/11/20 14:22:43
じゅふぉせ

842 名前:デフォルトの名無しさん :04/11/20 15:20:04
>>834
シェーダってのは、各頂点・ピクセルで行われる計算
(頂点単位での法線とライトの内積計算とか、
ピクセル単位でのテクスチャと頂点カラーのブレンドとか)を
専用の言語で自分でプログラムすることだと思う。
これに対してハードウェア備え付けの計算機能を、固定機能…って言うかな。

元々はバンプマップとかのシェーディング(陰影づけ)のための
ものだったけど、今では陰影づけと関係ないこと
(頂点ブレンドとか輪郭抽出とか)にも使われるので、
"シェーダ"という単語の意味からは離れてる気がしないでもない。
(OpenGLでは頂点プログラム・フラグメントプログラムっていってた気がする。)

843 名前:デフォルトの名無しさん :04/11/20 15:22:56
>840
だって素人さんに説明するの難しいんだよなー

シェーダという言葉はシェーディング(陰影)からきている
そこから発展して今はGPUに対する処理手順記述するものになってる
処理手順を記述することからプログラマブルシェーダといわれてる
世代が進むごとに応用の範囲が広がり多種多様な目的で使われている
代表的な例としてはスキニング(3Dモデルの変形)に使用さてることかな
本来の意味であった陰影付けとはかけ離れた使い方だな

基本的なシェーディングを実装する場合の使い方は
頂点の2D(スクリーン)への座標変換、光源計算、マルチテクスチャの重ね合わせ
このうち「頂点の2Dへの座標変換、光源計算」までが頂点シェーダの役割
「光源計算(の結果の処理)、マルチテクスチャの重ね合わせ」がピクセルシェーダの役割

シェーダのバージョンが違うと何が違うかというと
まぁ一番の違いは記述できる手順の量(行数)が違う
記述できる手順の量(行数)がたくさんあるほど複雑なシェーディングが記述できるということになる
まぁ使える命令の種類が増えたりもするんだけどね

ちょっと素人さん用に強引な説明だが、まぁそんな感じ

844 名前:デフォルトの名無しさん :04/11/20 15:34:07
>>843
ほうほう。
シェーダについて少し調べた後なら、その説明はわかりやすいかも。
それにしても、プログラマブルシェーダはおもしろそうですな。
けど、バージョンごとで書き分け必要でめんどくさそうですな。

845 名前:デフォルトの名無しさん :04/11/20 15:45:42
>844
こういうのは下位互換が前提だからね
バージョン1.0のシェーダはバージョン2,0に対応したハードでも動く
逆はもちろん無理
これからは使用シェーダのバージョンで最低動作環境が決まってくるのかな
バージョン1.0のピクセルシェーダはもう書きたくない
行数少なすぎ

846 名前:デフォルトの名無しさん :04/11/20 15:52:43
素人にもわかるようにカタカナを使わずに説明してくれ。

847 名前:843 :04/11/20 16:02:59
>846
そう思ってカタカナというか専門用語は極力はずしたつもりなんだが…

これ以上は漏れには無理

ttp://www.microsoft.com/japan/msdn/directx/welcome/dsmsdn/directx01152001.asp
これよりはわかりやすいと思うが

848 名前:デフォルトの名無しさん :04/11/20 16:05:35
>>845
あぁ、やっぱり1.0はつらいのか・・・かなり少なそうな気がしてたから分割するのかな?とか思ったよ。
>使用シェーダのバージョンで最低動作環境が決まってくるのかな
動作環境高くなりそうだねぇ・・・

849 名前:デフォルトの名無しさん :04/11/20 16:25:20
>>845
上位互換と下位互換を混同するな。

850 名前:デフォルトの名無しさん :04/11/20 16:35:37
>>847
いやただのネタです。
すみません。

851 名前:デフォルトの名無しさん :04/11/20 16:39:54
うお、間違えた
上位互換
http://e-words.jp/w/E4B88AE4BD8DE4BA92E68F9B.html
下位互換
http://e-words.jp/w/E4B88BE4BD8DE4BA92E68F9B.html

852 名前:デフォルトの名無しさん :04/11/20 17:05:00
PS2でPSのソフトが動く(厳密にはちょっと違うけども)のが上位互換
これで覚えろ
DirectXやピクセルシェーダーも同じく

下位互換はレアなのだよ

853 名前:デフォルトの名無しさん :04/11/20 18:35:14
バージョンがどうとかよりHLSLが使えるかどうかのほうがでかいとおもうね。

854 名前:デフォルトの名無しさん :04/11/20 19:20:45
>>853
HLSL使えても
バージョン無視で何でもアセンブル通ると思ってる?

マイクロソフトの開発チームにバリバリ頑張って貰わないとなぁ

855 名前:デフォルトの名無しさん :04/11/20 19:37:37
>>854
とりあえず1.1でやってるけど一通りのことはできるからね。
バンプ、環境、影、スキン、αブレンドなどやその他もろもろとかそれだけかよって感じだけど
これだって他のシェーダ同士の組み合わせとかモデリングツールからもってきたり
デザイナに足りないところを設定してもらったりしても結構面倒な作業だよ。
あと、バージョンが増えてもライトがいくつ使えるかってところだけで
他にはなんもないよ。(俺にとっては)

856 名前:デフォルトの名無しさん :04/11/20 20:38:24
PS1.3では1ライトで限界だったな。
俺の中ではPS1.xは無かったことになってるよ。
こんなもんに対応する為に悩むなんて時間の無駄。

857 名前:デフォルトの名無しさん :04/11/21 03:30:12
スキニング変形を加えた後のモデルに対し、「正確な」当たり判定を
する必要があるのですが、これをスマートに実装する方法はあるのでしょうか。

今はまず、通常は普通に描画してしまっています。
そして当たり判定が必要なときのみ、対象のモデルのメッシュを全て自前で
スキニングし、そのスキニング後の頂点座標を自前バッファに取って、それで判定してます。

「正確な」(全面に判定が必要で…)ということで、こういう泥臭い方法になってしまっています。
残念ながらこれは、判定の頻度や、対象の数が増えるにつれ、もったりしてきてしまいました。

いっそ最初から、通常描画も全てソフトウェアスキニングにしてしまおうか迷っています。
なんとかハード側がスキニングしてくれた後の頂点座標データにアクセスできないでしょうか。

858 名前:デフォルトの名無しさん :04/11/21 06:24:45
>>857
それって要約すると
描画でスキニングして、なおかつ当たりが発生したら
変換前の頂点を自前でスキニングさせて、その座標で当たり取ってるって事だろ。

二重にスキニング計算してるって…
これを分ってても分ってなくとも致命的な発想の欠陥だよ(プログラマ向いてないよ)

推測でのアドバイスになるが
D3DXでしかモデルを扱えないレベルで
D3DXのモデル系の操作関数を深く知らないなら
D3DXは色々な操作をする時に足枷にしかならないと思う。
そう言う状況なら自前でオプティマイズした処理の方が良いと思うけど…
(理論的には頂点バッファでDrawしてるんだから、
D3DX使ってても頂点バッファを取得、アクセスできる筈、いっちょ調べようってならないかなぁ…)

それと、当たりの”正確な”って意味にもよるが
普通は当たり用の別な形を用意するんじゃない。
例えば人物の二の腕、腕、拳とカプセル体を仕込んでおいでスキンニングと同じ変形をかければ、
そのカプセル体との当たり判定で大体正確な当たりになると思うけど…
処理の理由でモデルと同じポリゴンじゃなきゃ駄目ってなら、素直に当たり取るしかない。
ただ全判定なんてアホな事は当然してないよね?
オクトツリーなりで空間分割してって当然だよね。

859 名前:857 :04/11/21 08:05:42
>>858
二重についてですが、今は描画時のスキニングをHLSLで任せているんです。
あくまで描画の頻度に比べてですが、当たり判定の頻度が少ないので、こういう処理にしていました。

となると二重にならず、なおかつスキニングをソフトウェア側でやらずに済む
方法があるのでしょうか?是非是非ご教授を…。

例えば描画時の処理を固定に変えてでも良いので、どこかにハード側が
スキニングしてくれた後の頂点座標が用意されていれば…。

D3DXは使って無いんです。それでもUpdateSkinnedMeshは試し、変換後のバッファを
取得してみましたが、これだと自前と大差無いどころか、融通が効かないのと初期化分駄目でした。
オクトツリーというか、モデルなのでBoundingBoxは作成しています。

860 名前:デフォルトの名無しさん :04/11/21 11:03:25
> 二重にスキニング計算してるって…
> これを分ってても分ってなくとも致命的な発想の欠陥だよ(プログラマ向いてないよ)

オレも知りたい
ここまで言い切ってるとナンカ気になる

861 名前:デフォルトの名無しさん :04/11/21 11:33:43
最近 >>830 とか >>858 とか、頭が極端なやつが多いな

862 名前:デフォルトの名無しさん :04/11/21 12:03:49
3点を通る円を作りたいのですが、
どのようにをプログラムを作ったらよいかどなたか教えてください。
・分かってる点、始点(X1,Y1)中点(X2、Y2)終点(X3,Y3)です。
円弧は円のみではなく始点から始まって終点まで描画する円弧も作成できるようにしたいです。
・(X-X0)^2+(Y-Y0)^2=r^2の式を使って連立方程式を立て中心(X0,Y0)と半径rを求めたいです。


863 名前:デフォルトの名無しさん :04/11/21 12:06:53
>>862
円はそれだと始点=終点で2点しか出来ないから無理

864 名前:862 :04/11/21 12:16:12
>>863
 じゃあどうしたらよいのでしょうか?

865 名前:デフォルトの名無しさん :04/11/21 12:19:21
drawCircle()drawArc()と分ける。

866 名前:デフォルトの名無しさん :04/11/21 12:19:36
すごい宿題っぽい質問だ

867 名前:862 :04/11/21 12:23:40
分けるとは?

868 名前:デフォルトの名無しさん :04/11/21 12:30:29
日本語すら分からないとはいったい何人なんだか。
ほらよ。
http://dictionary.goo.ne.jp/search.php?MT=%CA%AC%A4%B1%A4%EB&jn.x=37&jn.y=12&jn=%B9%F1%B8%EC&kind=ej&mode=0


869 名前:デフォルトの名無しさん :04/11/21 12:30:46
とりあえずスレ違い、むしろ板違い
数学の問題

つーか数Bレベルだよw

870 名前:862 :04/11/21 12:38:43
drawCircle()drawArc()ってのがわからないんですが…。

871 名前:デフォルトの名無しさん :04/11/21 12:51:23
それは頭が悪いから。

872 名前:デフォルトの名無しさん :04/11/21 12:51:41
>>862
ここで聞き給へ
http://pc5.2ch.net/test/read.cgi/tech/1100530682/


873 名前:862 :04/11/21 12:56:18
>>872
ありがとうございます。

874 名前:デフォルトの名無しさん :04/11/21 14:07:07
ゲームなどのBGMの再生に DirectX Audio って使ってますか?
それともmidi関連のマルチメディアAPIなどを使っているのでしょうか。

DirectXAudio を、サンプルを見ながら何とか使ってみてはいるのですが
まず再生までの手続きが複雑で気が滅入ります…w
1曲のロード時間も長く、また描画にかなりマシンパワーをとられて
しまっているので、曲を再生すると相当な負荷がかかってしまいます。
この際、音質の良し悪しはあまり重要視していませんので、
この辺を軽くする設定はありますか?

875 名前:デフォルトの名無しさん :04/11/21 14:24:21
出力ポートをソフトシンセ以外のところに切り替えるだけで軽くなる。
どこに切り替えるかはユーザに選ばせればいい。

876 名前:デフォルトの名無しさん :04/11/21 15:25:25
>>875
なるほど、このへんですかね…
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdx8_c/hh/directx8_c/_dx_using_directmusic_ports_dxaudio.asp
そうすると、Performance に対して特にポートの設定を
していないときは、デフォルトのポートはソフトシンセに
設定される、ということなのでしょうか (環境によって
違うのですかね)。

ともあれもう少し調べてみることにします。
情報ありがとうございます

877 名前:デフォルトの名無しさん :04/11/21 19:31:38
ドライバの動作状況、
例えば演算器やシェーダのマネジメント状況ってDirectXで採れますか。

878 名前:デフォルトの名無しさん :04/11/22 02:34:04
頂点シェーダというのは
描画の際に必須なんでしょうか?
サンプルを自分のプログラムに組み込むと
失敗している関数がないのに何も表示されません
(サンプルの頂点シェーダを使っても同じです)

879 名前:デフォルトの名無しさん :04/11/22 07:26:47
>878
そのプログラムでシェーダをロードしている場所があれば使用しているシェーダが読み込めるようにしてください
不具合が出ても自力で解決できないようなものは組み込むべきではないと思います

880 名前:857 :04/11/22 07:31:23
>>858氏はもう見てないんだろうか
結構切実なんで、どういうのが念頭にあったのか皮肉抜きで教えて欲しいのですが
もう他では時間稼げそうにないなり…

881 名前:デフォルトの名無しさん :04/11/22 08:01:37
>>858はきっとスキニングに使用する行列で球等の簡単な判定オブジェクトを変換して、それで判定しろって事じゃないですかね。
前半のアドバイスの意味はわからんけど。
ただ、正確な判定が欲しいなら必要な時のみソフトウェアで頂点変換するのが速いかと。

882 名前:857 :04/11/22 08:37:34
>>881
今時面レベルでの当たり判定というのは珍しくなさそうですが、
やはり「ソフトウェアで頂点変換」の部分はどこもあるんですかねぇ…

しょうがないので気が重いですが最後の手段、プログラム側で作ってた
判定オブジェクトを手動にしてもう少し頑張ってみます…お付き合いありがとうございました

883 名前:デフォルトの名無しさん :04/11/22 09:53:39


884 名前:デフォルトの名無しさん :04/11/22 13:23:29
LightWaveのレイアウトで、ピボットを使わずに
物体を移動させる時の事を想像して欲しいのですが、
パースビューでは(視点の位置に関わらず)、
マウスを左ボタンドラグで「上・下」に動かすと
物体が「奥・手前(Y座標は固定)」に動くし、
「左・右」に動かせば「左・右」に動きますよね。

マウスの動きを入れた2次元ベクトル(スクリーン座標)を
どうやって変換したらそのような動きを再現できるでしょうか。
イメージとしてはモニターの平面を、ワールド空間のxz平面に倒すような感じで
投影(?)射影(?)すればよいと思うのですが、
どのように座標変換したらよいか教えてください。

885 名前:デフォルトの名無しさん :04/11/22 14:25:06
LightWaveのことは知らないけど、つまりマウスを左右に動かせば
カメラから見た左右に動くということ?

じゃカメラの向きのベクトルとアップベクトルがあればカメラから見た横方向のベクトルは作れるので
マウスの左右の移動量と横方向のベクトルを使って移動ベクトルを作ればいいだけでは?

886 名前:デフォルトの名無しさん :04/11/22 15:25:36
UVって何スカ?紫外線スカ?

887 名前:デフォルトの名無しさん :04/11/22 15:34:59
カメラの位置から注視点へのベクトルと垂直なベクトルを用意するだけでは?

888 名前:デフォルトの名無しさん :04/11/22 15:52:59
>LightWaveのことは知らないけど、つまりマウスを左右に動かせば
>カメラから見た左右に動くということ?

そうです。そして(884では少し言葉が足らなかったかもしれません)
カメラがワールド空間のXZ平面に対し平行に近い状態で
マウスを上下に動かすと、物体はカメラから見て奥・手前に動き、
カメラがワールド空間のXZ平面に対し垂直に見下ろしたような状態で、
マウスを上下左右に動かすと、物体はマウスについてくるように動きます。
ワールド空間上でのY座標方向には、どんな視点の場合でも動きません。

とりあえずマウスのスクリーン座標をD3DXVec3Unprojectで
逆変換してベクトルを作ってみたんですが、これでは当然、
カメラ(視線)がワールド空間上でXZ平面に対し平行に近い場合、
マウスを上下に動かしても、物体はカメラから見た奥・手前方向にはよく動きませんでした。
(横方向には動きますが。)

889 名前:デフォルトの名無しさん :04/11/22 15:58:48
ものすごく煽りたい衝動に駆られたがグッと押さえた。
俺は一つ大人になったと思う。

890 名前:デフォルトの名無しさん :04/11/22 16:13:55
>>887
それだと視線が水平に近い時、奥や手前に進んでくれなそうな気が。。。

>>889
むしろヒントになるような事なら煽って欲しいんですけど。

891 名前:デフォルトの名無しさん :04/11/22 16:40:14
簡単にいえばY方向への移動量をZに逃がしたいって話じゃないの?
z+=y;y=0.0fでよさそうでない? 試してないけど。

892 名前:884 :04/11/22 17:09:27
>>891
すいません、何の座標系での話しでしょうか?
視点は一定ではないので、
必ずしも画面奥がワールド空間でのZ方向とは限らないのですが、
そういうことではないですか?

893 名前:デフォルトの名無しさん :04/11/22 17:39:43
>892
とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って
横はカメラから視点までベクトルと(0, 1, 0)のベクトルの外積で求まるベクトル使ってしのいだら?

一番簡単な方法だし

894 名前:884 :04/11/22 17:46:15
>とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って

それだと視線がワールド座標のXZ平面に大して垂直に近づくほど
動かせなくなっていくと思うのですが、、、

895 名前:デフォルトの名無しさん :04/11/22 17:58:07
>894
XZ平面に垂直だろうが、水平だろうがカメラに向かって奥か手前に動くと思うんだけど?
y成分を0にしたりしないよ

896 名前:884 :04/11/22 18:03:41
説明が下手でした。
どんな視点、視線の時も、左ドラグでワールド座標のXZ平面に平行に動くようにしたい、
(Yの位置は現在のままで。)ということです。

897 名前:デフォルトの名無しさん :04/11/22 18:06:32
っていうかそのライトヴェーブの動きの簡易説明を画像で頼む

898 名前:884 :04/11/22 18:51:56
なんか凄くあたりまえな画像ですが用意しました。
要はこんな単純な事が言いたかったのです。説明下手でした。
マウスを画面で上下左右に動かした時、矢印の方向に動きます。
(実際は合成で斜めにも自由に動きますが。)

http://gamdev.org/up/img/1949.jpg
http://gamdev.org/up/img/1948.jpg

899 名前:デフォルトの名無しさん :04/11/22 19:05:39
カメラから視点までベクトルのy成分を0にしてを正規化して特定の値を掛けて
常に一定の移動量を保てばいいだけかな?

900 名前:899 :04/11/22 19:08:17
ちなみに本当に垂直にしたらだめなので、ほぼ垂直以上にならないように気をつけること
アップベクトルをきちんとしてないとジンバルロックが起きるから垂直にはできない
もしアップベクトルをきちんとしているなら垂直のときにはアップベクトルが使える

901 名前:デフォルトの名無しさん :04/11/22 19:18:26
やっぱりというかというか
別に難しいことじゃないじゃん

902 名前:デフォルトの名無しさん :04/11/22 19:24:57
>901
初心者スレだからこれくらいはいいんじゃないの?
宿題はカンベンだけど

903 名前:デフォルトの名無しさん :04/11/22 19:57:48
884は理解できたのだろうか・・・。
気になって夜しか眠れない

904 名前:884 :04/11/22 20:05:34
どうもです。たぶん理解できました。
これから試してみてまた報告に来ます。
ひとまずありがとうございました。

905 名前:デフォルトの名無しさん :04/11/22 20:06:28
>903
>気になって夜しか眠れない
漏れ以外にもこのネタ使う香具師がいるのかw
一瞬、あれこんなレスしたっけ?と思ってしまったw

906 名前:デフォルトの名無しさん :04/11/22 20:23:32
木になって昼間も動けない。

907 名前:デフォルトの名無しさん :04/11/22 23:13:56
なんでベクトルの話が出てくるのがわからん。
マウスが縦横に動いたら、視点をオブジェの周りで縦横に旋回させるだけでは?



908 名前:デフォルトの名無しさん :04/11/22 23:19:27
>904
>884のこと?
君がいってるのはカメラの操作で
>884が言ってるのはオブジェクトの移動だよ

909 名前:デフォルトの名無しさん :04/11/23 00:33:59
>>908
なるほど、では言い直そう。

なんでベクトルの話が出てくるのがわからん。
マウスが縦横に動いたら、オブジェをZYに移動させるだけでは?


910 名前:デフォルトの名無しさん :04/11/23 00:36:30
あーむかつく。
こういうの出来ない奴って座標変換がまったくわかってねぇんだよな。
現役プリ☆グラマの俺様が指導してやる

・ワールド座標からスクリーン座標への座標の変換。
・ワールド座標からスクリーン座標へのベクトルの変換。(言っててはずかしいぜw)
・スクリーン座標からワールド座標への座標の変換。
・スクリーン座標からワールド座標へのベクトルの変換。(笑)
・ローカル座標からワールド座標への座標の変換。
・ローカル座標からワールド座標へのベクトルの変換。(笑)
・ワールド座標からローカル座標への座標の変換。
・ワールド座標からローカル座標への座標の変換。(笑)
・ローカル座標から別のローカル座標への座標の変換。
・ローカル座標から別のローカル座標へのベクトルの変換。(笑)
面倒臭くなってきたw以下省略形でw
・ワールド座標からカメラ座標へ変換。座標・ベクトル。
・ローカル座標からカメラ座標へ変換。座標・ベクトル。
・カメラ座標からローカル座標へ変換。座標・ベクトル。
・カメラ座標からワールド座標へ変換。座標・ベクトル。

っと、まあ、挙げればきりがないがこんなところか?

911 名前:デフォルトの名無しさん :04/11/23 00:50:14
>>910

















912 名前:誰も聞いてないかもしれんが :04/11/23 00:52:02
出来ない奴ってこれが全部同じものだってことがわかんないんだよね。
だからワールド→ローカル変換ができるくせに
スクリーン→ワールドになっちゃうととたんにわからなくなっちゃう。
(まあ、これはちょっと違うけどDirectXで出てこなかったわけじゃないよね?)
#ワールド→スクリーンの変換が出来ない奴は見捨てるしかないので自分で考えてチョw
#つまり、その逆。できなきゃおじさん泣くw
カメラ→ワールドも別の変換とか思っちゃうかな?
ローカル→別のローカル と ローカル→カメラ なんて全く同じだよね?

こんな変換とかはできるかな?

どっかのローカル座標上にある物体を、
カメラ座標上にもってきてカメラ座標上でY軸上に5動かしたあとで、
またもとのローカル座標上に戻す。

こういう変換をすればカメラ座標上で上に動かしたんだから物体がどういう状態であろうと必ず上に動くよね?
まあ、これは平行移動よりも回転で良く使うけど。



913 名前:デフォルトの名無しさん :04/11/23 00:58:56
で、ちょっとわかりいいかもな図

とりあえず画面に描画されるまでの変換は
スクリーン→カメラ→ワールド→ローカル→ローカル→ローカル・・・
ってわけだ。
でも、実際の世界の構造は必ずワールドが一番下で

ワールド →ローカルA→ローカルB→ローカルC→ローカルD
      →ローカルE→ローカルF
      →ローカルG→ローカルH→ローカルI
      →ローカルJ→カメラ→スクリーン

とかなってるんだよね。(あ、これは例ね。)
あ、ちなみにこの図はワールド座標上に階層構造の物体が4つあって
そのうち1つの物体にカメラがくっついてる状態ね。


914 名前:デフォルトの名無しさん :04/11/23 01:12:20
これ、わかるかねぇ。
ためしにある点をローカルDの座標上からローカルFの座標上にもってくるためには

ローカルD→ワールド の変換と
ワールド→ローカルF の変換ができればいいよね?

じゃあ、見た目どおりに動かしたいってことは一度カメラ座標上に物体をもってきて動かしてから
またローカル座標上(またはワールド座標上)に戻せばいいよね?

ま、例えばローカルDにその物体があったとすると

ローカルD→ワールド
ワールド→カメラ
カメラ座標上でちょっと動かす。
カメラ→ワールド
ワールド→ローカルD

って動かせばおおよそなんでもできそうだよね。
じゃあ、プリグ☆ラマンはもうねるからじゃあねw
え?長文がよめねぇだとぉ?死ね死ね死んじまえw

915 名前:デフォルトの名無しさん :04/11/23 02:02:36
基本的な事を何得意げに語ってるんだ
わかりにくいし

916 名前:デフォルトの名無しさん :04/11/23 02:18:12
>>915
でもわかって無い奴多いだろ。
これができなきゃ売り物になるような3Dゲームなんか作れないのに。
それどころか初級シェーダもかけられない。

>>884みたいなのができないなんて座標変換がわかって無い証拠だろ。
やれz軸がどうだとかy軸がどうだとか関係ねぇんだよ。
座標変換がわかってねぇんだよ。
微妙な計算なんてひとっつもでてこないよ。
なのに全然的外れなレスがあるし。ちょっと質問に答える側もレベル低くなってねぇか?

917 名前:デフォルトの名無しさん :04/11/23 02:23:59
まぁ高校数学
というか三角関数わかれば分かるはずなんだけどな

918 名前:デフォルトの名無しさん :04/11/23 02:34:56
皆さんこんばんは。
早速質問なのですが、よくオンラインのMMORPG等のインターフェースにある、
マウスでドラッグすると動く内部の小ウィンドウ(ステータスとかスキルとか表示してる・・・)って
どんな風に実装されているんでしょうか・・・。教えてください。

現況はCreateWindowでウィンドウを作り、DirectX関連を初期化し、一応基本描画処理などが揃った状態です。

C/C++はそこそこなんですけど、DirectXはまだサンプルの理解やちょっとした派生程度のレベルなので
その辺の処理は詳しくお願いいたします。

919 名前:デフォルトの名無しさん :04/11/23 03:16:58
>>918
良く知らないけどそれってWin32APIのウィンドウっぽい?
ならツールウィンドウじゃねぇの?
WS_EX_TOOLWINDOW
で出来る奴。
VC6の奴だったらツールバーのおかしな奴だっけ?
(こっちはフォーカスを失ってもバーが青いまま。バグだろw)

920 名前:デフォルトの名無しさん :04/11/23 03:49:16
そんなもん自分で考えられないヤツが
C/C++そこそこ
なんて話を漏れは信じないぞ

921 名前:デフォルトの名無しさん :04/11/23 03:59:57
>>920
C/C++はそこそこでWin32はアレなんだろ。

922 名前:デフォルトの名無しさん :04/11/23 04:00:02
>>918
それは自分も聞きたいですねぇ。
APIのウィンドウとか標準のコントロール貼り付けるとかでもなくて、
多分カスタムドロー使ってるだけとかでもなくて、
描画からウィンドウ管理から全部自分でやってるんですよね。。。
とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、
けど3D画面に2Dを合成するやり方が分からない。

923 名前:デフォルトの名無しさん :04/11/23 04:19:50
>>922
>描画からウィンドウ管理から全部自分でやってるんですよね。。。
さらに難易度下がるんだけどw
Win32のご機嫌とるよりよっぽど楽だよ。

924 名前:デフォルトの名無しさん :04/11/23 05:09:49
取っ掛かりがわかんないんですよね
とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、
けど3D画面に2Dを合成するやり方が分からない。
なので、まずここからどんな感じの方法があるのか教えて欲しいのですが。
窓枠を表示する方法・・・

925 名前:デフォルトの名無しさん :04/11/23 06:35:50
どうも922は自演くさいなw

DirectX8以降なら、ID3DXSpriteを使うか、
TLVertexを使って窓枠とやらのテクスチャを表示すれば簡単に出来るかと。

DirectXを使った市販ゲームで、ゲーム中のメニューに
コモンコントロールを使っているのはほとんど無い(SLG辺りで少しあったかな)。
Spyで覗いてみると良いよ。

926 名前:デフォルトの名無しさん :04/11/23 07:44:05
ポリゴンにテクスチャ貼るのって(3D変換しないとはいえ)物凄く面倒そうなんですが
そうするのがメジャーなんですかね?

裏画面で2D画像から読み込んだウィンドウのパーツを配置・組み合わせたりして
ウィンドウの外観を2Dで完成させてから、それを
表画面にアルファ付きで転送、みたいなのってDXではできないんですか?

927 名前:デフォルトの名無しさん :04/11/23 08:16:21
>>916
ここの回答者も>884もその程度の事は分かってるだろ。
わざわざ座標変換の話を持ち出すまでもない。
今のところレベルが低いのはお前だけだ。

>>926
> ポリゴンにテクスチャ貼るのって(3D変換しないとはいえ)物凄く面倒そうなんですが・・・
どこが面倒なのかが分からん。

> 裏画面で2D画像から読み込んだ 〜 DXではできないんですか?
出来る。

928 名前:デフォルトの名無しさん :04/11/23 08:31:54
>>927
変換済みポリゴン使う場合は
FVF定義してとか手続きが面倒くさそうだし
例えばウィンドウの中にボタン一個配置するだけのために
もう一枚ポリゴン作ったりUV操作したりしなきゃならなそうで。

ならば2DRPGのマップを作るような要領で
裏画面で画像から読み込んだパーツ(タイトルバーとか、ボタンとか)を配置してウィンドウの外観を作り、
それを表に転送することができればそっちの方が簡単そうじゃないですか?

>出来る。

ぜひともその方法を教えてください。

929 名前:デフォルトの名無しさん :04/11/23 09:35:26
>>928
自前でテクスチャを貼る際はUV座標で管理してるわけじゃない。
(最初からUVで管理してる奴もいるかもしれんが・・・)
使用する直前でUV座標に変換してやればいいだけだ。

細かい計算は省略するが、

FLOAT u,v;
u = 画像上の任意のX座標 / 画像の幅;
v = 画像上の任意のY座標 / 画像の高さ;

> ウィンドウの中にボタン一個配置する・・・
C++がそこそこ出来るんならクラスも作れるんだろ?
Win32のウィンドウシステムをクラスを使ってエミュレートしてみれ。
とりあえず階層構造(親子関係)と描画機能があればいいんだが、
階層構造が必要なければ描画機能だけ実装すればいい。

> 裏画面で画像から読み込んだパーツ(タイトルバーとか、ボタンとか)を配置してウィンドウの外観を作り・・・
レンダリング可能なテクスチャを用意する方法があるが、
どちらにしても板ポリを使って描くんだから余計面倒なだけだろ。
DirectDrawでも使うか?

930 名前:デフォルトの名無しさん :04/11/23 10:43:03
>どちらにしても板ポリを使って描くんだから余計面倒なだけだろ。

そこが分からないんですが、

GDIのみで2DRPG作るときみたいな要領で、裏バッファに2Dビットマップを持たせて
そこで画像を組み合わせたりする事は出来るけど、
それをそのままフロントバッファの3D画面に転送したり合成する事までは出来なくて
結局は変換済みポリゴンに対してテクスチャとして貼らなきゃいけない。

ってことですか?よく分からなくなってきました。
とりあえず変換済みポリゴンを表示するところから始めてみよう…

931 名前:デフォルトの名無しさん :04/11/23 10:45:55
お礼も言えなきゃ、DirectXのバージョンも書かない様な奴に
おまえら良く付き合いますね

932 名前:922 :04/11/23 10:57:18
>お礼も言えなきゃ

いやだってまだ話し終わってないし…
バージョンは9.0bであります。
バージョン関係ないような話だと思ったものでごめんなさい。
ちなみに私は918の方とは別人です。

933 名前:デフォルトの名無しさん :04/11/23 11:04:28
>>924
>けど3D画面に2Dを合成するやり方が分からない。
もう、このへんでこいつ相手にしたら負けかなって思ったw

934 名前:デフォルトの名無しさん :04/11/23 11:13:24
お礼はいらないが、結果報告はして欲しいな。

質問者はまず環境を書くこと。
環境がマズくてうまくいかない事もある。
DirectXスレなんだから、最低でもバージョンくらいは書いとけよ。
(技術的に)どの程度の事が出来るかも添えておけば更によし。

回答者はそれを考慮して答える。

935 名前:デフォルトの名無しさん :04/11/23 11:13:53
最低限チュートリアルを全て終わらせてから出直せ。

936 名前:934 :04/11/23 11:26:14
テンプレに明記してあったのね・・・

【 質問する香具師 】
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。

937 名前:922 :04/11/23 12:02:37
D3Dのチュートリアルはやりましたが、
今回の質問内容が分かるような章はなかったような…
c++でコモンコントロールを真似て
処理や動作をクラス化したりというのは何とかできそうなので、
引っかかっているのはそれをどうやってDXで描画するかという部分です。

938 名前:デフォルトの名無しさん :04/11/23 12:05:26
D3DFVF_XYZRHW

939 名前:デフォルトの名無しさん :04/11/23 12:09:22
>>937
チュートリアルにもろにそれぞれの座標の設定の仕方が載っているのに、
> 今回の質問内容が分かるような章はなかったような…
それはやったとは言わない。
もう一度きっちりやり直せ。

940 名前:デフォルトの名無しさん :04/11/23 12:11:07
DirectXのヘルプを
一通り目を通しても別に大した時間かからないし、
こんなところでくだらない質問することもなくなるから
一度読んじゃったほうがいいよ。
もちろん細かいところは省きながら。

941 名前:デフォルトの名無しさん :04/11/23 12:25:47
ヘルプ読んで理解出来るような奴なら、
こんなスレには来な・・・ うわっ何をすあwせdrftgyふじこl

942 名前:922 :04/11/23 12:58:35
一度質問内容を整理補足したいのですが、

・変換済みポリゴンを使ってテクスチャを貼る方法は分かりますが、
ウィンドウ内の部品(ボタンなど)ごとにポリゴンを作らなきゃならないのでしょうか?
ポリゴンで作るとなると、ウィンドウの大きさを変えるだけでVBロックしたり、とか
そんなことをしなきゃならないのでしょうか?

・GDIのみで2DRPG作るときのような要領で、裏バッファに2Dビットマップを持たせ、
そこで画像パーツを組み合わせたりしてウィンドウの外観を作り、
それをそのまま(ポリゴンに貼ったりせずに)フロントバッファの3D画面に
転送したり合成する事はできないのでしょうか?
・もしくは裏バッファを作ってそこで画像を組み合わせたりとかは出来るけど、
単純にそれを転送して3D画面に合成する事は出来ないので
結局ポリゴンにテクスチャとして貼る事になる、ということでしょうか?

・というか皆さんはどんな風に作ってるんでしょうか?

943 名前:デフォルトの名無しさん :04/11/23 12:58:51
>>引っかかっているのはそれをどうやってDXで描画するかという部分です。
それを勉強してわからなかったことを質問するんだろ?

944 名前:デフォルトの名無しさん :04/11/23 13:18:20
>>942
>というか皆さんはどんな風に作ってるんでしょうか?
俺だったらモデリングツールで作ったモデルロードして終わりw
ボタンとかくっつけるの楽でしょ?アニメーションもくっつけられるし。

つーかゲームで出すモデルってのはデザイナが頻繁に変更かけるから
プログラムを実行させないとみられないもの(プログラム内で頂点を設定する等)は
できるだけつくっちゃ駄目。

945 名前:デフォルトの名無しさん :04/11/23 13:32:52
>>944
ボタンやコントロールの位置・テクスチャが動的に変わる場合には
どう対応するんだ?

946 名前:デフォルトの名無しさん :04/11/23 13:39:50
>>945
そのときどきで方法は変わるけど別に
設定ファイルを作ってそれを読み込んで終わり。
モデルファイルに直接データを埋め込んだこともある。

ボタンやコントロールの位置が変わるのは頭使えばなんとかなるでしょ?
パターンが少ないなら全部用意しちゃってもいいし、
法則があるならちょっと設定ファイルをつけてやるぐらいで対応できるでしょ?
悩むもんじゃない。
テクスチャが動的に変わるなんてゲームじゃしょっちゅうあることだからすでに対応済み。

947 名前:デフォルトの名無しさん :04/11/23 13:58:43
動的変更に関しては、エディタなりビューアが無いと
設定ファイルの動作を見れないというわけか。
まあ、その時はその時だな。

948 名前:デフォルトの名無しさん :04/11/23 14:43:25
なんでそんなにポリゴンを必要以上に忌み嫌うのかがわからない
四隅の座標指定してBitBltで貼るのと
四隅の頂点指定してDrawPrimitiveするのとなにがそんなに違うんだ
用途によって適した方を使い分ければいいだけ

949 名前:デフォルトの名無しさん :04/11/23 14:47:15
違いを意識しなくてもいい関数を一つ作ればいいだけなんだけどね。
最初から用意されていれば、内部で何をやっているかすら考えずに使うくせに、
用意されていないと動作の違いについてグチグチグチグチ言い続ける。
そんな奴が何故プログラムを組むのかわけ分からん。

950 名前:デフォルトの名無しさん :04/11/23 14:58:50
どうでもいいから

>ウィンドウ内の部品(ボタンなど)ごとにポリゴンを作らなきゃならないのでしょうか?

>・GDIのみで2DRPG作るときのような要領で、裏バッファに2Dビットマップを持たせ、
>そこで画像パーツを組み合わせたりしてウィンドウの外観を作り、

この2つがやってること同じとしか思えない漏れに誰か解説してくれ。
(後者は1パス余計なところ以外で)

951 名前:デフォルトの名無しさん :04/11/23 15:05:37
後者はDirectDraw的な操作でなんとかならないかって事だろ。
毎度ポリゴン作るのが嫌だと仰っておられる。.

もうね、アh

952 名前:918 :04/11/23 15:14:39
寝ている間に同じような疑問を持った方が来られたようで・・・。
918以降返信するのはこれが初めてですので。
C/C++がそこそこって言うのは他の方はどうかわかりませんよ。>回答者の皆様

>>919
回答ありがとうございます。ググってみます・・・。
たしかにツールバーと同じような働きですね。スキンをかけていることを除けば。

>>921
その通りです。Win32はまだまでして・・・。

>>925
回答ありがとうございます。そうですね、単にスプライト表示すれば3D描画座標は関係ないですね。
あとSpy++を活用してみます。

>>931,934
すいませんでした。当方はDirectX 9.0cと、VC++6です。
-----------------
色々な方の回答を受けて、私なりに2通りの方法を考えてみました。

1.別ウィンドウを作ってWS_EX_TOOLWINDOWを定義し、Paint系を横取りしてテクスチャを貼る。
→ググったらツールウィンドウの作り方が出てきたので、それを参考にしてみます。

2.ID3DXSpriteを使用して転送。マウスイベントで該当するウィンドウをずらす
→これだとそれぞれのウィンドウの座標位置を保持する変数が必要に思えて大変そうですが・・・。

とりあえずコード組んでみます。ありがとうございました。

953 名前:デフォルトの名無しさん :04/11/23 15:22:42
>>951
そんな事書くくらいならお前が一発で納得させて質問者を黙らせるようなレスすりゃ済む話。

954 名前:デフォルトの名無しさん :04/11/23 15:27:12
黙れ!小僧!


黙らせるようなレスだよ

955 名前:デフォルトの名無しさん :04/11/23 15:29:18
ところで、次スレは必要なのか?

956 名前:デフォルトの名無しさん :04/11/23 15:36:36
>>942
隊長!正直このスレのせいで、伝統の鬱だ氏のうスレが瀕死です

957 名前:デフォルトの名無しさん :04/11/23 15:37:12
失敬!
>>942じゃなくて>>955

958 名前:HDSL ◆aoV/Y6e0aY :04/11/23 15:48:14
>DirectXについて、にいさま達がマターリと
>技術情報交換&雑談するためのスレッド。
>初心者用相談室では扱わないような少し高度な話題も受け持つ。
鬱だ(rは趣旨としては情報交換がメインだからね
質問スレがあったほうがどっちも荒れないでいいと思う

誰も立てないなら立てます

959 名前:HDSL ◆aoV/Y6e0aY :04/11/23 15:55:37
やっぱりまだ早いのでやめますた
>975あたりをゲットした人が立てるのがタイミング的によさそう

>975よろしく

960 名前:デフォルトの名無しさん :04/11/23 16:00:19
鬱だ(ry もたまにはageてやるか

961 名前:デフォルトの名無しさん :04/11/23 16:09:37
2ヶ月前に立った鬱だスレがまだ50レス未満ってのは
昔を思い出すと確かに寂しいな

962 名前:デフォルトの名無しさん :04/11/23 16:38:54
>>947
テクスチャアニメーションにしても
UVアニメーションにしてもモデリングソフトでサポートしてるからそんなことはない。

963 名前:デフォルトの名無しさん :04/11/23 17:19:19
>>918
>DirectXはまだサンプルの理解やちょっとした派生程度のレベル
>>952
>当方はDirectX 9.0cと、VC++6です。
って言ってるが、サンプルって
ワザワザ自分の環境用にプロジェクトなりフレームワークなり作り直してる?
それともコード眺めてってレベル?

なんかなぁ…

964 名前:デフォルトの名無しさん :04/11/23 20:36:48
X軸を中心にカメラを回転させる時
(0,0,-1)にいるとして、90度以上回転すると
カメラの上下が反転してしまうので

上方ベクトルもカメラにかける行列と同じ行列をかけて回転させているのですが
それでも90度以上回転させると上下が逆になってしまいます

何か考え方か上方ベクトルの認識が間違ってますでしょうか?

965 名前:デフォルトの名無しさん :04/11/23 20:39:21
鉄棒で半回転すれば上下逆さまになるのは当たり前。
普通に振り向けよ。

966 名前:デフォルトの名無しさん :04/11/23 20:42:01
>>965
いえ、なんというか
その上下逆さまになった状態をカメラに写したいので
上方ベクトルも回転させているのですが
逆さまに写ってくれないのです

967 名前:デフォルトの名無しさん :04/11/23 20:58:12
もしかしてD3DXMatrixLookAt系でそれをやろうとしているとか?
もしそうなら、致命的な勘違いをしているので、
この手の関数に頼らず自分で計算しろ。

968 名前:デフォルトの名無しさん :04/11/23 23:04:27
>967
別に間違えていない
間違えてるなら具体的に何が間違えてるかちゃんと書け
ろくな状況説明のない質問厨と同じレベル

>966
上方ベクトルの出し方がおかしいんじゃないか?
そこを見直したほうがいいと思う


969 名前:デフォルトの名無しさん :04/11/23 23:22:02
こういうスレは、コーディングスタイルや
恩師からどう教わったかでケンカが始まるもの。


ガチガチの学校出、先生から懇切丁寧に教えてもらわないと
プログラムひとつすらもできなかったアホはホントにケンカ好き。



970 名前:デフォルトの名無しさん :04/11/23 23:38:32
と、喧嘩好きの>>969が自分のことを言っております。

971 名前:デフォルトの名無しさん :04/11/23 23:47:14
http://www.microsoft.com/japan/msdn/academic/Articles/DirectX/02/
ここのサンプルで、
VC6、DirectX9oct2004の環境で、ビルドすると、下記のエラーが出ます。
たぶん設定だとは思うのですが。。。
一応、extrasにある、VC6用のlibとDLLは上書きしました。
フォントの出し方は、いろいろあると思いますが、エラーの内容が納得いかないので、
なにか情報があれば、お願いします。

C:\work\DirectX\basic\dx92\dxutil.cpp(192) : error C2039: 'Begin' : 'ID3DXFont' のメンバではありません。
c:\program files\microsoft directx 9.0 sdk (october 2004)\include\d3dx9core.h(313) : 'ID3DXFont' の宣言を確認してください。
C:\work\DirectX\basic\dx92\dxutil.cpp(193) : error C2660: 'DrawTextA' : 関数が不正な 5 個の実引数をともなって呼び出されました。
C:\work\DirectX\basic\dx92\dxutil.cpp(194) : error C2039: 'End' : 'ID3DXFont' のメンバではありません。
c:\program files\microsoft directx 9.0 sdk (october 2004)\include\d3dx9core.h(313) : 'ID3DXFont' の宣言を確認してください。

ログのベタハリで、スイマセン

972 名前:918 :04/11/23 23:59:09
>>963
もちろん、新規にプロジェクト作成して、一文一文を噛み砕きつつ…です。
わかんない処理は時にはググったり。


ところで>>952の方法1を試してみたんですが、
ウィンドウ(WS_EX_APPWINDOW)とその子ウィンドウ(WS_EX_TOOLWINDOW)の2つがあるとき、
子ウィンドウを親ウィンドウの領域内に納めたいのですが、
そういうコードなどは用意されていないんでしょうか。
親からの座標データを下に計算・・・なんですかねぇ。

973 名前:デフォルトの名無しさん :04/11/24 00:08:52
WS_CHILDWINDOW

974 名前:966 :04/11/24 00:09:22
>>967
ビュー行列はD3DXMatrixLookAtLHで作っていますが
上方ベクトルが変わると正しく動かないんでしょうか?

>>968
実際のプログラムでもカメラはZ軸上にあるので
上方ベクトルは(0.1.0)にしてあって
カメラ座標にかけるX軸中心の回転行列を上方ベクトルにかけてるのですが
カメラのZ座標が0を通る瞬間にやっぱり上下反転してしまいます

余計な部分を省いたこの部分のみのプログラムにしても状況が変わらず
なので、何か勘違いしてる所があるのかなと思ったのですが

975 名前:デフォルトの名無しさん :04/11/24 00:13:58
回転行列を掛ける対象が違うんだが。
何故部分的に使用して問題を引き起こそうとするのか。

976 名前:デフォルトの名無しさん :04/11/24 00:25:55
>>974
視線ベクトルと上方ベクトルが一致する瞬間があるんじゃないか?
ちょっと簡単にソース書いてくれ。

977 名前:966 :04/11/24 00:28:34
>>975
書き方が悪かったです
上方ベクトル"にも"かけてるということです
もちろんカメラ座標にもかけています

978 名前:918 :04/11/24 00:39:53
>>973
子属性と定義してやればよかったんですね。ありがとうございました。

979 名前:デフォルトの名無しさん :04/11/24 00:41:00
まずは上ベクトルの値がどうなってるか把握しる
定期的にOutputDebugStringを使って上ベクトルの値を監視してみたら?


上ベクトルがUpVectorだったとして
{
static int cnt;
if( cnt % 10 == 0 ){
char txt[256];
sprintf( txt, "UpVector( %.2f, %.2f, %.2f )\n", UpVector.x, UpVector.y, UpVector.z );
OutputDebugString( txt );
}
cnt++;
}

これをD3DXMatrixLookAtLHの直後にでもつっこんでデバッガでみれ


980 名前:966 :04/11/24 00:41:29
>>976
Angleは回転の角度
DefUpVec(0,1,0)上方ベクトル
DefPosVec(0,0,-1)カメラ位置
TargetVecは常に(0,0,0)

D3DXMatrixRotationX(&RotateMat,Angle);

D3DXVec3TransformCoord(&UpVec,&DefUpVec,&RotateMat);
D3DXVec3TransformCoord(&PosVec,&DefPosVec,&RotateMat);

D3DXMatrixLookAtLH(&ViewMat,&PosVec,&TargetVec,&UpVec);
D3DDevice->SetTransform(D3DTS_VIEW,&ViewMat);
こんな感じです

981 名前:デフォルトの名無しさん :04/11/24 00:44:51
やっぱり根本的に勘違いしてるし。

982 名前:デフォルトの名無しさん :04/11/24 03:04:59
>980のコピペでカメラをまわしたらこうなった
ttp://up.satoweb.net/img100/880.gif
そこはそのままでも得たい結果はえられるっぽい
>981根本的に間違ってるのに
この結果がでたことを説明してくれ

983 名前:デフォルトの名無しさん :04/11/24 04:46:59
>>981
うざい。具体的なヒントなり解決法を書かないなら何もか書かないでくれていい。
上手くいかないのは勘違いしてるから上手くいってないんだから当たり前だ。
質問が流れて質問も解答もピントがずれてくる。双方にとって不幸。

984 名前:デフォルトの名無しさん :04/11/24 11:06:02
うーん、すごい。いや驚いた。それはさておき。

一回のBeginScene〜EndSceneの間に、何度もD3DTS_VIEWやD3DTS_PROJECTIONを
設定してカメラを別位置にしたり透視投影と平行投影を画面に同時だししたりって
いうことができるって、わかってないんじゃないかなと思った。

MFC+DirectXでプログラム覚えたヤツって融通が利かないのか?

985 名前:デフォルトの名無しさん :04/11/24 11:13:01
>984
どのレスに対するレスなのかレス番を示してくれないとわからないんだが

986 名前:デフォルトの名無しさん :04/11/24 15:51:51
>>985
スマソ。918あたりへのレスだった。
ステータスウィンドウをWindowsのウィンドウで描画しようとするあたりが
毒されてるなあと思ったんだよ。
ステータスウィンドウなんて、Orthoで自前で書いちゃえばいいじゃん、と
思ったワケ。で、もしかするとPerspectiveで描画したあとOrthoで描画って
いう発想に至れないんじゃないのかなって勘ぐったのさ。

987 名前:デフォルトの名無しさん :04/11/24 16:55:07
質問なんですが、cppファイル内で
#include <ddraw.h>
DDPIXELFORMAT pixel; //インクルードした行の真下
このように書いたんですけど、
'DDPIXELFORMAT':識別名を宣言するのに、型が指定されていません。
等のDDPIXELFORMATがあたかも宣言されてないという感じのエラー
がたっぷり(大袈裟)出ました。他にも同ファイル内で引数に使っている型(サーフェイス等DirectDraw関連)なども認識できないようです。
ddraw.hがインクルードされてないような振る舞い。
エラー発生場所をコメントにしたらコンパイルできました。
考えられる原因は何なんでしょうか。。。

988 名前:デフォルトの名無しさん :04/11/24 17:01:13
windows.h はincludeしてるのか?

989 名前:デフォルトの名無しさん :04/11/24 20:24:50
>>988
もちろんで。

990 名前:デフォルトの名無しさん :04/11/24 20:26:48
>987
パスが通っていないとか?

991 名前:デフォルトの名無しさん :04/11/24 20:38:09
>>975
スレ立てヨロ

992 名前:デフォルトの名無しさん :04/11/24 20:38:30
>>987
バージョン定数の定義は?

993 名前:デフォルトの名無しさん :04/11/24 20:44:40
ディレクトリは
1. c:\DX90SDK\Include(インクルードファイル)
2. c:\DX90SDK\Lib(ライブラリファイル)
で1にddraw.h、2にddraw.lib入ってます。
リンクしているファイルは
dsound.lib, dinput8.lib, dxerr9.lib, d3dx9.lib, d3d9.lib,
d3dxof.lib, dxguid.lib, winmm.lib, d3dx9dt.lib, ddraw.lib,
comctl32.lib, odbc32.lib, odbccp32.lib
で全てです。(不要なものも入ってますが)
他にリンク、インクルードするファイルは有るんでしょうか。。。


994 名前:デフォルトの名無しさん :04/11/24 20:56:45
いつも思うんだがパスを通せない人がDirectXを使いこなせるんだろうか

995 名前:987(=989,993) :04/11/24 20:58:57
もしかしてDirect3Dが有ったらDirectDraw使えないという
オチですか。
でも、DIRECTDRAW_VERSIONとDIRECT3D_VERSION
二つ別々にあるから大丈夫なのではないでしょうか。(小声で...)

996 名前:デフォルトの名無しさん :04/11/24 21:02:54
んなわけ無い。

997 名前:987 :04/11/24 21:07:54
コンパイルさえもできないのですか?
Direct3Dが元にあってそこからDirectDrawに改良を
試みたんですが。。。
御迷惑掛けました。一からやり直します。
>>988 >>990 >>992 >>995
ありがとうございました。

998 名前:デフォルトの名無しさん :04/11/24 21:13:41
ttp://up.satoweb.net/img100/886.lzh
>997
これをコンパイルしてみろ
DDの初期化だけのヤツ
リンクの設定もいらんから
パスが通っていたらビルドできるはず
うちではできた

999 名前:デフォルトの名無しさん :04/11/24 21:14:08
立てるぞ?

1000 名前:1000=999=998 :04/11/24 21:16:23
立てたぞ


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