【C++】 DirectX初心者質問スレ 【C++】
1 :
デフォルトの名無しさん :
04/05/17 12:50 DirectXスレは既にあるってのは知っていますが、 初心者が気軽に質問できるような雰囲気じゃないのでスレをたてますた。 これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「SDK見れ」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する香具師 】 ・ どんな事で躓いているのか明確にしる。 ・ 長くならないなら躓いている部分のコードを晒してみれ。 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
2 :
デフォルトの名無しさん :04/05/17 13:20
2
3 :
デフォルトの名無しさん :04/05/17 13:21
3
5 :
デフォルトの名無しさん :04/05/18 14:28
DirectShowでMP3再生のソフトを作ろうとしているのですが、 サンプルみてもぜんぜんわかりません。 どこか解説されているサイトとかはないでしょうか?
無能の
>>1 ==
>>5 は自分の為だけにこのスレを立てた時空を越えたバカです。
このスレは放置してください。
7 :
デフォルトの名無しさん :04/05/19 13:45
DirectXを勉強するのに良い書籍はありませんか? Direct3Dの表示や当たり判定、物理演算などをお願いします
このスレ使わないの?
tukauyo
>>7 サンプルとかヘルプ読んどけ
>>8 使わないよ
/*******************************************
終了
*******************************************/
そもそも何の物理演算がしたいんだよ? 目的を言わずに、とにかく計算がしたいと言っているのと同意なんだが、 それすら分からないほど無能なのか? お前は物理演算と言いたいだけだろ?
なんでいつも高圧的なんだ?
いつも機嫌が悪いから
香具師は生理中じゃねーの? サンプルもヘルプもたいして訳にたたねー。 それも中途半端でお粗末な物・・・
サンプルやヘルプが悪いのではなく、それを理解できない人間に問題がある。 何でも他人のせいにするのはよくない。 まずは自分が悪いことを認識するべき。
仮に「BMPを表示するだけ」でもそれに辿り着けるまでえらい苦労する。 SDKのヘルプでいけばDirectX Graphicsあたりだろうな。 プログラミングガイドを見れば、関数の使い方とかはわかるが、 そいつをどう繋げていくのかが不明だ。 仮にD3DXCreateTextureFromFileを使うとしよう。 引数は3つしかねーし、バカでもわかるように説明書かれてるわな。 だけど、それをどうやって表示させるん? 関数の説明が載ってても肝心な情報が入ってこないわな。 時間かけて調べてりゃその内わかるけどさ、そんな暇人いるかって。 ググってみてもくだらねー解説サイトしかひっかからんし。 DirectXやる香具師が少ねーのも当然だわな
言語の基礎が分かっていないのに、いきなりWindows依存系の処理から始めたり、 Windowsプログラムが分かっていないのに、グラフィック系の処理をしようとしたり、 グラフィック系の処理が分かっていないのに、Direct3Dでなにか処理させようとしたり。 算数が出来ない人間が、いきなり数学の参考書を見ても意味不明なのは当然だろう。 自分にとって妥当なスタートラインが分かっていないのが問題なんだよ。 つまり参考書が悪いわけではない。
ぬぅ・・・折角書いたのにどっかに誤投下したようだ。
>>17 一通り,プログラミングガイドのテクスチャの項を読んだ者なら
サーフェイスへのコピーでそれをより簡単に実現するだろう。
また,「テクスチャはプリミティブに適用するものである」との解説も
読み取れないようであれば,プログラミングガイドを読むための日本語
読解力が欠如しているといえる。
このような者であれば,DirectX以外でも同様の状態に陥るであろう
ことは予想に難くない。
22 :
デフォルトの名無しさん :04/06/02 11:30
>>21 は言い過ぎだと思う。確かにDirectXはむずい。
Bmp表示はテクスチャの設定、頂点データの定義、プリミティブの表示を理解してないとできない・・・。
Bmp表示くらいのクラス作ってくれたら段階を追って勉強できるのに。
ただDirectX勉強してると「その仕様もしかたがないことなんだ」と気づくはず。
今のPCスペックでは、リアルタイムレンダリングを実現させるにはレンダリングの内部の仕組みをよく理解して
最適化がプログラム側にゆだねられた仕様でないといけない。
DirectXはそういう仕様になっている(そうですよね?)。
>>17 を含め初心者はまずレンダリングパイプライン(レンダリングの過程)を理解すればDirectXの理解が早くなると思う。
プログラマならいつも「おまじないコード」を自分のソースに入れとくのはプライドが許さないだろうし。
23 :
デフォルトの名無しさん :04/06/02 12:07
プライドちゅうかきもちわるいんじゃ
いまだに俺にとって#include <stdio.h>はおまじないですが何か?
スレ違いだったらすみません。 DirectXを使ってソフトを作った場合、DirectXのランタイムを一緒に配布するには MSの許可が必要なのでしょうか?
26 :
デフォルトの名無しさん :04/06/02 17:07
すみませんでした。 また、親切にURLをご提示頂きましてありがとうございました。
質問があります。 DirectShowで、カメラとマイクからの入力をキャプチャしてAVIで保存しています。 現在、圧縮なしで保存しているのですが、 どうすれば圧縮をかけられるのでしょうか?
まずは初心者と名乗るのをやめることが先決。 次からは挑戦者と名乗れ。
誤爆った。
32 :
デフォルトの名無しさん :04/06/18 22:32
亀レスだけど どうしてヘルプのチュートリアルを 何も考えずに追ってみる とかやってみないんだろう。 これでDirectXの初期化からポリゴンの描画までいくんだけど・・・。
33 :
デフォルトの名無しさん :04/07/04 13:27
そもそもピクセルシェーダって何ですか。
34 :
デフォルトの名無しさん :04/07/04 21:47
ヤダヤダヤダ DirectXなのにダイレクトに弄れないなんてヤダ ヤダヤダヤ 〃∩ _, ,_ /) 〃∩ _, ,_ /) ⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ `ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ミ | 〃 ∩ 。 | ⊂⌒从ヽ从゜o ザバーン | 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 |
>32 さらに亀レスだけど、 DirectXで出来ることを理解する前に、 自分がやりたい事だけを知ろうとしているからだろ。
37 :
デフォルトの名無しさん :04/07/29 19:27
D3DXMATRIX *WINAPI D3DXMatrixRotationYawPitchRoll( D3DXMATRIX *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll ); の、yaw(y軸周り)とpitch(x軸周り)が逆になってませんか? D3DXMatrixRotationYawPitchRoll( pOut, 0, rot.y, 0 ) == D3DXMatrixRotationY( pOut, rot.y) D3DXMatrixRotationYawPitchRoll( pOut, rot.x, rot.y, rot.z ) == D3DXQuaternionRotationYawPitchRoll( pOut, rot.y, rot.x, rot.z ) になっちゃっているんですけど?
38 :
デフォルトの名無しさん :04/07/29 19:42
俺 「C++ってなに?」 友人「ちんちんぷらぷら」
39 :
36=挑戦者 :04/07/29 20:03
>>37 すいません、確認したいのですがどのファイルか分かりません。
40 :
デフォルトの名無しさん :04/07/29 20:07
すみません。36とは関係ないです。
>>41 あ、そうだったんですか。
こちらこそすいません。
44 :
デフォルトの名無しさん :04/07/29 23:30
>>36 この辺のライブラリがリンクされてないんでしょ?BCCのリンカは判らんので設定は自力で頑張って。
d3dx9.lib d3d9.lib d3dxof.lib dxguid.lib dxerr9.lib (dsound.lib dinput8.lib 必要ならば)
45 :
36=挑戦者 :04/07/31 01:18
>>43-44 ありがとうございます。
リンクされていないようだということでbccのcfgファイル見てみました。
…が、一向に解決しません_| ̄|○
bcc32.cfg、ilink.cfgを確認してみましたが、ちゃんと設定されているようです。
>>45 プロジェクト設定のリンクを開いたら幸せになれるかも。
VisualStudio.NET2003でDirectXアプリを作りたいんですけどプロジェクト作成ウィザードでDirectXアプリが出ません。 ライブラリとして普通のアプリで使えるようになるだけっすか?
48 :
デフォルトの名無しさん :04/07/31 02:16
DirectXの視野変換で、zの変換が、F = Z far値,N = Z near値として、 z' = z{F/(F - N)} - FN/(F - N)・・・@ になっているけど、 zを[N,...,F]の区間に正規化したいわけだから、 z' = z*{1/(F - N)} - N/(F - N) でなぜだめなんでしょう?実際これでちゃんと動いてます。 @式の分子のFがどっから何の為にでてくるのか判りません。実はz'もw=zで割るんですか?
49 :
デフォルトの名無しさん :04/07/31 02:59
>>48 z' = (z-N)/w * {F/(F-N)} [0..1]
行列で計算する際は、割る必要があるから。
ごめん、嘘ついてました。ちゃんと動いてなかった。zバッファリングがおかしくなってた。
>>51 できるだけ、わからない部分は調べて+αでいろいろ知識増やさないと大変だぞ?あとあと・・・
基本的なことですが ピクソーシェーダの原理ってどういうものですか
t-potが閉鎖したっぽいんだが・・・詳細キボンヌ
57 :
デフォルトの名無しさん :04/08/04 09:02
DirectXSDKsummer2004をインストールして、summer2003をアンインストールしたところ、 .NET-[新規作成]-[プロジェクト]のテンプレート選択で、 DirectXアプリケーションの項目がなくなってしまったのですが、 これを復活するにはどうすればいいのでしょうか?。。。 2004をインストールしてから2003をアンインストールしたのが悪かったのかと思い、 2004を一度アンインストールしてから、再インストールしてみましたが、ダメでした・・・。 もう容量きつくても、2003を入れっぱにしとけってことなんでしょうか・・・。
S2004には存在しない。
>>58 そうなんですか、、、。
必要になったとき、容量と折り合いつけて2003入れることにします。
情報ありがとうございました。
2004はサンプルブラウザからインストールしろって事なんだろ
ビルドしたら 「D3DXSPRITE_ALPHABLEND」 「D3DXSPRITE_SORT_TEXTURE」 が定義されていない識別子です、 というエラーが出るのですが、 なにかインクルードとか、 し忘れているのでしょうか?
ありがとうございます。 できました。
>>64 ∀・) < エクスプローラ(インターネットじゃないほう)でF3を押すとファイルの内容を検索できるぞ。
>>66 SetRenderStateのD3DRS_POINTSIZE_MAXはどうしてる?
>>67 64.0fを指定してみましたが、効果ありませんでした・・・
状況としては、一定のサイズ以上に拡大してくれない状態でして、 Z軸の移動は正常に行われ、カメラより手前に来ればちゃんと消えるようにはなってくれます。 が、遠近での縮小や、サイズ指定の縮小はしてくれるものの、拡大の処理がまったく行われません。 SetRenderStateのD3DRS_POINTSIZE_MAXを指定しても、改善しません。 出来ましたらアドバイスをよろしくお願いします。 orz
>>68 >状況としては、一定のサイズ以上に拡大してくれない状態でして、
その一定の「サイズ以上」ってサイズが実はD3DRS_POINTSIZE_MAXの
サイズだったりしないよな?
>>70 ためしに1000.0fとかイタズラにでかくしても改善されませんでした。
MaxPointSize とかどうなってんのよ?
>>72 調べてみたら、64.0fとなっていました。
これを変えるにはどうしたらいいのでしょうか・・・?
>>73 それはグラフィックボードの性能によって違うので
MaxPointSize が 64.0fならそれ以上はそのグラフィック
カードでの出力は不可能。
>>74 グラフィックカードでは不可能ということは、ソフトウェアでエミュレーションさせれば
出切る可能性もあるということでしょうか?
あるライブラリを使用してポイントスプライトっぽいのを作ろうとしたときは
いくらでもテクスチャーを拡大出来るのですが
>>75 ちと誤解のある書き方をしてしまったが、
D3DCREATE_HARDWARE_VERTEXPROCESSINGとか
D3DCREATE_SOFTWARE_VERTEXPROCESSING
の問題ではなくD3DDEVTYPE_HALとかD3DDEVTYPE_HALの問題なので
REFデバイスでも64.0fなんで無理。
おとなしく、自前でビルボードで代用した方がよいかも。
すまん >>D3DDEVTYPE_HALとかD3DDEVTYPE_HAL ではなくD3DDEVTYPE_HALとかD3DDEVTYPE_REF
すまん >D3DDEVTYPE_HALとかD3DDEVTYPE_HAL D3DDEVTYPE_HALとかD3DDEVTYPE_REFだ
>>73 わかりました。
アドバイスありがとうございました。
ビルボードみながら奮闘してみます。
81 :
36=挑戦者 :04/08/23 02:24
すいません・・・だめです・・・ 全部きっちり設定したはずなのに上手くいきません。 インストールしなおしてもう一回やってみたのですが、それでも上手くいきません。 リンクについての指摘が多いので、bcc32.cfgとilink.cfgを載せてみます。 ◆bcc32.cfg -I"c:\DXSDK\Include;c:\Borland\Bcc55\include" -L"c:\DXSDK\Lib\BLib;c:\Borland\Bcc55\lib" ◆ilink.cfg -L"c:\DXSDK\Lib\BLib;c:\Borland\Bcc55\lib" ここが悪いのでしょうか。
DirectX関係ないしw 結局夏厨を隔離しただけじゃねーかw
83 :
36=挑戦者 :04/08/23 02:28
>>81 Cスレ逝って聞いてきます。
以後
>>81 はスルーよろしくお願いします。
85 :
デフォルトの名無しさん :04/08/25 14:47
DirectXのサンプルなんかでよくある、 #define RELEASE(i) if(i){i->Release();i=NULL;} BOOL EndDirectDraw(void){ RELEASE(lpFront); RELEASE(lpDD); return TRUE; } これがよく分かりません。 これの一行目が分かりません。 defineということなので何らかの定義をしてるってことは分かるんですが… どういうことなんでしょうか?
スレ違い。
>>85 普通にメモリを動的に確保すると、どっかで開放しなきゃならん。
これがダルいしワケ♪ワカ♪ラン♪の元になる。
だもんでCOMオブジェクトは、保持するときはAddRef()を、手放すときはRelease()を呼び出す決まりを
作ることでメモリ管理を自動化するようになってる。
で、
第1部完
*
>>87 先生の次回作にご期待下さい!
こんなスレ作ったところで、
>>85 のような厨しか沸かない罠
>>87 ありがとうございます。
何だかよく分からないけど、必要みたいですね。
90 :
デフォルトの名無しさん :04/09/01 22:59
sampleのdirectplay→lobbyclientの原理を利用して 起動すると自動的に特定のアプリケーション起動してホストになるように したいんですがどのように手をつけていけばよいでしょうか。 対になるものとして参加側のものもつくりたいです。 さらにはどれらをativeXコントールで行えれば理想です。
91 :
デフォルトの名無しさん :04/09/01 22:59
それらを
SkinnedMeshのサンプルを参考に勉強中なんですが ID3DXAllocateHierarchyを継承してクラス作ったんですが(CAllocateHierarchy) それを宣言するとC2259のエラーがでちゃいます。。。 調べたんですがよくわかりませんでした。
93 :
デフォルトの名無しさん :04/09/02 12:32
面ごとにSetMaterialでマテリアルを適用する方法がわかりません。 最後に設定したSetMaterialがすべての面に適用されるっぽいんですが、誰かわかる人いませんか? ちなみにXファイル使わずに、独自形式を読み込んで、 頂点バッファとインデックスバッファに面数×3回ループ掛けて 自前フラットシェーディングでDrawIndexedPrimitiveで描画してます。
>>93 面ごとやりたけりゃ頂点色使えやチョッパリが
95 :
デフォルトの名無しさん :04/09/02 13:47
>>94 emissiveを使いたいんです。
というかLPD3DXMESHで解決したからいいんですけどね。アハハー
レベル低ッ
>>92 ID3DXAllocateHierarchyの4つのインターフェイスを、
引数や返値の型を含め、きちんと全て継承クラスで実装しているか確認。
>>93 使用したいマテリアルごとに、面(インデックスバッファ)をソートしてまとめて置き、
マテリアルの数だけ、マテリアルセット>DrawIndexedPrimitiveを繰り返す。
BBX専用ブラウザありませんか?
98 :
ちょうせんしゃ :04/09/02 17:48
DirectShowで、2台以上のカメラ映像を同時表示したいんですが。 コールバック関数内で画像の取得とクロスバーの切換やってみたら、カメラ画像が入り乱れて×。 切換直後のフィルタグラフ内のデータ消去とかでけへんかと考えよるけどうまくいかへんよ。 なんか、いい方法ありませんか?
よーく見るとコールバック関数がスレッドセーフになってなかたとか。
100 :
ちょうせんしゃ :04/09/02 18:28
>>99 ありがとうございます。よーく見てみます。
>96 ありがとう。ちゃんと宣言(オブジェクトが作れた)できるようになりました。 特にCreateMeshContainerがサンプルとかwebで出回っているものと違いました。 ほんとにほんとにありがとうございます。
DirectX9を使って2Dのゲームを作りたいと思っているんですが、 解説書か解説サイトってありますか?
103 :
デフォルトの名無しさん :04/09/07 16:54
error LNK2019: 未解決の外部シンボル _Direct3DCreate8@4 が関数 "long __cdecl InitDX8(void)" (?InitDX8@@YAJXZ) で参照されました。 error LNK2019: 未解決の外部シンボル _D3DXCreateTextureFromFileA@12 が関数 "void __cdecl StartInit(void)" (?StartInit@@YAXXZ) で参照されました。 fatal error LNK1120: 外部参照 2 が未解決です。 というようなエラーがでました どうすれば治るのでしょうか ご教授お願いします
104 :
◆Z0vd5w812U :04/09/07 17:21
>>103 d3d8.libとd3dx8.libをリンクライブラリに追加する。
またはソースコードに
#pragma comment(lib, "d3d8.lib")
#pragma comment(lib, "d3dx8.lib")
と記述する。
105 :
デフォルトの名無しさん :04/09/07 17:23
106 :
デフォルトの名無しさん :04/09/07 17:29
>>104 レスありがとうございます
おかげさまで無事解決できました
ほんとうにありがとうございました
>>105 レスありがとうございます。
自分も探したんですが、DirectX7とかDirectX8は結構あるのですが、
DirectX9はほとんど3Dしか扱っていない所が多くて…
もう少し探してみます
3dしか扱ってないと勘違いしてるだけじゃないの?
direct8と9ってどうちがうの?
>102 スプライトとか使うんだよたしか。 でも2D使いたいんならDirectDraw使えば?
DirectXにスプライト機能など存在しない。
112 :
◆Z0vd5w812U :04/09/07 22:09
>>102 DirectDrawを使うのが楽だと思う。DirectX7機能になるが、DX9環境でも使える。
または、Z=0としたDirect3D環境でガンバル。
>>107 もしよろしければDirectX8で2Dゲームの解説してるところ教えてください
IDirect3DTexture9 ID3DXSprite 2Dしか使わないなら ドキュメントでこの二つのメンバを見れ 簡単や一日あれば余裕
116 :
デフォルトの名無しさん :04/09/08 13:28
APIの命令使う方がいいのかダイレクトインプット使う方がいいのか どっちがいいのでしょうかそれぞれの短所長所を教えてください
117 :
デフォルトの名無しさん :04/09/08 14:14
VC++.netでdirectxのウインドウモードの時に ウインドウに文字を表示するにはどんな命令を使えばいいのですか?
デバイスコンテキストで表示できました あと、表示される文字のフォントサイズを小さくするにはどうすればいいのでしょうか?
directxと関係ないので他のところで聞いてきます
120 :
◆Z0vd5w812U :04/09/08 17:15
>>116 好きな方を使えばヨイ。
もしキミが学生で将来ゲームプログラマになりたいなどと考えているなら、両方使って違いを体感すべきである。
121 :
デフォルトの名無しさん :04/09/08 22:52
>>120 趣味でゲーム作りたいなと思っています
directxでゲーム作る限りはダイレクトインプット使いたいんですけど
初期化とか色々めんどくさそうだし、どっちにしようか悩んでます
>>121 多分作っていくうちにあれこれしたくなるから、DirectInputを使うのがいいんじゃないかな。
123 :
デフォルトの名無しさん :04/09/10 09:07
>>122 DirectInput難しそうなんでAPI使うことからはじめようと思います
アドバイスありがとうございました
124 :
デフォルトの名無しさん :04/09/10 13:41
3Dゲーム中に、例えばメニューウィンドウなどの2Dを表示する時、 縦横50*100の画像があるとして、 これを120*200の矩形範囲内に画像の大きさ&縦横比を変えずに リピート(縦に2.4枚分、横に2枚分リピート)したいのですが、 こういったことはスプライトではできないでしょうか。 やるとしたら力技で必要な枚数分スプライトを置く(2DRPGのマップように) しか思いつかないのですが、 スプライト一枚の大きさを変えたりテクスチャを弄ったりで なんとかできる方法はないものでしょうか。 また、一般的にこういったことをやるにはやはり 板ポリゴンに貼り付けてUV操作をするとか、そんな感じになるんでしょうか。
>120*200の矩形範囲内に画像の大きさ&縦横比を変えずに すいません、これはあくまで例えの大きさでして、 この矩形(ウィンドウ)はマウスドラッグとかで 随時大きさを変えられるようにしたいです。
ID3DXSpriteじゃ無理だと思うよ UV操作といってもラップテクスチャアドレシングモードで 1.0以上のuvを、右端下端に設定するだけだよ その例だとそのままu=2.0f、v=2.4f 幅120、高さ200そのままのTLVertexな板ポリを作り、上のuv設定すれば終了
127 :
デフォルトの名無しさん :04/09/11 01:02:00
XP .net2003 2004summer 雑誌のソースコードでコンパイルをすると ID3DXSprite::Draw : 関数に 7 個のパラメータを指定することはできません。(C2660) と出てきます。 そのソースの一部が以下のとおり。 RECT rect={0,0,100,100}; D3DXVECTOR2 vec2Scale(1.0,1.0); D3DXVECTOR2 vec2RotationCenter(1.0,1.0); D3DXVECTOR2 vec2Position(270,180); pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,0,&vec2Position,0xffffffff); pDevice->EndScene(); 検索すると2004summerで変更されたらしいです。 その人は9.0bにバージョンを落としたみたいですが、2004summerで使う場合はDrawのパラメーターをどのように変えればいいのでしょうか。 ヘルプを使っても別のDrawしか出ていないようです・・。
>>128 レスありがとうございます。
2004夏から変更と書かれていたので使えるのか半信半疑だけど試してみます(・ω・)
エラーは出なくなったけど画像が表示されない罠orz 改めてありがとうございます。
XSIのデータをコンバートするプログラムで悩んでいます。 SI_TriangleListがSI_Modelの中に複数あったりするので面倒なのです。 個人的にはSI_Modelの括りごとにデータを分けられれば楽なのですが、そういう風にするうまいやり方が思いつきません。 やはり、読み込んだデータは一行一行別々にリスト管理して、それから数値などを取り出していくやり方しかないのでしょうか?
>>126 なるほど、やっぱそんな感じですか。
なんとなく見えてきました。ありがとうございました。
133 :
デフォルトの名無しさん :04/09/11 07:51:25
directinputでマウスカーソルの座標を知るにはどうすればよいのでしょうか?
135 :
デフォルトの名無しさん :04/09/11 16:49:39
3×3の姿勢ベクトルから方位を出したいのですが、方法やどんな関数を使えばいいのでしょうか。 (1,0,0) (0,1,0) (0,0,1) この状態だと方位は0度。 (0,0,1) (0,1,0) (-1,0,0) この状態だと方位は90度。 方法が書いてあったと思われる向氏のサイトが閉鎖されてるし・・
>>135 その行列の行を一本のベクトルと見立てて
ペイントで絵でも描いてみろ。
そうすりゃわかるだろ。
137 :
デフォルトの名無しさん :04/09/11 18:35:46
>>136 atan2は使えないし、正確なPIが表示できないので誤差がかなりでる・・
138 :
137 :04/09/11 18:36:17
↑atn2
?
>>135 ちょっと曖昧
方位を求めたいのか、角度を求めたいのか
「何の」方位を求めたいのか、「どこの」角度を求めたいのか
const float3 x( 1.0f, 0.0f, 0.0f), z( 0.0f, 0.0f, 1.0f); if( dot( z, m[2] ) >= 0.0f) return acos( dot( x, m[0])); else return 2.0f * pi - acos( dot( x, m[0]));
>>140 方位ってY軸の回転ね。
てか方位で曖昧って言われたの初めて(´・ω・`)
>>141 ありがとうございます。
ちと試してみま〜
>>142 全ての発言が、お前に3Dは無理と感じさせる。
>>142 下を向く(X軸かZ軸が180度回転した)状態で
それでも方位をY軸回転って言うの?
くっ、レス書いてたが教える気が萎えるなw
無理してまで教えなくていいですよ
>>144 釣られているのかも知れんが
相対座標以外にも絶対座標があるのですよ。
おまいは寝転がると自分から地球の中心方向が南でその逆が北になると言うのか
>>147 あのさ、基底ってわかる?
3Dで言うと、ローカル、ワールド、ビュウって基底が違うだろ。
意識的に混同して誤魔化してる?
自分が寝転んだら、自分の絶対座標の基底は逆になるだろ。
それとも3D初心者によくある、全部ワールド座標以外理解出来ない君ですか?
誤魔化してきたぞw
150 :
デフォルトの名無しさん :04/09/11 22:26:32
話し終わったのかな?
>>141 のを使うと
error C3861: 'dot': 識別子は、引数依存の照合を使用しても見つかりません。
とエラーが出てきますorz
dotを使えるようにするにはなにかインクルードしないといけないのでしょうか。
151 :
デフォルトの名無しさん :04/09/11 22:42:35
>>141 よく見ればバンク角かorz
バンク角とピッチ角は出来てます・・。
変なゴタゴタも起こってますし、とりあえず別のところから作って見ます(´・ω・`)
float3型は通ったんだよね? つーか内積程度は自前で計算すれば?
>>148 人に教えれるほどやっているわけではないので間違ったことを言ってるのを前提に聞いてくれ。
まず基底の意味がそのクラスの元となっているもの(クラスと捕らえているのだがここは合ってるか?
そうすると
>3Dで言うと、ローカル、ワールド、ビュウって基底が違うだろ。
がおかしくなるので違うか。
自分の考えを書くと
> 自分が寝転んだら、自分の絶対座標の基底は逆になるだろ。
X軸{1,0,0} Y軸{0,1,0} Z軸{0,0,1}の基底クラス(地球(重力の反対がY軸ベクトルとする))があって、その派生が人間とする。
その人間が{{1,0,0},{0,0,1},{0,-1,0}}と横になっても、どっから見ようが方位は変わらないと思うのだが。
もちろん人間(派生)のY軸の回転と地球(基底)のY軸回転は違うわけだが。
>>152 出来るかどうか・・・なんとか頑張ってみます。
>>153 ローカルで横になって、ワールドで変化なしでも
ローカルで変化なしで、ワールドで横になっても
見た目は同じだが、ワールドでの姿勢制御行列は違うだろ。
>>153 基底をわかってない。それで語り出すなよ。
人間には人間の基底があって、地球には地球の基底がある。
人間を地球の基底にもって行くのをLocalWorld変換と言うんだろ。
なんだよ…派生って…
半端な知識な点について申し訳ない。
>>155 ワールドがメッシュAでローカルがメッシュBとして
メッシュAの中にメッシュBがあると考えていたけど違うか。
メッシュAが姿勢を変えたらメッシュBも姿勢が変わる。
メッシュBが姿勢を変えてもメッシュAは姿勢が変わらない。
>>156 3年前は基底クラスと派生クラスと学んでいたのでそのまま使っているが最近(cpp)は違うのか。
それとも基底の解釈の仕方が違うのかも知れんが。
考え方が色々あるみたいなので当方も頑張って勉強します。
様々なサイトや本を見ながら格ゲーを作ったけどこの考え方で作れたのは奇跡に近いのか・・・
>>157 これ以上、醜態を晒すなよ。
一つのメッシュで、ローカル、ワールド、ビュウと変換していくんだよ。
で、それぞれの座標系で姿勢制御行列は変わるだろ。
基底クラス?それはC++の話。
回転と姿勢制御で基底ってわからないの?
>{{1,0,0},{0,0,1},{0,-1,0}}
とか自分で言ってるじゃん?
>様々なサイトや本を見ながら格ゲーを作ったけどこの考え方で作れたのは奇跡に近いのか・・・
丸写し、サンプルコピペ、D3DXライブラリ等、知識なくとも作れるよ。
作れた == 知識ある
じゃない。
自前実装でもして勉強したら。
>>157 >3年前は
>3年前は
>3年前は
3Dの適正ない…
>考え方が色々あるみたいなので …なと言えばいいのかな… 貴方の捉え方、理解のしかたをもって 基本的な考えを >考え方が色々あるみたいなので と言ってるの?
161 :
デフォルトの名無しさん :04/09/12 00:10:07
>>158 半端な知識と書いてある通り知識があるわけでないしそもそも基底の意味が分からん。
Javaで少し出てきたけどcppでは今のところ出てきていない。
DXでの自分の考えでは
基となるのが大きなメッシュ その中に小さなメッシュ
小さなメッシュにXファイルをいれて大きなメッシュから見た座標と姿勢を指定する。(3x3の行列)
カメラも大きなメッシュの中にあってこれも同じく座標と姿勢を指定する。(Zベクトルが視点)
人などの小さなメッシュは大きなメッシュを基にして動くのでみんなバラバラに動くことができる。
大きなメッシュが動くとその中にある全ての小さなメッシュ(カメラ)も動く。
大きなメッシュが180度回転しようが大きなメッシュを基にしているので
小さなメッシュやカメラも一緒に動く・・・結果中身に何も変化なし。
つまり大きなメッシュを動かしても小さなメッシュと東西南北などの方位は変わらないのでは。
>>160 本に書いてあることがバラバラでどれが基本なのかわからない。
なので自分にとって分かりやすい考え方を自分の基本にしている。
英単語を覚えるのは基本的に何度も読み書きをするだけど
無理やりローマ字読みしたり睡眠中に流して覚えると言うものそれが自分に合ってればその人の基本かと。
基本は違えど結果は同じわけだし。
フレームとメッシュが滅茶苦茶に混同されている。 しかもメッシュの中にXファイルっていったい…。
>>147 お前、キモイんだよ、間違った自分の考えをダラダラと。
基底とは数学の話だよ。なんだよJavaって。
でモロに、ワールドでの話でしかないだろ、下らない例をグダグダと。
>本に書いてあることがバラバラでどれが基本なのかわからない。
>なので自分にとって分かりやすい考え方を自分の基本にしている。
数学的な物は、バラバラなわけないだろ。
で今は、モロに3Dの数学的な姿勢制御と座標系の話をグダグダ述べてんだろ、お前。
基本が同じって自前で実装してるなら通じるが
ライブラリやサンプルコピペしてるような奴は、基本が同じなど
おこがましい。
とりあえず餅つけ
>>163 ご免、素で変なこと書いてた。
大きなメッシュ→大きなフレーム(親)
小さなメッシュ→小さなフレーム(子)
>しかもメッシュの中にXファイルっていったい…。
箱の中にポリゴンを入れているイメージが載っていたのでそういう形で覚えてました。
(大きな箱を動かしたら小さな箱も一緒に動く 等)
変だろうけど勘弁してください。
>>164 数学の基底、学校で習うわけでもないし今まで必要じゃなかったので
回転と姿勢制御で基底ってわからないの?
分からないと言うよりも知らないの方が正しいです。
>>147 何を言い分けしても、お前の3Dの基本はグダグダ。
ワールド座標系しか理解出来ない奴は、ワールド座標系でしか物事考えられんって奴だ。
基底座標の変換と、同じ基底内の回転、平行移動、スケールが混同されすぎってか
理解も出来てない。
それで、語ってりゃ世話ない。
偉大だよな、DirectXって。
こんなイカレ野郎でも3Dやってる気にさせちゃうんだから。
モーフィングしたいのですがどうすればよいでしょうか? モーフィングという言葉が不適切かもしれませんがメッシュAをメッシュBへ変形させたいのです 顔A、顔Bと用意しておいて顔Aから顔Bへ徐々に変形していくことで表情を変えたりしたいです
頂点とIndex(あるなら)を対応したモデルが前提で 各頂点をモーフィングの度合いで線形補間して表示すれば良いだけじゃん。
170 :
デフォルトの名無しさん :04/09/12 23:06:58
頂点データについて質問です。 3Dの頂点宣言に、D3DFVFを使って行う方法は分かったのですが、 3Dの頂点宣言に、D3DVERTEXELEMENTを使いたいときには どのように指定したらいいのでしょうか? D3DFVFを使用したときには、 float x, y, z, rhw; → float x, y, z; のように、float型3つになっていたので、 D3DDECLTYPE_FLOAT4 の代わりに D3DDECLTYPE_FLOAT3 を 使ったりしてみましたが、無理でした・・・。 また重ねて質問なんですが、 D3DVERTEXELEMENT での頂点宣言を使う利点って何なんでしょうか?
「2Dの頂点宣言を、3Dの頂点宣言にする際に」を >D3DFVFを使用したときには、 >float x, y, z, rhw; → float x, y, z; >のように、float型3つになっていたので、 の前に追加願います・・・。 スレ汚しスイマセン。
>>169 DirectXにそういう機能は無いってことですか?
>>170 全然要領を得ない。
何言ってるの理解不能。
頂点型とD3DVERTEXELEMENT型の宣言を見せてみ?
>>172 頂点バッファの値も取得出来るし、書き換えも出来る。
だからスキニング等のアニメーションが出来るんでしょ?
まさか、D3DX系関数で関数呼べばやってくれるとかじゃないよな?
>>173 レスサンクスです。なんか自分、相当勘違いしてるみたいですね・・・。
それぞれ、
struct CUSTOMVERTEX
{
float x, y, z;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
D3DVERTEXELEMENT9 VertexDeclaration[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};
って感じです。
下のD3DVERTEXELEMENT型を3Dのポリゴンに使いたいのですが。
>>174 別にオカシイと思える所はなさげだけど?
もしかして2Dを3Dにとか言ってるって事は、
プロジェクション変換してないとか?
>>175 プロジェクション変換については、
spinの
ttp://spin.s2c.ne.jp/stoday/stoday04.html のページを参考にしていて、
ClipVolumeサンプルを元に作成してるので、大丈夫だと思うのですが・・・。
元は、
D3DVERTEXELEMENT9 VertexDeclaration[] =
{
// 2Dの頂点位置
{ 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 },
// 頂点の色
{ 0, 16, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
// 終了の印
D3DDECL_END()
};
という指定だったのですが、この指定から
>>174 の指定にした場合、
他にどのような部分を変更しなければいけないのでしょうか?
スイマセン・・・、どうやら見えない位置に しっかり表示されていました・・・orz お手数とってしまってホント申し訳ない・・・・。 スレ汚しスイマセンでした・・・。
178 :
デフォルトの名無しさん :04/09/15 05:48:18
MeshとPMeshってどう違うのですか?
P
180 :
デフォルトの名無しさん :04/09/15 23:05:45
DrawIndexedPrimitiveの間の4つの引数について教えて下さい。
今もなんとなくは使えてるのですが…。
//ヘルプの引用
HRESULT DrawIndexedPrimitive(
D3DPRIMITIVETYPE Type, //これはOK
INT BaseVertexIndex, //インデックスバッファの開始地点から最初の頂点インデックスまでのオフセット
UINT MinIndex, //この呼び出しの間に使用される頂点群に対する最小の頂点インデックス
UINT NumVertices, //この呼び出しで使用される頂点の数 (BaseVertexIndex + MinIndex から始まる)。
UINT StartIndex, //インデックス配列の中で頂点の読み取りを開始する位置
UINT PrimitiveCount //これもOK
);
IndexBuffer配列
[0][1][2][1][2][3][3][5][4][4][6][8][9][6][5][4][5][7][4][5]
駄目人間
>>180 の考え
BaseVertexIndex 最初の頂点インデックスって何の最初だろ…描画したい範囲の最初だろうか…
MinIndex IB配列に入ってる0〜9の値のうち、最小の値である0という事?
NumVertices 使う頂点は0〜9だし10個?でもBaseVertexIndex + MinIndexとか言ってるし…
StartIndex BaseVertexIndexとは違うのだろうか…
バグとれました。(冷やし中華始めました風) ソース見て下さった人ありがとう。(いたかどうか分かりませんが)
SDKに付いているd3dappを使って組むのと 1から組むのどっちがいいと思いますか? まぁたいした量じゃないけど、、、めんどくさい
その程度を面倒くさいという理由でやろうとしない人間は、 結局何も作れないで終わるだけ。
>185 すみません 僕が甘かったようです ちょっと調べて思ったんですが ネット上の情報ってなんでエフェクト処理ばかりなんだろう。。。 ゲームにはそんな重要ではないと思うが
xファイルを読み込んでDrawSubsetで描画する、というのを ネットで適当にサンプルを拾ってきてそれをコピペしてやってみたのですが、 なぜか所々ポリゴンが抜け落ちたようになります (3角形の穴が開いたように、裏側というか内側?が見えたりする) また、メッシュのx座標を変化させても抜け落ちるポリゴンは変わらないのですが、 z座標を変化させると別のポリゴンがかけたりします こうなる原因として、何が考えられるでしょう? バージョンはDirectX9で、開発環境はVC++.netです
>>187 背面カリングをしない設定だとちゃんと描画されるのか?
189 :
デフォルトの名無しさん :04/09/21 14:07:38
LINK : fatal error LNK1181: 入力ファイル "dinput8.lib" を開けません ビルドするとこんな↑エラーが出るのですが、どうすればいいのですか?
ここはDirectXの初心者スレだ 開発環境C/C++の初心者スレではない
191 :
デフォルトの名無しさん :04/09/21 15:37:38
Windowsをぶっこぬくほうほうを教えてください
192 :
デフォルトの名無しさん :04/09/21 15:48:01
どうすれば、テクスチャ上の文字列をきれいにそのまま表示できますか? テクスチャは拡大も縮小もせず(Worldで256x256なら、Screen上でも256x256で表示)、 傾き0で表示していますが、ノイズが入ることがあります。
スプライトって飲むとシュワシュワしますか。
うーん、スプライトではなくてテクスチャで何とかしたいのですが。。。
トランスフォーム済みで0.5ずらすだけ。
>>180 DrawIndexedPrimitive
IDirect3DDevice9::SetIndices を繰り返し呼び出すことなく、
同じインデックス バッファで複数のプリミティブをバッチ処理できるように、
IDirect3DDevice9::DrawIndexedPrimitive が変更された。
とあるから、それぞれの意味はなんとなくわかるよね?
>>188 背面カリングをしない状態でも、同じのようです
よく見ると
>>187 で書いたのと少し違うようで(スイマセン...
背面は描画されないのですが、
たとえば球の前に立方体を置いて、立方体の方向から
球が立方体の影になるようにして球を見ると、
球のポリゴンがチラつくように立方体を通して表示されます
(球と立方体でひとつのメッシュです)
わかりにくいと思いますが、よろしくお願いします
射影の遠近設定が不適切で、Zバッファの精度が足りなくなっているのでは?
>>198 まだ安定してませんがどうやらその辺りのようです
ありがとうございました
>>180 一応それっぽい意味を。
BaseVertexIndex
ヘルプの説明がわかりにく。とりあえずこれは頂点バッファの
先頭からのオフセット。
1を設定すると頂点1個分sizeof(CUSTOMVERTEX)分進む。(複数オブジェクトをまとめる時にでも)
MinIndex
最小のインデックス番号?なのかな。基本的になに設定しても動作はかわらんかった記憶が・・・
なんか内部で最適化されるとかいってるからとりあえず0に。最適化なのかなんなのかしらないけど
そこまでデータの割り振りを手元に用意するのはめんどいなと。
NumVerticesは単にレンダリングに使用する頂点数。
StartIndex、これはインデックスバッファのインデックスオフセット。これをずらして作業することって
あまりなさそうだけど{0,1,2,3,4,5,6}のインデックスにたいして1をセットすれば
内部で{1,2,3,4,5,6}になる。PrimitiveCountとの整合性は保たないとあれかね。
まぁ部分的に間違ってるヤカン
>>196 >>200 (*゚Д゚*)!
いや正直未だに分からず放置してたんです。
な、なるほど!インデックスバッファをまとまり毎に処理するためのものに加え、
頂点バッファもまとまり毎に処理が可能に出来てるんですね。
IKのためにオブジェクト毎に持っていた頂点バッファを、ひとつにまとめて
変更を少なくしたり出来ちゃうわけですか。これは便利だ…。
いや目が覚める思いです。まことにありがとうございました!
202 :
デフォルトの名無しさん :04/09/22 12:44:29
あまり面白くないね。
ATL/WTLと一緒に使うサンプルなんかありませんかね?
ウィンドウに描画されているものを、そのまま引き伸ばすにはどうすればいいんでしょう? (ウィンドウサイズが自由に変更できて、そのサイズに合わせて表示されるようにしたいのです)
描画先のサイズを指定するだけ。
>>205 チュートリアルぐらいみようじぇー
Presentのあたりを
Thanks!!
.pic形式のファイルをLPDIRECT3DTEXTURE9型で扱えるように読み込んでくれる関数ってないですか?
fopenとか。 読み込んだらテクスチャのフォーマットに変換すれば完了。
GDI使ってサーフェスに直線を描きたいんですが WM_PAINTの中でコードを書いてInvalidateRectしないと駄目ですか? InvalidateRectは画面がちらつくからできれば使いたくないんです。
バックグラウンドサーフェイスに描くのなら、別にちらつきなど関係ないが?
いえ、peekmessageループの中でバックグラウンドサーフェスに描いてみても なぜか描画されないんです。 WM_PAINTの中でバックグラウンドサーフェスに描いてInvalidateRectすれば ちらつきながらも描画されました。
どこのDCに描いているか記せ。
HDC hdc oss(オフスクリーンサーフェス)->GetDC(&hdc) こんな感じです。
GdiFlushしてる?
WM_PAINTの中で BeginPaint->Blt(hdc,...oss,...);->EndPaint 他は好きなところでossに書けばいいだけじゃ?
218 :
デフォルトの名無しさん :04/09/24 17:47:12
いつのまにかMSのサイトからDirectX7.0日本語のヘルプファイルが消されてしまいました。 DirectDrawだけ使いたいのに困ってしまう。 googleで探しても見つからない。どこかにミラーしてありませんでしょうか。
>>213 InvalidateRectの3つめの引数の
TRUEとFALSEを入れ替えてみろ。
220 :
デフォルトの名無しさん :04/09/24 22:45:17
すんません、助けてください。 DirectXではポリゴンアニメフォーマットとして Xファイルが対応している事は解るのですが、 そのXファイル作成方法がどーしてもわかりません。 LW7.5でアニメーション作成してLWS2X.exeでxファイルに 変換しようとしたのですが、Ver7.5には対応しておらず、 オブジェクトと共にVer5として出力して変換させると Xファイルに変換はするのですが、まったくアニメーションしません。 途方にくれて2週間・・・・どうかヒントだけでも教えてくださいませ。 _| ̄|○
別にDirectXがXファイルに対応しているわけではない。
>>220 割れでも使ってるのか?
LW7.5用のXfileエクスポータープラグインは無料でD-STROMのサイトでDL出来るが…
無事解決できました。 感謝いたします。 m(_ _)m
224 :
デフォルトの名無しさん :04/09/26 00:44:46
アセンボラって 覚えたほうふあいいですか。
3Dグラフィコにはアセンブラ必須だろ MFC使ってノホホンと組んで 「別に遅くなってもいーや」とか ハナクソほじりながら言える分野じゃない
必須じゃねーよタコ。シェーダ以外でアセンブラを使ってる方が稀だ。
レベルによるだろ。理解出来ない、気が付かない奴は知らないだろ。 例えばD3DX系の関数は内部でSSEで最適化されているとか。 行列x行列なんてモロにアセンブラでオプティマイズ必須だろ。 自分で行列型なりクラスなり作っても、一番簡単な高速化はアセンブラだし。 演算子オーバーロードして matrix = matrix * matrix; なんて速度を意識してない奴だけ、 そりゃアセンブラなんて必須じゃないし、何故必要かも理解も出来ないレベルだろうね。
行列*行列は頂点*行列に比べると圧倒的に数が少なく、 全体に与える影響など極微量なのだが、 それが理解できていない奴がこういう勘違い発言をしてしまう。
ま、少なくとも日本のゲームには無いな
このスレには日本で発売されたゲーム全てのソースを、 一つ残らず見たお方がいます。
それで全部書けりゃ一番いいことは間違いないわけだ 実際DX8までは全員これでなきゃシェーダ書けなかったわけだし シェーダに限らずアセンブラで全部できればそれが一番いい
>>229 スゲー頭悪いね…
アセンブラを使うってのは頂点*行列でも同じ意味だろ?
行列*行列はアセンブラ使って
頂点*行列は使わないってか?
>頂点*行列は使わないってか? Direct3Dでまともにプログラムを作ったことがない人間だということが、 この発言で証明されてしまったわけだが
>>233 はきっとDirectXには頼らず、自前でソフトウェアレンダラを作ったのですよ。
算術ライブラリ程度作った事があれば、 オペレーター演算子計算の中身と、関数化した違いは分るだろ。 D3DX系のクラスのヘッダーは見れる訳だし、 HELPにもD3DX算術計算は内部でSSEに最適化した処理を持っていると(アライメントした型を使うが) 記述されている。
つまんねーよオマエラ もっとマシな話をしろや
>>234 国語の力を身に付けてください。
>行列*行列はアセンブラ使って
>頂点*行列は使わないってか?
>>頂点*行列は使わないってか?
>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>この発言で証明されてしまったわけだが
頂点*行列にかかってくる使わないかどうかの物は、アセンブラであって
頂点*行列自体を使うかどうかではありません。
>>234 >>頂点*行列は使わないってか?
>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>この発言で証明されてしまったわけだが
D3DX使わないと、まともにDirect3Dでプログラム組めない人間だということが、
この発言で証明されてしまったわけだが
行列*行列は(では)アセンブラ使って 頂点*行列は(では)(アセンブラを)使わないってか?
>>238 >行列*行列は頂点*行列に比べると圧倒的に数が少なく、
最も計算量の多い頂点*行列はDirectXを使う限り、そちら側で行われる。
アセンブラで最適化する余地はほとんど残されていない。
にもかかわらずその反論が、
>行列*行列はアセンブラ使って
>頂点*行列は使わないってか?
恥の上塗りはみっともない。
さらに致命的な墓穴、
>>>頂点*行列は使わないってか?
>>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>>この発言で証明されてしまったわけだが
>D3DX使わないと、まともにDirect3Dでプログラム組めない人間だということが、
なぜそこでD3Dではなく、D3DXになるのか。
頂点*行列をDirectXに任せるのであれば、少ない例外を除けばD3DXの介入余地はない。
プログラムを組んだことが無いどころか、全然DirectXを理解していないだろう?
>>241 D3DXはDirect3Dとは別物。
vectorクラスやmatrixクラスの演算子のオーバーロードによる計算は
あくまでクラスの実装。
>頂点*行列をDirectXに任せるのであれば
お前が全く理解してない。
特定の最適化を馬鹿の一つ覚えで連呼する奴は、 最適化した部分のみで計測する偏ったベンチマーク結果は出すが、 それを組み込んだ場合に、システム全体がどの程度高速化するのかは全く考えない。 実際にやってみると、誤差程度に1FPS増えたような差しか出なかったりするわけだが、 それをひた隠しにするか、それ以前にそういう実験すらしない。
>>241 D3Dには算術系の処理なんてありませんよ??
>>243 >特定の最適化
と・く・て・い
なんだから
さらっとやっとけ。
>>241 どっちにも与す気はないが、234は確かに読解力無いよ
D3DXMATRIXのmatrix * matrixは、最適化されてないのかね
>>244 トランスフォーム済みにでもしない限り、
D3D側がHALやソフトエミュで頂点*行列を行うわけだが。
>>246 241様はD3DX使わずに、
D3Dの方で
vector * matrix が出来ると発言なさってます。
つまりD3D側で頂点*行列が出来ないと思っていたわけか。 ならアセンブラアセンブラと連呼するのも納得がいった。 元から何も分かってないだけじゃん。
>>247 ハードウェアT&Lと激しく混同なさってますyo...
>>249 ハードウェアT&Lと激しく混同なさってますyo...
アセンボラ
ハードウェアT&Lの機能をさして そのソフトエミュをさして D3Dで Vector * Matrix が出来るか… スゲーな。
>>247 >>249 わたくしめの、
スキニングアニメーションのプログラムで
vector * matrix
をD3Dがやってくるようにしたいのですが
何か指定の方法があるのでしょうか?
D3Dの関数が用意されているのでしょうか?
D3Dのクラスが用意されているのでしょうか?
おれが249だったら絶対に正体を知られたくないw
>>254 固定処理なら頂点にウエイトを設定して、
必要な行列をセットしてレンダリングするだけだが?
>>256 それだとグラボ(GUP)で処理されてしまいます。
D3Dにやらせたいのです。
>>257 つまりドライバ側に投げる処理は、D3Dではないと言いたいわけか?
>>259 つまりSetTransformの処理を、vector * matrixと言いたいわけか?
>>259 普通投げた時点で、計算はしてないってなるだろw
計算から処理に言葉を変えるなよw
ドライバ側が行う処理がDirectXの仕事ではないとすると、
例えばDirectDrawでVRAM上の画像のブロック転送を行ったときも、
それがビデオカード側で処理されれば、
DirectDrawの機能ではないという屁理屈をこねたいのだろうか?
>>260 >つまりSetTransformの処理を、vector * matrixと言いたいわけか?
そこでは値を設定しているだけというのは置いておくとして、
その後に実際に演算が行われるときは、頂点*行列が行われている。
>>262 お前はハードウェアT&Lの機能を
vector * matrixとか言ってD3Dだとほざいてるわけか?
プログラマが任意にvector * matrix使いたい場合は
どうすんるんだ?
>>262 お前の理屈でドライバの処理がD3Dなら
ドライバに命令するプログラムで使用した
VECTORやらMATRIXのクラスなり構造体が
D3DXだとD3DXの処理だ、とはならんのか?
算術計算の話をしている中で >そこでは値を設定しているだけというのは置いておくとして、 置いておけないだろ…
HW-TnLでもシェーダでもソフトエミュでも、 それ以上ユーザが低いレベルで使えるAPIが存在しない以上、 D3D内のインタフェイス上から実行されているのならD3Dの機能。 そもそもドライバ側がD3Dの機能の一部として使えるように書かれている。 >プログラマが任意にvector * matrix使いたい場合は それは自前で計算する以外にはない。 割合的には多くないが、最適化したいのなら、アセンブラでも何でも使えばいい。 ただし少ない部分を最適化しても、全体のパフォーマンスが上がる可能性は薄い。 逆に質問するが、処理負荷の中心である、 頂点*行列のほとんどはD3D側で行うことになるわけだが、 これをどうやってアセンブラに置き換えるのか?
>>262 ぼくのPCのグラフィックカードのドライバはnVidiaの物です。
学校のPCのはオンボードです。
ともだちのPCはATIのグラフィックカードのドライバです。
世の中に色んなDirectXがあるんですね。
…つーかCOMでも勉強しろや
>>265 いちいち突っ込んでいるときりがないのだが。
「投入されたジョブが実行されるときだろ」
とか言っておけばいいのだろうか?
>>267 YOUの判定負け、これ以上醜態をさらすこともなし
>頂点*行列のほとんどはD3D側で行うことになるわけだが、 いや、いや、いや、いや、 お前のアホアフォな前提を完全肯定して話を進めるな
>>267 HDDにも色々あるけど、ファイルの入出力はOSの機能とは言えないと?
HDDの種類だけOSがあることになるが。
>>266 俺は、家でも、会社でも
SetTransformはワールドの制御のみで
ローカルやアニメーション処理は自前で計算してる、若しくはD3DX使う。
>>270 頂点*行列というと意味がぼやける。
要は頂点トランスフォームは、D3D側かアプリ側
どっちが担当するんだってことだな。
各社のグラボドライバが様々あるのに DirectXと言う物で制御出切るのは COMと言う、DirectXではない技術を使っているから これまでの理屈だと、COMが処理してるってならないの?
結局負荷の高い処理がアセンブラ化出来ない隠蔽されたところに存在するわけだが アセンブラ化の目的ってパフォーマンスを上げることじゃないの?
>>273 頂点トランスフォーム
と
vector * matrix
は、全く意味が違うだろ。
>>278 いや同じだが、何をもって違うと言いたいのだろう?
>>279 はぁ?
算術処理と頂点トランスフォームが同じ?
何かい?DirectX使いには
vector * matrixと言う物は
ハードウェアT&Lでの頂点トランスフォームだとなるわけ?
>ハードウェアT&L 過去の遺物のこれにこだわる理由はよく分からないが、 投入されたデータから頂点*行列の演算しないことには正常に描画出来ないんだが。 それとも頂点*行列は行われていないと?
vector * matrix これが描画の為の頂点計算のみだと 盲目的に考える馬鹿がいる
>>282 >>ハードウェアT&L
>過去の遺物のこれにこだわる理由はよく分からないが、
>投入されたデータから頂点*行列の演算
これをSetTransformでやってるのが、ハードウェアT&Lじゃねーの?
スキニングなんかのボーン毎、頂点毎に行列が違う物って 一頂点毎にSetTransformやってるの?
>>286 まとめてセットしておけるから、
一頂点ごとにやらなければならない理由はないが?
だから、行列がちがうんだよ? 何?まとめてセットって?
>>288 君のDirect3Dの知識はVer.5ぐらいで止まってないか?
話がまったく噛み合ってないぞ。
>>285 シェーダなんかもあるという意味だなんだが、
そういう反応をするところなんだろうか?
頂点数が大体4000だから、4000 256づつやれってか?
頂点数が4000で行列も4000あるっていうと、 ええと、ここは驚くところですか?
ウェイトが固定じゃない以上は、頂点数必要だろ
スレタイ読もうぜ
>頂点数が大体4000だから、4000 参りました、降参です。 オールアセンブラで最適化してください。
頂点に匹敵するボーン数を誇るデータが、いったいどんなものなのか興味がある。 すでにスキニングが意味をなしていないと思うが。
自前でスキニング処理した事あるやついないの?
ボーン数の行列と 頂点にウェイトが変動でかかる以上 頂点数の行列は必要だろ
>頂点にウェイトが変動でかかる以上 想像もつかないんだけど、 いったい何をモデリングして動かしているの?
とりあえず固定で処理したいのなら、 ウエイトが異なる頂点は別頂点として扱うこと。 データが増えて嫌なら自前で処理すればいい。
デザイナにウェイトかけて良い頂点は4つまでね、とか言ってるのかな? 理由、俺のプログラムがウェイト数4つまでしか対応してないから
OpenGL、DirectX、C、VB、またはお手軽組み組みMFCのスレは アセンブラの話が出ると荒れる
アセンブラといえば昔は2D系のポストエフェクトにつかわれる ことが多かったけど、今はシェーダで書くことも多くなったから つかわないといけないシーンは減ったな。 かつて一番計算のコストが高かった頂点のトランスフォームも これもシェーダをつかうからアセンブラで最適化する必要も なくなったし。 必須というわけじゃないが読めると得することが多いので 暇なときにアセンブラの本を1冊読んで、プロセッサ固有の 最適化に関する部分はネットの情報で簡単に勉強すれば 十分だと思う。重ねて言うが読めると得することは多いが 書くことはあまりないと思う。 シェーダのアセンブラについてはピクセルシェーダ1.x系列 は命令数とかテクスチャ読み出しの依存関係とか面倒 くさいことがいろいろあるのでHLSLとかCgつかうにしても アセンブラがわかってないと実質何もできないけど。 あと、スキニングって普通シェーダをつかってたら必然的に 書くことになると思うんだけど。そんなに難しい処理 じゃないはずなんだけど。複数の行列でトランスフォーム した頂点を重み付けして加算するだけだろ。何か変な 勘違いをしている人がいるような。しかもほとんど頂点 シェーダで書くからアセンブラの出番ないし。
>>286 から後出しで追加要素が色々出てきたな。
なんだかもういろんなところに転げ回っている感じがする。
DirectX9以前からやってりゃアセンブラのほうがしっくり来て早い
>>305 発売する前に、
必須環境
DirectX9とDirectX9対応グラフィックボード
と
俺のプログラムが動く環境と明記してくださいね。
>>308 そんなことをお願いしなくても、
販売する物なら動作環境ぐらい普通書くだろう。
DirectX9フル対応ボード「のみ」 なんてものは見たことがねえなあ いまだにGF2MXをメインに据えている俺からすれば そんなものが出てきたらサブマシンに変えざるを得なくなって非常に困る サブ Athlon64 3200+ GF6800Ultra 入れ替えるのめんどくせえ しかもメインに比べてうるせえ
>>305 シェーダでスキニングさせた事ないだろ?
シェーダでスキニングする場合、ウエイトは1頂点に4つまでと縛りが入る。
デザイナのデータに規制をかけてるのか?
>>305 君のプログラムだと、シェーダーが動かないと
実行されない物なんだ?
必須環境、指定のVSバージョンが動くグラボ?
王様プログラムだな。
>シェーダでスキニングする場合、ウエイトは1頂点に4つまでと縛りが入る。 そりは固定機能の制限だ。
ヘルプを見ては後出しで条件を出して、そのたびに墓穴を掘っているような。
315 :
デフォルトの名無しさん :04/09/26 21:30:42
SDLスレってあった気がするんだけど 俺の気のせいだったかな ちなみにSDLはこの板でいいの?
DirectX9ではなくDirectX8で組む場合 どうすればいいのでしょうか? DX8のSDKが見つからなかったので・・
>>318 9SDKには8のヘッダは入ってないだろうし無理じゃね?
つうか9で組めばいいじゃん。
初めて始めるなら9でも8でも殆どかわらんよ。
>>320 間抜けな発言をする前に、ヘッダファイルの中を覗くことをお勧めする。
>>321 確かにオールバージョン入ってるね。
これなら9SDKでモーマンタイだな。
>>316 情報thx
それそれ
でもム板でも昔見かけた気がするけど
やっぱ俺の気のせいだったかな
SDLって、COMと縁切れるからC++以外の言語で使いやすいんだよね
むちゃ簡単だし
適当なやつ作る程度ならこれで十分でしょ
このスレで使ってる人いないの?
まあ使ってるからって話題なんもないんだけどさ
俺自身も自作言語のテスト用途なわけよ
SDLとのインタフェースってかなり小さく出来るんだよね
Linuxでも同時に動くし
覚えることほんと少ないから
知らないでDirectX直で使ってる人いたらオススメだよ
324 :
デフォルトの名無しさん :04/09/28 05:18:32
質問です。 DirectShowをDirect3Dのテクスチャとして表示するために四苦八苦してます。 で、DirectX9.0bSDKの日本語ヘルプが欲しいのですが、マイクロソフトの所を 探しても見つかりません。 どこにあるか教えていただけませんか?
困ったな・・・・・・・・・・海外のBBSでもこういう質問が平気で飛び交うんだろうか?
すげー盛り上がってたようだが 落ち着いた所で何が正しいのかまとめてくれ
328 :
デフォルトの名無しさん :04/09/30 05:54:39
遅いマシンの為の動作テストをやりたいんですが OS全体に負荷をかけるツールってないですか? 単純にfor(;;);を実行するだけだとむらが出てしまいます。
329 :
デフォルトの名無しさん :04/09/30 10:27:32
DirectXって何ですか?
WinGとは違うんですか?
WinGが何か知ってるんならわかるだろ 20年程山篭りしてたわけでもあるまい
ネタにマジレスするみっともない馬鹿がいるのはこのスレですか?
いえ、無知を指摘されたため、慌ててネタということにして逃げる 典型的な厨房が吠えるスレです。
恥の上塗りをするのは自由だが、 どこをどうみたってネタにしか見えない。 なぜこんなネタにマジレスを返すのか、 馬鹿の考えることはさっぱり理解できない。
なぜこんなに必死なんだろう。 「20年」を転がすことも思い付かずにマジレス、マジレスとお猿のように。
どーでもいー
DirectAudioの質問です LoadObjectFromFileでセグメントの作成とパフォーマンスのダウンロードと再生が出来る状態で 予め読み込んでおいたデータをGetObjectでセグメントを作ろうとすると E_POINTER が返ってきます。 ナゼデスカー BYTE *pByteSrc = new BYTE[1000]; //標準入力でロード DMUS_OBJECTDESC desc; ZeroMemory( &desc, sizeof(DMUS_OBJECTDESC) ); desc.dwSize = sizeof(DMUS_OBJECTDESC); desc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY; desc.guidClass = CLSID_DirectMusicSegment; desc.pbMemData = pByteSrc; desc.llMemLength = 1000; g_lpLoader->GetObject( &desc, IID_IDirectMusicSegment8, (void**)g_lpSegment1 );
質問です。 鬱だ死のうDirectXスレはどこに行ったの?
340 :
デフォルトの名無しさん :04/10/01 03:44:54
HRESULT EnumSurfaces( DWORD dwFlags, LPDDSURFACEDESC2 lpDDSD2, LPVOID lpContext, LPDDENUMSURFACESCALLBACK2 lpEnumSurfacesCallback ); この関数の使い方がよくわかりません
>>341 使い方はヘルプに書かれているとおりだが。
わからないのなら他のEnum系のSDKサンプルを参考にすればいい。
346 :
デフォルトの名無しさん :04/10/02 13:02:57
次回の授業までにDirectXを使ってインベーダーゲームを制作しろと 課題が出されました。しかし、全くやり方が分からないんですけど だれか、インベーダーに関しての、情報が書いてあるサイト、 知識を持ってる人はソースコードとまでは言いませんが 誰か、知恵をお貸し下さい 長文スイマセン
インベーダーの情報か。 名古屋打ちとか。
高橋名人ってもっと後だっけ?
DirectX齧ってる人間が インベーダーもどきも自力で作れないなんて ネタでしかないわけだが
>>350 インベーダーゲームを知らない年齢では?
DirectXの知識はあるとも書いてないしな、微妙
昔のゲームは面白かった とかいうのでやってみると 実につまらない SFCのRPGなら今より面白いと言えるが
スレ違いだけどちょっと俺も同意 オヤジがレゲーにノスタルジー感じてるだけじゃないかと あと15年もすれば 「ポケモンは最高だった。今のゲームは複雑&作業プレイ」 とか言い出すやつが出てくるが出てくるだろう
既に今のゲームは作業プレイだ
>356 そうじゃない意欲的な作品も稀にあるが、人目につくこともなく消えていく 絵がきれいとか広告がうまいゲームしか売れてない >既に今のゲームは作業プレイだ 結局そんな作業ゲーが生き残ったのはユーザがそれを選択したってことなんだな
でも初代ポケモンをプレイしてた奴ってそろそろ家庭もって子供がいてもおかしくない年だよな。
>>358 何歳から家庭もって子供がいてもおかしくない年だと考えている?
バカモン
>361 バカモンゲットだぜ
gets() ゲッツて言うな
>>359 家庭を持つのが「おかしくない」のは18歳からだな。
そんなこともわからないの?
>>365 早いかどうかなんて問題になっていないでしょ。
「おかしくない」のが何歳からか、という話だよ。
>363 ハゲワラタ テユーカマイリマスタ
18は最短ですな。主語が男なら
>>368 早いけど、社会通念上まったくおかしくないよ。
あなたが勝手におかしいと思うのは自由だけど。
>>371 法律でセーフなだけだろ?
最近は高校生が妊娠したまま学校に通うのが普通なのか?
358からの流れが微妙に面白いな。ズレてるが
「18で結婚はおかしくはない」がいつのまにか 「高校生が妊娠したまま学校に通うのが普通」へ。
376 :
デフォルトの名無しさん :04/10/03 15:04:00
DX9のDirectShowに含まれているDirectDrawつうのは DX7の頃のDirectDrawと同じもんか?
>>376 別物。
DX7のDirectDrawはDX9でもそのまま残ってる。
>>373 何が普通か、などという話ではないんだよ。
何が「おかしくない」のかという話。
なんでそんなに頭が悪いの?
DirectX初心者質問スレでそんな話をする奴らがおかしい。なんでそんなに頭が悪いの?
猿真似すると、言われて凄く悔しかったんだってのがばれちゃうよ? ま、いいけど。 他人のふりして逃げるならそれも結構。ミスを認めたく無い場合はそれも有効だしね。 ↓何事も無かったかのようにスレ再開
もう勝利宣言
おまいら少しは鬱氏に書き込まないと即死判定でスレが落ちるよ
383 :
デフォルトの名無しさん :04/10/04 07:18:22
>>340 と同じ問題につまづいています。どうすりゃいいのこれ。
385 :
デフォルトの名無しさん :04/10/04 09:59:27
directx8で3Dの座標はfloat型で扱わなければならない とあるのですが 座標表すだけならintで十分とおもうのですがなんでfloat型が採用されてるんですか? 座標のfloat型に合わせるためか warning C4244: '=' : 'int' から 'float' に変換しました。データが失われているかもしれません warning C4244: '=' : 'double' から 'float' に変換しました。データが失われているかもしれません という警告が出まくります 座標に関わる計算するときに使う変数はすべてfloat型に統一しておいた方がいいのか 警告文が出てもプログラム自体は実行できるのでこのままほっといていいのか悩んでます
意図的にやっているならキャストすればいいだろう。 ここはDirectX初心者スレであって、C言語初心者スレではない。
388 :
梅宮 :04/10/04 10:15:20
シンボルッ(でっでー) シンボルッ(でッでー) 外部のシン〜ボルぅぅー
この言語はプログラム初心者にはお使いいただけません とか言ってるところがある。 float志向
甘いよオマエラ。
玄人は浮動小数点を捨て
固定小数点もしくは整数を選ぶ。
すなわち
>>385 はC言語はプロ、DXは初心者。
391 :
デフォルトの名無しさん :04/10/04 11:27:39
警告を表示させたくないなら #pragma warning(disable:4244)
392 :
デフォルトの名無しさん :04/10/04 12:15:33
すいませんおねがいします! int型の配列要素p[0]〜p[99]のうち0が 格納されている要素を全て実行例のように 画面に出力するプログラムを完成させよ p[3]=0 p[12]=0 p[85]=0 ................... #include<stdio.h> main() int p[100], i ; : (ここに配列要素に値を格納する処理があるとして : この後どうなるんでしょうか?? お願いいたします
とうとうDirectXと何の関係も無くなったが。
395 :
デフォルトの名無しさん :04/10/04 12:27:57
サーフェイスデバイスからGetDCを呼び出して
>>392 とりあえずVertexBufferを作るとこから始めてみろ。
続きは誰かお願いね。
LPDIRECT3DDEVICE9pD3DDevice_;
LPDIRECT3DVERTEXBUFFER9pVertexBuffer= NULL;
try{
HRESULT hr;
_ASSERT( pD3DDevice_);
IDirect3DDevice9PtrpD3DDevice( pD3DDevice_);
vector< int > srcBuffer( 100);
//ここに配列要素に値を格納する処理があるとする。
const DWORD usage= 0;
const D3DPOOL pool= D3DPOOL_MANAGED;
const size_t elementSize= sizeof(vector< int >::value_type);
hr = pD3DDevice->CreateVertexBuffer( UINT(srcBuffer.size() * elementSize), usage, 0, pool, &pVertexBuffer, NULL);
if( FAILED(hr))throw ...;
LPVOID pVertexIn;
hr = pVertexBuffer->Lock( 0, 0, &pVertexIn, usage & D3DUSAGE_DYNAMIC ? D3DLOCK_DISCARD : 0);
if( SUCCEEDED(hr)){
::CopyMemory( pVertexIn, .srcBuffer.begin(), srcBuffer.size() * elementSize);
pVertexBuffer->Unlock();}
else throw ...;
}catch( ...){_safe_release( pVertexBuffer);throw;}
>>384 VC6.0とDX9SDKSummer2004でやってます
aulldvrmってなあにいい
Summer2004はVC6.0に対応してない
対応してなかったっけ? たしかVC6用のも別に用意されてたような
Extras Extras ダウンロードには、ソフトウェア開発キットには含まれていない以下の内容が入っています。 Visual Studio 6.0 をサポートする d3dx.lib 以前のバージョンの CG ツール プラグイン 日本語ドキュメント (Summer Update 2004 の更新は反映されていません) Date: July 28, 2004
乙
>>401 どうもありがとうございます。そちらのd3dx.libにてちゃんとコンパイルが通るようになりました
Summer2004はrequires both Visual Studio .NET and the .NET framework for developmentって
書いてあったんですね・・すいませんでした見落としてました
ポストプロセス、ポストブレンディング、ポストフィルタリング これらの原理というか、概要が何のこっちゃか全然わかりません。 Google検索しても、「それが使われている」ことは書いてあっても 何をどうするのがポストプロセスと言うのかが書いてません。 申し訳ないですが教えてください。
原理も何もポストプロセスって「後処理」のことだぞ。 ようするに特定の処理を指すわけじゃなくて、後で何か手を加えること 全般を指す。 ポリゴンで描画したキャラクタの額にフォトショップで「肉」と書き 加えるだけでも立派なポストプロセス。
406 :
デフォルトの名無しさん :04/10/05 19:56:57
ゲームで言うポスト処理は 光をブルーミングするような感じにすることと思い浮かべる人もいる 良い例が3DMARK03、同05、Hitman Contracts、DeusEXIW PixelShader1.1か2.0によりポストプロセスを行うと公言しているのがこれ
408 :
デフォルトの名無しさん :04/10/06 15:14:21
VC++6.0 & DirectX9 2003Summerを使ってます. DirectX9 AppWizard→Single document windowに, ツールバーを追加しようとしても表示されません. TBBUTTON tbb[] = { {0, IDB_A, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {1, IDB_B, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {2, IDB_C, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, }; LRESULT CMyD3DApplication::MsgProc(...) { switch( msg ) { case WM_CREATE: { HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); InitCommonControls(); CreateToolbarEx(hWnd, WS_CHILD | WS_VISIBLE, ID_TOOLBAR, 3, hInst, IDB_BITMAP, tbb, 3, 0, 0, 16, 15, sizeof(TBBUTTON)); break; } ... 試しにWin32 ApplicationでHelloWorldを作り同じ方法で試すとツールバーは表示されました. 直接DirectXに関係する質問ではないですが,よろしくお願いします.
自己解決しました.
DirectInputのバッファリングデータの取得で キーを押したらキーを離すまでの間キャラクターを移動させたいのですが キーを押すと 押す→離す→押す と状態の変化がなぜか3回起こってしまい 直接データでやった場合のように移動開始直後にカクついてしまいます これはキーボード自体の仕様なんでしょうか?
> キーを押すと > 押す→離す→押す > と状態の変化がなぜか3回起こってしまい こんな現象、正常なら起こらないと思う。 キーボードが機械的に壊れてるとか、そもそもプログラムにバグがあるとか。
フルスクリーン時にIMEの入力中文字表示が 画面の描画で上書きされてちらつくんですが、これを なるべく少ない労力で正常に表示させる方法ってありませんか? 自分で考えた限りだと ・WM_IME_STARTCOMPOSITIONを拾って変換中の情報を全て自前で描画。 ・WM_IME_STARTCOMPOSITIONで変換中文字列だけ取って、 入力表示の幅を計算してその部分だけ画面を更新しない。 ってのを思いついたんですが、これらよりも簡単な方法ってないでしょうか?
よくわからんけど日本語入力モードになってるんじゃないだろうか
IMEバーやGUIなんかは自前でやるしかないだろう。 俺はやりたくないがな!
>>413 ええ、日本語入力モードの入力中の文字を表示したいんです。
>>414 自前以外の方法はやっぱ無いんですか・・・
>>416 DX9.0c夏Verから簡単に使えるようになってたんですか。それは知らなかった。
しかし、DX7使ってたんだよなorz
今から移行するよりは、このまま自前処理したほうが早いか。
418 :
デフォルトの名無しさん :04/10/08 09:30:37
DirectX9.0のDirectShowで利用できる独自のエフェクトを作成しようと考えています。 最初は、再生するMPEGのRGB値を調整(例えば、R値を10だけ増やすとか)するエフェクトから 取り組んで生きたいと思っています。 参考になる書籍やウェブサイトをご存知の方がいらっしゃいましたら、教えて下さい。
>>411 自分のデスクトップが
PS/2のキーボードをUSBに変換するのを咬まして
(さらにUSB切り替え機もかまして)接続してるのが原因だったようです
知り合いのPCで試させてもらったらちゃんと動きました
誰かしらの参考になれば幸いです
>>419 私の環境も同様に PS/2→USB変換をかましているのですが
やはり同じ症状が出ますね。
変換のせいだと思って間違いないと思われます。
おかげでゲームがやりづらいの何のって・・・・
>>392 int i;
int ans[100];
int num = 0;
for (i = 0; i < 100; i++) if (p[i] == 0) ans[num++] = i;
for (i = 0; i < num; i++) printf ("p[%d] = 0\n", ans[i]);
そのレベルもできないヤツは他の課題はどうやって乗り切ってきたのだろうか…
周りからぱくってんじゃないの?
でも本当は1行で済むんだよね
1行で書けるの? 改行しないだけ?
矩形の辺上に存在する複数の点を全部使って、 矩形を構成するトライアングルを抽出したいのですが、 何か良い方法ありませんか?
矩形って長方形(四角形)の事だけどそれでいいの? 頂点を一つずつ順番ずらして拾っていくだけかと。
428 :
デフォルトの名無しさん :04/10/11 21:23:42
>428 距離に関係なく全体をぼかすことはできる? あとはそれに距離(Z値)を考慮すればやりかたはいくつか思いつくんじゃないかな?
>>428 海外サイトにソースが山ほど転がってるよ
普通に中学卒業してるのなら読める
431 :
デフォルトの名無しさん :04/10/12 16:14:23
実行速度が速すぎてキャラの移動が早すぎるので ウエイトかけたいんですけど簡潔で効率的なウエイトのかけ方を 教えてくださいC言語でおねがいします
>>431 for(i = 0, i < x;i++){}
xの値を変えるだけで速度調節できるぜ
433 :
デフォルトの名無しさん :04/10/12 16:33:48
>431 DirectXなのか? そもそもWindowsなのか? なんちゃって ネタだということはお見通しなんだが
>>432 VCなんかだと空ループは最適化で無かったことにされるので、ネタにもなってないぞ。
なかったことにされなかったらネタにならないじゃねえか
ネタ(?)に便乗して、質問。 そういう時タイマー(開始時間と経過時間)使って、 よく処理するんですが他に方法って有ります?
最近どこかで同様の議論を見たが・・・どこでだったか・・・
>438 この辺とか typedef enum _D3DSWAPEFFECT { D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP = 2, D3DSWAPEFFECT_COPY = 3, D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF } D3DSWAPEFFECT;
>>428 ポストフィルタってのは特定の処理を表す言葉じゃないって言ってるだろ。
メインの処理の後にフィルタ処理をすること全般を表す言葉。
ボケるかどうかはどんなフィルタをかけたかって話。
逆にクッキリさせるフィルタをポストフィルタとして使うこともある。
CGの場合は元々ボケないから、シェープネスフィルタをかけることはまずないが。
先にフィルタをかけるプレフィルタ(プリフィルタ)というのもあるが、
3DCGではまず使わない。(クリッピングがプレフィルタとも言えるが)
身近なところだと、圧縮処理の前に圧縮率を上げる目的でプレフィルタを
使ったりする。
そのボケてるのがどんな処理をしているのかは、フィルタ処理を勉強しろ。
画像処理と呼ばれるものがほとんどフィルタ処理だから、画像処理で
調べた方がいいかも。フォトレタッチソフトで各種フィルタを試してみる
だけでも、かなり参考になる。
深度によってボケ方が変わるのは、深度情報(Z値)によってボカしの
強度を変えてるだけ。細かい話をすると深度エッジ部分に問題があったり
色々と難しい話があるが。
DirectXで垂直同期モードにするとSleepさせても 絶対60FPS出るんですがこれはどうなってるんでしょう?
レンダリングパイプラインに明確に依存するポスト処理よりも メインエンジン内でフィルタリングしたほうが幾らも良いのに 見た目も少し良くなる可能性がある
>>443 質問の意図がよく分からないが。
垂直同期にあわせつつ、60FPSより下げる方法を聞きたいのなら、
・Sleepの値を増やす
・SleepではなくGetSystemTime、GetTickCount等で経過時間を
計って調整する
60FPS以上で動作させたいのなら、
・リフレッシュレートを上げる
意表を突いて垂直同期自体が何なのか分かってないのなら、
詳しく書くと長くなるからググろう。
ちゅうかそもそもsleep使ったってfpsそれ程落ちんだろ ネタですか?
sleep(1)で1msマチだから、17よりでかいの渡せば落ちるんじゃないかな。 レンダ処理がOSからのメッセージかコールバックで動作してるとダメだろうけど。
高橋名人か
あのデブは今何しているんだろうなあ。
DirectXの「AVIファイル再圧縮」ってサンプルをBorlandC++Compiler5.51でコンパイルしてみたんですが、
Error: 外部シンボル '_MEDIASUBTYPE_Avi' が未解決
Error: 外部シンボル '_FORMAT_VideoInfo' が未解決
というエラーが出てきます。
bccでは対応していないのでしょうか?
因みに、OSはWinXPでDX SDKのバージョンは
http://goldfly.ld.infoseek.co.jp/program/directx/bcc90b.html を参考にして、DX9.0cをインストール・設定しています。
ヘッダファイルからMEDIASUBTYPE_Aviを検索してみると、uuids.hが出てきたのでインクルードしてみても同じでした…
ライブラリの追加が必要なんでしょうか…?
「全体的なお約束の一例」 ・基本的にマイクグチソフトのサンプルはVC++でないとコンパイルは難しい (ボーランドのでコンパイル通るサンプルがあったとしても運が良かっただけ) その他 ・「C == C++」 ("C"としか言ってないのに勝手に"C++"に置き換える奴がいる) ・「Cのソースを書いてる == VC++で書いてる」 (全員VC++使ってると思ってる) 会社にあるものも勝手にコピーしてきて家に持って帰ってきただけなのに 自分の金で買ったわけでもないVC++を賛美 とか
>>451 動画処理とカメラ使ったソフトを調べてたんですが、ネットで公開されてるものが、その辺りのサンプルを参考にしてたものばかりで…
同じエラーが出てきたので、何か方法があるかと聞いてみたんですが…おとなしくVS使います
(使い勝手が慣れないので、まだ殆ど使ってないです)
つーかエラーの内容からしてBCCのせいじゃないと思うが
足りないGUIDを自分で定義すればいいだけの話だが、 その程度のことすら出来ないのならBCCは使わない方が無難。
>>450 guiddef.hのなかで
DEFINE_GUID(...)が定義されてるところをよく読め。
DirectX初心者は特にVC++.Net買え いや、マジで 普通に買っても一万ちょっと 学生なら安く買える 金がないとか言う香具師は遊ぶ金とか食費削ってでも買え
457 :
デフォルトの名無しさん :04/10/15 21:14:02
それじゃ勉強にはならんな VC++使って何か作れても 「わかったつもりになってる」 だけ
VC++買う なにかサンプルをサクっとウィザードでつくる ちょっと凝った事をしようとするが、MFCが使い辛くて困る 勉強する 嫌気が差す C#に乗り換える
>458 いいんじゃね? その程度の香具師なら何使ってもその程度だろうから できる香具師はBCC使ってもいいんだけど、 BCC特有の問題とかめんどいからVC++の方がいいんじゃね?
2Dゲームの場合、DirectXを使うと本当に速くなりますか? あまり変わらないのなら、スクリーンの解像度と色深度のみをDirectXで 変更するだけにしようかと思うのですが、どうですか?
正直GDIのほうが早い 8bitカラーなら
GDI使うと、Win98あたりと互換性考える必要があって面倒じゃない?
GDIに互換性がなかったら、一般アプリは軒並み問題が発生してるな。 初心者スレとはいえ、何故こういう馬鹿が発生するんだろう?
この人は普段から16bitを超える座標系を頻繁に扱っていたんだろう。
>正直GDIのほうが早い 便利機能を使うGDI+なら開発は早いってことだと思ったんでね。 DirextX9.0c使えるならそっちのが開発早いと思うが。
>460 テスト用のプログラム作って試してみれば? もし、まだDirectX触ってないんだったらいい機会だから触ってみれ 実際使うかどうかは別として 何事も経験
>>461 スクリーンを8Bitにしたら16Bitより倍速くなりました!
>>465 開発の速さではなくて、実行速度です。
2Dゲームなので、BitBltぐらいしか使いません。
>>466 DirectXが面倒だったので、もし速くならないのならGDIでやろうと思ったのでした。
468 :
デフォルトの名無しさん :04/10/17 14:16:19
Xfileなどのオブジェクトを読み込んで表示するとき、 例えば配置する位置を(X、Y、Z)として、 World→View→ProjectionとSetTransformして DrawSubsetすれば簡単に表示してくれるわけですが、 このXYZが変換された後のスクリーン座標の値を 取り出したいときはどうしたらよいのでしょうか。
激しく無駄だけど自分で変換マトリクスを掛けてみる
無駄以前に、それ以外に方法はない。
なんか関数ありそうじゃん ないんだ
関数が用意されているいないにかかわらず、計算するのは一緒だが。
474 :
デフォルトの名無しさん :04/10/18 00:03:51
質問良いでしょうか? 皆さん描画システムどうしてます? (D3DFrameでいうRenderのBeginSceneとEndSceneの間) SetRenderState SetSamplerState SetTexture SetFVF と設定周りを色々呼び出すわけですが「呼び出し回数が少なければ少ない程早くなる」のだと思います。 最低の呼び出し回数でやろうとすると当然ツリー状態になるのですが、 確保やら解放やらでそんなに速度は変わらないのではと危惧しています。 「じゃぁ、どっちも試して速度調べろよ」と言われそうですが、他の人のシステムも知りたいので書き込みました。 よろしこです。
475 :
468 :04/10/18 01:18:49
>>469-473 どうもすいません。普通に自分で変換行列作って掛けてみたんですが、
0.6〜とか1.5〜とかよく分からない数値が帰ってきます。
以下ソースです。とんちんかんな事をしているかもしれませんがアドバイスいただけたらと思います。
////////////////////////////////////////////////////////
D3DXMATRIX matWorld,matView,matProj;//ワールド、ビュー、プロジェクション行列
D3DXMATRIX trans;//↑3つを掛けた行列を格納
D3DXVECTOR3 v(0.0f,0.0f,0.0f);//スクリーン変換したい座標 とりあえず適当に(0.0.0)
D3DXVECTOR4 vout;//変換後の座標を格納
//ビュートランスフォーム
D3DXVECTOR3 vEyePt( 0, 10,10 );
D3DXVECTOR3 vLookatPt( 1.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
//プロジェクショントランスフォーム
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.33333f, 1.0f, 100.0f );
//変換行列作成
D3DXMatrixTranslation(&matWorld, v.x, v.y, v.z);
D3DXMatrixIdentity(&matWorld);
D3DXMatrixMultiply(&trans,&matWorld,&matView) ;
D3DXMatrixMultiply(&trans,&trans,&matProj) ;
//変換。適当に表示
D3DXVec3Transform(&vout,&v,&trans);
static char str[256];
sprintf(str,"%.02f,%.02f",vout.x,vout.y);
CFont::Print(str,0,0,0xff009900);
>>425 for (i = 0; i < 100; i++) if (p[i] == 0) printf ("p[%d] = 0\n", i);
これで1行だけど、入力・処理・出力を分けてないから気持ち悪いというわけだ
いまさらだけど
>>475 ビュウポート行列を掛けないとスクリーン座標は求まらんと思うが?
478 :
468 :04/10/18 02:36:57
>>477 プロジェクショントランスフォームってのはパースつけるとこまでで、
その後更にビューポート座標に投影する変換が必要ってことでしょうか?
漏れもやったことがなかったのでためしにやってみた ちといじってみた D3DXVECTOR3 v(10.0f,0.0f,0.0f);//スクリーン変換したい座標 //ビュートランスフォーム D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-10.0f ); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); //プロジェクショントランスフォーム D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/2, 1.0f, 1.0f, 100.0f ); カメラ位置が( 0.0f, 0.0f,10.0f )で( 0.0f, 0.0f, 0.0f )を向いてアスペクト比を1.0にしてみた あと視野角45度 スクリーン変換したい座標を(10.0f,0.0f,0.0f)にすれば結果が(1.0,0.0)(右端で高さは中心)になることが予想される float destX = (vout.x / vout.w); float destY = (vout.y / vout.w); で見事予想した値が得られたのでこれで計算方法は間違ってないはず これにアスペクト比を含めて考慮すればいいのかな
カメラ位置が( 0.0f, 0.0f,10.0f )→カメラ位置が( 0.0f, 0.0f,-10.0f ) です
>>480 わざわざすいません。
D3DXVec3Projectっていう関数を発見したんですが、
これで一発で出せたみたいです。
でも479で説明してもらった事があんまりハッキリ理解できてないので
後で困りそうですが・・・もうちっと勉強します。
なにしろありがとうございました。
482 :
デフォルトの名無しさん :04/10/19 13:28:03
DirectXってリフレッシュレートの変更ができない環境のほうが多いと聞いたのですが 自分が持っていない環境のできる/できないはどうやって調べたらいいですか? それを調べる関数やプログラム、まとめサイト、メーカー資料などありましたら教えてください
リフレッシュレートを変えたがる奴は、ビデオカードが変更可能でも、 ディスプレイ側で表示不能だったらどうするつもりなんだろう? ディスプレイにノーシグナル警告を表示させる嫌がらせソフトでも作りたいのだろうか?
DX9.0c October SDK を入れたのですが、101/104 キーボード+日本語 Win2K だと、 右シフト(DIK_RSHIFT)、右Ctrl(DIK_RCONTROL)、右ALT(DIK_RMENU)などが正常に検出できません…。 それぞれを押すと、0x00(未定義)、0x70(かな)、0x94(漢字)が検出されてしまいます。 自分のプログラムだけだと思ったら、SDK の DirectInput サンプルでも同じことが発生。 106/109 日本語キーボードだと問題なく検出できました。 101/104 英語キーボード使っている方、 SDK サンプルで上記キーが検出できるか実験していただけませんか? ちなみに Win32 API の GetKeyboardState では全て問題なく検出できています。 素直にこっち使ったほうがいいのかなぁ…。
485 :
デフォルトの名無しさん :04/10/20 16:37:23
D3DXIntersect関数は 判定をしたいメッシュ(Xfile読み込んだメッシュ)へのポインタを渡せば 勝手に当たり判定してくれるわけですが このメッシュはD3DXMatrixTranslationで移動させたりしたとしても 移動先の位置できちんと当たり判定を取ってくれるんでしょうか? Pickサンプルのようにマウスとの当たり判定を取ろうとしてるんですが、 どうもメッシュがワールド座標の中心(初期位置)にあるときは そこそこ取れているみたいですが(なぜだかちょっと誤差あり)、 移動させても判定位置はついていかず、中心に残ったままになってます。
当たり判定ぐらい自分で作れば?
>>485 判定する線を逆に行列変換すればいけるんじゃない?
>>487 それはやってるつもりなんですが、うまくいってないっぽいんですよねぇ。
「カメラの位置座標」と「マウスのスクリーン座標をワールド座標に変換した座標」を
結んだ直線との当たり判定を取ってます。
マウス座標をワールド座標に変換するにはD3DXVEC3Unprojectを使ってます。
でもこの関数が返してくれた値がちょっとばかり変な様子です。
が、その正当性を検証する以前に、とりあえずお聞きしたいのは、
D3DIntersect関数は判定するメッシュを
D3DXMatrixTranslationで移動させたりしていたとしても
移動先の位置できちんと当たり判定を取ってくれのでしょうか?
という事であります。これが分からないもので、
どこが間違えてて思うような結果になっていないか当たりがつけられないんです。
>>488 487さんの言っている事を理解できてないと思う。
D3DIntersectは対象のメッシュが持つ頂点座標そのままで判定する。
だから対象メッシュが別のローカル座標系に移動されているなら、当然そのままでの判定は無理。
これは判定する線も、そのローカル座標系に変換すれば簡単に解決。
具体的には対象メッシュを他の座標系に移した行列の、逆行列を使えばOK
そういうことですか。なるほど分かりました。ありがとうございます。 ちょっと試してみようと思います。
まぁようするに同じ土俵に立てと WORLD座標系で比べるのが一番簡単かと
「深度情報を参照するのは しんどー」 (深度情報を参照するのはつらいです)
ワロタ
そんなくだらないギャグ飛ばしてるから地震が起きるんだよ。
地震がギャグのせいだというその自信はどこから?
殺伐としたスレに救急車が! ┌┬┬┬┐ ―――┴┴┴┴┴―――――、 /.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ || /. ∧// ∧ ∧| || ||| || [/____(゚_//[ ].゚Д゚,,) ||___||| || ||_. * _|_| ̄ ̄ ∪|.|. |ヽ. _| | lO|o―o|O゜.|二二 東|.|京 精神病院 | | | ∈口∋ ̄_l__l⌒l_|_____|_l⌒l_|  ̄ ̄`ー' ̄ `ー' `ー' `ー'
497 :
デフォルトの名無しさん :04/10/24 20:57:44
directx8でウインドウモードで描画する際に デバイスコンテキストで文字を表示しようと思ったのですが y軸方向へ数ドットずつずれて文字が表示されて困ってます 例えば 座標(0,0)にA 座標(0,10)にB 座標(0,20)にC を表示させる場合 見た目には 座標(0,0)にA 座標(0,9)にB 座標(0,18)にC が表示されるように見えて表示位置がずれてるんですけど なんでこんな現象がおきるんでしょうか X軸に対してはずれは起こらないみたいです
DirectX8というだけでどのインタフェイスを使っているのかすら書いていないが、 Direct3Dだとすると、まずDCを扱うメソッドは存在しない。 ということはウインドウから直接DCをとっているのだろうが、 そうだとするとDirectXと全く関係ないのでスレ違い。
499 :
デフォルトの名無しさん :04/10/24 21:22:55
>>498 directx8のDirect3Dで描画したグラフィックとのずれが生じてるのでやっぱdirectxと関係があります
Direct3Dで座標(0,50)に描画したグラフィックと
DCで座標(0,50)に描いた文字列が見た目にy軸方向に少しずつずれて表示されてます
このためにグラフィックと文字の対応があやふやになって見にくいのです
まず描画したものをキャプチャーして、 それぞれどの座標を指定したのかコメントを添えて提出しろ。
501 :
デフォルトの名無しさん :04/10/24 22:05:42
502 :
501 :04/10/24 22:21:51
ウインドウの大きさを変化さすとそれに応じた割合で丸画像は拡大縮小されるけど DCで書かれた数字は同じ位置に表示されたまま変化ないんだけど それと関係あるのかな? ウインドウの横幅と縦幅の初期設定と directxの初期設定の // 横ドット幅設定 gl_d3dpp.BackBufferWidth // 縦ドット幅設定 gl_d3dpp.BackBufferHeight は全く同じにしてあるんだけどな… なんでずれるんだろう?
>>502 つまり自分でウインドウサイズに合わせて、
描画するように指定しているだけの話だろう。
自らやっていることに文句を言うのは筋違い。
505 :
501 :04/10/24 22:36:52
>>504 どこをどういじればいいのか教えてください
>>502 ウィンドウにはタイトルバーとかボーダーがあるの忘れてないか?
507 :
501 :04/10/24 22:41:30
プログラム実行後ウインドウの大きさを一切変えないでも ずれるんで困ってます
ウインドウのクライアント領域の大きさと、 デバイスサイズがずれているからだろう。 もはやDirectXの話とは無関係。 Windowsプログラミングの基礎からやり直せ。
509 :
501 :04/10/24 22:44:22
510 :
501 :04/10/24 22:46:58
>>508 どこのスレで聞けばいいんでしょうか?
もしよろしければ誘導お願いします
>>510 聞くんじゃなくて基礎からやり直せといっている。
コトバツウジマスカ?
教えてあげればいいのに
GetSystemMetrics AdjustWindowRect とか DirectX 全然関係ないですね!
システム情報を拾っても、メニューが二行になっただけで計算が崩壊するので、 普通は目的のサイズになるまで適当に繰り返すんだが、この話はスレ違いだ。
515 :
501 :04/10/24 23:24:52
>>513 AdjustWindowRect使ったらうまいこといきました
レスくださったみなさんありがとうございました
DirectX9.0cで追加された PS2.aと2.bは従来の2.0は何がどう違うんでしょうか。
開発環境 :WindowsXP :VC++6.0 :DirectX7 SDK DirectDrawで320*240*16のフルスクリーンをやってみたけど、 全体的に画面がずれてしまいます。 マウスカーソルを一番右に寄せると、実際のディスプレイの右端から2〜3cm程度の箇所で、カーソルが止まってしまいます。 自分が作ったもの以外にも、フリーで流れてるソフトで320*240のフルスクリーンでも同じ現象が見られました。 EnumDisplayModesで、対応しているディスプレイを調べてみても、ちゃんと320*240*16は対応しているみたいなんですが…。 フルスクリーン時にプリントスクリーンして、ペイントに貼り付けてみたらちゃんと320*240になってました。 試しに640*480にしたら、ちゃんと描画されてました。 320*240で画面がずれるのは、うちの環境に限った事なんでしょうか? もし、対処方があれば教えてください。
>>517 ここはDirectX初心者質問スレであって、PC初心者スレではない。
>>517 ,518
すみませんでした。ディスプレイ調節したら治りました。
俺がアホでした…。OTL
わざわざ、ありがとうございました。
アンカーミスった…OTL
>>518 ,519
ありがとうございました。
522 :
デフォルトの名無しさん :04/10/26 14:57:10
1ウィンドウ内にDirextXの画面と 通常GUI画面を同時に表示する方法が解りません。 ※ウィンドウの右半分がDirectX,左半分がWin32Dialogといった感じです 環境は Visual Studio .NET 2003 VC++7.0 Win32 & DirectX 9.0 SDK です 通常のウィンドウリソースで1ウィンドウ内に2つのダイアログを表示する場合を 簡易的に説明します(引数は判断に必要そうなのしかかいてません)
523 :
522 :04/10/26 14:57:38
hInstance < WinMain から取得 main_x = 0; main_y = 0; main_w = 400; main_h = 200; mainwindow_class = "hoge"; hMainWindow = CreateWindow(mainwindow_class,main_x, main_y, main_w, main_h, PARENT_WND_NULL, hInstance); sub0_class = "myDialog0"; sub1_class = "myDialog1"; style = WS_VISIBLE | WS_CHILD; sub0_x = 0; sub0_w = 200; sub1_x = sub0_w; sub1_w = 200; sub_y = 0; sub_h = 200; hSubWindow0 = CreateWindow(sub0_class, style, sub0_x, sub_y, sub0_w, sub_h, hMainWindow, hInstance); hSubWindow1 = CreateWindow(sub1_class, style, sub1_x, sub_y, sub1_w, sub_h, hMainWindow, hInstance); 以上のような手順でリソースを作成すると 問題なく表示されます。
524 :
522 :04/10/26 14:58:13
hInstance < WinMain から取得 main_x = 0; main_y = 0; main_w = 400; main_h = 200; mainwindow_class = "hoge"; hMainWindow = CreateWindow(mainwindow_class,main_x, main_y, main_w, main_h, PARENT_WND_NULL, hInstance); sub0_class = "myDialog0"; sub1_class = "myDialog1"; style = WS_VISIBLE | WS_CHILD; sub0_x = 0; sub0_w = 200; sub1_x = sub0_w; sub1_w = 200; sub_y = 0; sub_h = 200; hSubWindow0 = CreateWindow(sub0_class, style, sub0_x, sub_y, sub0_w, sub_h, hMainWindow, hInstance); hSubWindow1 = CreateWindow(sub1_class, style, sub1_x, sub_y, sub1_w, sub_h, hMainWindow, hInstance); 以上のような手順でリソースを作成すると 問題なく表示されます。
525 :
522 :04/10/26 14:59:13
はう・・・523と5242重投稿になってしまいました;;すいません
526 :
522 :04/10/26 14:59:48
ここで DirextX の画面を hSubWindow0 に割り当てようと思い IDirect3D9::CreateDevice のhFocusWindow引数に hSubWindow0 を渡そうと考えたのですが MSDN には hFocusWindow [in] この MicrosoftR Direct3DR デバイスでフォーカスを設定するウィンドウ ハンドル。 指定するウィンドウは、フルスクリーンの最上位ウィンドウでなければならない。 と書いてあって困ってしまいました。 最上位とは HWND_DESKTOP 意外許されないのでしょうか? *単一ウィンドウにDirectXをわりあてる時はHWND_DESKTOPを使用していました ためしに, hFocusWindow に hSubWindow0 を渡してみました。 しかしD3D_OK を返すのですがだめでした。 DirectXに割り当てた hSubWindow0 は画面が更新されない状態で何も表示されていない状態になっていました。 DirectXのプログラム部分は画面を黒く塗りつぶす単純なものだけを入れて確認しました。 単一ウィンドウの場合は不具合なく動くのですが・・
527 :
522 :04/10/26 15:00:39
どうすれば解決できるのでしょうか・・? フリーの3Dモデルビューワーなどでは結構やっているのをみるので、可能だとは思うのですが・・・ よろしくお願いします。
デバイスを作るときはトップフレーム、 描画するときはサブウインドウを指定すればいいだけ。
>>527 っ[ IDirect3DDevice9::Present ]
530 :
デフォルトの名無しさん :04/10/26 20:29:47
ボクセルのデータをボリュームレンダリングするのに ボリュームフォグをつかうと高速にできたりするんでしょうか? 現在はVTKというライブラリを使っているのですが そのなかでは レイトレーシング法での表示とテクスチャをつかった擬似表示があります しかし あまりにも表示速度が遅いので(たった256*256*35のデータでも3FPS程度) DirectXのHLSLあたりをうまくつかって高速に処理できないかと考えているのですがさっぱりわかりません フォグがだめならピクセルシェーダでレイトレーシングさせたらCPUより高速にできやしないかとも考えているのですが できるんでしょうか? ご教授お願いします
>>530 GPUレイトレーシングは最近ホットな分野。
つまり、「できる」
VTKはハードウェアアクセラレーションが利用できるはずだから内部ではすでにやってたりはしないの? マシンの性能にもよるけど256*256*35って結構なピクセル数レンダリングしてるんじゃないか? とてもCPUだけで出せるパフォーマンスとは思えないけど まぁ専門じゃないんで思うだけなんだけどね そういう用途のマシンてただのPCじゃないんでしょ? 興味本位で聞くんだけど、どのくらいのスペックのマシン使ってるの?
533 :
デフォルトの名無しさん :04/10/28 10:30:16
いきなり長文でごめんなさい。よかったら下のプログラムのどこが悪いのか教えてほしいです。 ビルドはできるのですが、実行途中で”このプログラムは応答していません”てでてきて。途中 で強制終了するしかなくなるの。。。どこらへんでどんなふうにでるかいいますと実行してActive Movie Windowがでてきて5秒後くらいに出てくるの。なんでかわかんないですT_T。プログラムカキコ します。 #include "..\include\dshow.h" #include "..\include\qedit.h" #include <iostream> using namespace std; //ピンの列挙 IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir) { BOOL bFound = FALSE; IEnumPins *pEnum; IPin *pPin; pFilter->EnumPins(&pEnum); while(pEnum->Next(1, &pPin, 0) == S_OK) { PIN_DIRECTION PinDirThis; pPin->QueryDirection(&PinDirThis); if (bFound = (PinDir == PinDirThis)) // 引数で指定した方向のピンならbreak break; pPin->Release(); //pPinの解放 } pEnum->Release(); //pEnumの解放 return (bFound ? pPin : 0); }
534 :
デフォルトの名無しさん :04/10/28 10:44:41
//残り int main(int argc, char* argv[]) { CoInitialize(NULL); ------------------------------途中省略------------------------- // 3. キャプチャビルダ(キャプチャグラフやその他のカスタムフィルタグラフ)の作成 ICaptureGraphBuilder2 *pBuilder = NULL; CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&pBuilder); pBuilder->SetFiltergraph(pGraph); //ファイルファイタフィルタの設定 IBaseFilter *pMux = NULL; IFileSinkFilter *pSink = NULL; // 4. 一枚撮る // 4-1. サンプルグラバの設定 IBaseFilter *pF = NULL; //ファイルを制御するメソッド作成 ISampleGrabber *pSGrab; //フィルタグラフ内の通る個々のメディアサンプル作成 CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (LPVOID *)&pF); pF->QueryInterface(IID_ISampleGrabber, (void **)&pSGrab); // 4-2. メディアタイプの設定 AM_MEDIA_TYPE mt; ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE)); mt.majortype = MEDIATYPE_Video; // Sample Grabber の入力ピン(Capture Device の出力ピン)はUYVY mt.subtype = MEDIASUBTYPE_UYVY; mt.formattype = FORMAT_VideoInfo; pSGrab->SetMediaType(&mt); // 4-3. フィルタグラフへ追加 pGraph->AddFilter(pF, L"Grabber");
535 :
デフォルトの名無しさん :04/10/28 10:47:58
//残り2 // 4-4. サンプルグラバの接続 IPin *pSrcOut = GetPin(pSrc, PINDIR_OUTPUT); // A IPin *pSGrabIN = GetPin(pF, PINDIR_INPUT); // B IPin *pSGrabOut = GetPin(pF, PINDIR_OUTPUT); // C pGraph->Connect(pSrcOut, pSGrabIN); //ピンを他のピンと接続する pGraph->Render(pSGrabOut); // 4-5. グラバのモードを適切に設定 pSGrab->SetBufferSamples(TRUE); pSGrab->SetOneShot(FALSE); // ファイルへ pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\dvcap_tmp.avi", &pMux, &pSink); pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSrc, NULL, pMux); REFERENCE_TIME rtStart = 50000000, rtStop = 80000000; pBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSrc, &rtStart, &rtStop, 0, 0 ); // ディスプレイへ pBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrc, NULL, NULL ); HRESULT hr;
536 :
デフォルトの名無しさん :04/10/28 10:49:11
//最後 // 5. キャプチャ開始 IMediaControl *pMediaControl = NULL; pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pMediaControl->Run(); long *buffer = NULL; long bufsize = 0; // サイズ取得 do{ pSGrab->GetCurrentBuffer(&bufsize, NULL); }while(bufsize <= 0); cerr << "bufsize : " << bufsize << endl; buffer = (long *)malloc(sizeof(char)*bufsize); if(buffer==NULL){ cerr << "can't allocate memory\n"; return 1; } // 一枚キャプチャ MessageBox(NULL, "Click to capture & stop.", "DirectShow", MB_OK); // バッファ取得 hr = pSGrab->GetCurrentBuffer(&bufsize, buffer); if(hr==S_OK){ cerr << "Capture Succeeded\n"; } -------------Release省略 長すぎてごめんなさい。よろしければ情報お願いします。初心者なんで無礼かもしれませんが。。。
>>532 今使ってるはただのPCです(まだ機能の検証段階なので)
VTKにはハードアクセラレーション機能はあるのですが
専用のハードウェアを搭載しないと使えないので ふつうのPC環境ではうごきません(ハード処理でもカクカクらしいです)
ボリュームレンダリングは基本的にレイトレーシングという光の進路を追跡して ボクセルデータを平面に映しこむ処理をするのですが
これは3Dグラフィックスの機能をなんら使用していないので CPUのみの力に頼ります
最近のGPUは非常に高速なのでGPUに処理をさせた場合どのくらいの結果が得られるのか
ゲーム技術を応用して 擬似的に高速な表示方法はないのかを考えているところです
なにぶん学部4年でCGの教育をまったく受けていないものでぜんぜん解っていないのですが 努力していこうと思います
>>531 たしかにググってみるとものすごく熱くなってる分野であることが実感できました
最高レベルのGPUならそこそこのスピードが期待できそうなのでがんばって勉強していきたいと思います
DirectInputに関して質問なのですが、パッドを入力装置として使用するにはどうすればいいのでしょうか? SDKを読んでInputオブジェクトを作り、次にInputデバイスの生成まで理解できたのですが、 それから一向に分からないので教えてください。 よういされているゲームパッド用のクラスを宣言すればいいのでしょうか? それとゲームパッドから入力された情報はどのような形式でどこに格納されるのでしょうか?
>>539 まずはキーボードかマウスの入力やってみたら?
ワンショットでいいなら pSGrab->SetOneShot(FALSE); は 引数がTRUEじゃね?
質問スレは公開デバッグセンターではない
545 :
デフォルトの名無しさん :04/10/29 12:02:19
539です マウスやキーボードはマニュアルに書いてある通りやればできるのですが パッドやジョイスティックになると理解できなくなるんです。 パッド等の入力装置を使う場合には自分で設定したクラスを宣言しなければならないんでしょうか? それともキーボードやマウス同様にもう既に準備されてるんでしょうか?
546 :
533-536 :04/10/29 12:11:26
長文すみませんでした。デバッガ使用しましたら無限ループしてるとこ発見しました。 みなさんありがとうございました。
他にも言う事があるだろう。
>548 VC.NETだが普通にコンパイル通った
あれー?(´・ω・`) 自分とこはこうでます プロジェクト 'EGAS - Win32 Debug' 用の中間ファイルおよび出力ファイルを削除しています。 --------------------構成: EGAS - Win32 Debug-------------------- コンパイル中... Core.cpp WinInfo.cpp DXInfo.cpp Stage.cpp WinMain.cpp リンク中... d3dx9.lib(cpudetect.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です d3dx9.lib(ssefasttable.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です d3dx9.lib(d3dxmathx3d.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です d3dx9.lib(cpudetect.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です d3dx9.lib(ssefasttable.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です d3dx9.lib(d3dxmathx3d.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です EGAS.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー EGAS.exe - エラー 7、警告 0 (´・ω・`)
>>550 DirectXのVC6用のExtrasパッチを上書きしる
>>551 Extras落として上書きしたらビルドできました。
ありがとう!
553 :
梅宮辰夫 :04/10/29 19:31:51
シンボルッ シンボルッ 外部のしん〜ぼる〜ぅぅ〜
メッシュについての質問なのですが、 XファイルでFrameTransformMatrixに入っている行列は 参照したり変更したりできるんでしょうか? プログラム中でメッシュオブジェクトを作って中身を入れる サンプルというのはいくつかありますが、この行列の 扱いはどうなっているものかと。
みんなXファイルとかメッシュとか結構使ってるんだな
556 :
デフォルトの名無しさん :04/10/30 02:28:55
SDK落としたんですが、 有効なWin32アプリケーションではありません といわれてインストーラが起動しないんですが、対処方法を教えて頂けないでしょうか?
557 :
デフォルトの名無しさん :04/10/30 02:38:35
補足: 再ダウンロード、Irvineでダウンロード等やってみましたが、ダメでした。
独自形式 となると自分でモデリングソフト作るか 独自形式のコンバーター作らないといけないし 手間掛かりすぎる
>>556 プロキシ抜くとか
雑誌付録CD-ROMを探すとか
DirectXを初期化するときに、描画する領域を指定する方法を教えてください 例えばウィンドウの描画領域が640×480のときに、 DirectXで描画する領域を 始点100, 100 幅 320 高さ240 とか、三面図+透視図のように描画する領域を4つにして ウィンドウの画面全体にDirectXで描画する領域を4つにする みたいなことがやりたいんです。
561 :
デフォルトの名無しさん :04/10/30 14:11:28
DirectX8で点や線を描くにはどういう命令を使えばいいのでしょうか?
>561 typedef enum _D3DFILLMODE { D3DFILL_POINT = 1, D3DFILL_WIREFRAME = 2, D3DFILL_SOLID = 3, D3DFILL_FORCE_DWORD = 0x7fffffff } D3DFILLMODE;
バイナリ実行するとき画面更新の頻度を無理やり半分とかに抑えるツールってない?
ここはクレクレ厨房が書き込んでいいスレではない。 厨房板に帰れ。
565 :
デフォルトの名無しさん :04/10/30 16:15:27
>>562 D3DFILLMODEを検索してみましたが
利用例が載ってないのでどうやってつかえばいいのかわかりません
使用例などを教えていただけないでしょうか
使い方が分からない場合は、分かるまで試行錯誤を繰り返せば、そのうち何とかなる。 プログラムはそういうものだ。
567 :
デフォルトの名無しさん :04/10/30 16:47:58
>>566 一つ例がないと取っ掛かりがないので試行錯誤しづらいです
試行錯誤しづらいということ自体を、まず試行錯誤すればいい。
569 :
デフォルトの名無しさん :04/10/30 16:58:44
DirectX8で画像の表示の仕方はたくさん載ってるのに なんで点とか線の描画法は載ってないのかな… 資料がなさすぎです
>>569 DrawPrimitiveUPあたりから始めれ
571 :
デフォルトの名無しさん :04/10/30 17:28:41
・RTS系のゲームで建物ユニットを置くときにメッシュが テクスチャと青っぽい色をブレンドしたみたいな色でレンダリングされたり ・MMO系のゲームでキャラクターとか落ちてる小物とかをマウス選択すると 発光したような感じの色でレンダリングされたり ・アクション系のゲームでダメージを喰らった時に赤っぽく色が点滅したり そんな感じで、読み込んだXfileに指定の色をブレンドしてレンダリングするには どうしたらよいでしょうか。 DX9を使っていますが、ピクセルシェーダーとかは使わずに実現したいです。
573 :
デフォルトの名無しさん :04/10/30 18:14:10
D3DPT_LINELISTはプログラムが勝手に点と点をつなげるみたいですけど 自分が意図した順番で点と点を線でつなぐにはどうしたらいいのでしょうか?
普通は指示したとおりにしか動作しないのだが、
>>573 のところでは勝手に動くのか。
AI搭載の最新環境なんだろうな。
>572 マテリアル変えればいい
576 :
デフォルトの名無しさん :04/10/30 20:25:16
>>574 >>573 の件は解決しました
頂点色が白以外だと表示したビットマップと頂点色がブレンドされてしまうんですが
ビットマップの色だけが表示されるようにするにはどうしたらいいのでしょうか?
D3DRS_COLORVERTEX てか一度ヘルプのD3DRENDERSTATETYPE 列挙型に目を通して SetRenderStateでどういったことができるのか大雑把にでもいいので把握することをお勧めする もしかしたらライティングもいじらないといけないかも
おまえらゲームが完成するまで付き合わされるぞw
付き合わされても結局完成しないに首ちょん一つ。
>578 まぁ初心者質問スレだからいいんじゃね? とはいえ漏れも常駐しているわけではないので、 ググルなりヘルプで検索かけるなりすることを覚えたほうがいいぞ てかスレのルールは 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 なんでよろしく > 質問するみなさん
581 :
デフォルトの名無しさん :04/10/30 20:59:20
>>577 今調べて
gl_lpD3ddev->SetRenderState(D3DRS_COLORVERTEX, FALSE);
やってみましたけどブレンドされてしまいます
582 :
デフォルトの名無しさん :04/10/30 21:04:51
テクスチャ貼り付ける場合は頂点色は白じゃないとブレンドされて変な色になるような仕様なのかな…
583 :
デフォルトの名無しさん :04/10/30 21:38:35
基本的に教える側も センセイ方に学校で懇切丁寧に[教えていただいてる]セーガクなので あまり難しいことや「習ってない」ことは答えられないので あまり期待しないように。
>>559 プロキシは入れてないんですが。
ミラーサイトみたいのないっすよね……M$じゃ。
D3DXVECTOR3構造体にXYZを入れられるみたいに HPB(or YPR)を入れる構造体ってないですか? 別に自分で作ってもいいのですが、 あれば使ったほうが便利だし統一性があってなんとなく気持ちよいので 使いたいのですが。
すまん。結局実行出来ないみたいなんで、exeを解凍して、出てきたexeを更に解凍して、 CDのファイル構成の様な物が出てきたので、そこでやっとインスコ出来ました。
ひとつ質問させてください。 DirectX9+VS.netでスプライト描画をしようとしているのですが、 先日SDKをアップデートしたところ ID3DXSprite::Drawメソッドが「7個の引数は指定できません」 というエラーが出てくるようになってしまいました アップデートする前はエラー等は全く無かったのですが・・・ pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,0,&vec2Position,0x55ffffff); こんな感じの使い方してます。 MSDNの日本語ヘルプみる限りでは引数7個なのに・・・ どなたかご教授願えませんでしょうか(´・ω・)
>>587 日本語DX9のヘルプは、アップデートしたSDKのヘルプとは違うものだろ
適合するヘルプを読め
>>588-590 ありがトン(´;ω;)
消えた二つの引数はどこで処理されるんだろう・・・
たびたびごめんなさい 今度はスプライトが表示されなくなりますた・・・ VOID DrawSprite() { pDevice->Clear( 0, NULL, D3DCLEAR_TARGET,D3DCOLOR_XRGB(100,100,100), 1.0f, 0 ); if( SUCCEEDED( pDevice->BeginScene() ) ) { RECT rect={0,0,100,100}; D3DXVECTOR3 vec3Center( 0,0,0); D3DXVECTOR3 vec3Position(0,0,0); pSprite->Draw( pTexture, &rect, &vec3Center, &vec3Position, 0xffffffff); pDevice->EndScene(); } pDevice->Present( NULL, NULL, NULL, NULL ); } pDeviceにはすでに画像のポインタははいってます。 どこでかわってしまったのでしょうか・・・。 「D3DX: ID3DXSprite::Draw called outside a Begin/End pair」 すでに両側でやってるはずなのですが・・・うーん?
D3DX: ID3DXSprite::Draw called outside a *Begin/End* pair BeginScene/EndScene じゃない。 ID3DXSpriteのメンバを良く見る。
「BeginScene/EndScene じゃない」 だと、語弊があるか…。 BeginScene/EndScene Begin/End 両方のペアが必要ってこった。
>>593 ありがとうございました・・・
Beginメソッドいれるだけでできました。
pSprite->Begin(D3DXSPRITE_ALPHABLEND);
(略)
pDevice->EndScene();
こんな感じで。
しかし、スケール情報と回転のための数値はどこへ・・・
英語のドキュメントも見るようにした方がいいよ。DrawTransformでマトリクス使ってやるようになったんで。 最初は使いにくく思うかもしれんけど、マトリクス渡すだけで良くなったので3Dと合わせて使うのに便利になった。
Summer2004なんですけど この座標系ってどうなってるんですか Drawでスプライト表示させるとき、座標を-で指定しないとちゃんと表示されないんですが
アホだ 間違ってCenterに座標設定してた ちゃんとドキュメント読んでこよ… すみません
あ、ほう。
600 :
デフォルトの名無しさん :04/10/31 22:58:09
毎フレーム呼ばれる関数(いわゆるゲームループ)から、 以下のような線の描画関数を毎フレーム数百回くらいループをまわして呼ぶと だんだん重くなって挙動がおかしくなって最悪PCが落ちるのですが、 使い方が間違っているのでしょうか?(間違ってるからそうなるんだと思いますが…) p1,p2を毎フレーム変えて線をアニメーションさせたりしたいのですが、 その場合、正しくはどんな手順で書いたら良いのか教えてください。 void DrawLine(LPDIRECT3DDEVICE9 lpd3dDev, D3DXVECTOR3 p1, D3DXVECTOR3 p2) { CUSTOMVERTEX vertices[] = { { p1.x, p1.y, p1.z, 1.0f, 0xffff0000, },// x, y, z, rhw, color { p2.x, p2.y, p2.z, 1.0f, 0xff00ff00, } }; // Create the vertex buffer. lpd3dDev->CreateVertexBuffer( 2*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ; // Now we fill the vertex buffer. VOID* pVertices; g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); lpd3dDev->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); lpd3dDev->SetFVF( D3DFVF_CUSTOMVERTEX ); lpd3dDev->DrawPrimitive( D3DPT_LINELIST, 0, 1 ); }
>>601 ありがとうございます。VBを開放したらなんとなく大丈夫っぽくなりました。
ただそれ以外の部分もこれで正しいのかどうか自信がないのですが、
毎フレームごとにVB作って開放してって言うのを繰り返してよいのでしょうか?
もちろんハード性能にもよると思うのですが、
たった1000本ほどライン描画するだけでFPSが半分くらいになります。
そういうものって思ってよいのでしょうか。
その関数を1フレームに1000回読んでるなら、1回で1000本分のバーテクスバッファ作って1回で表示するように。 そうしてるならスペック不足かなんかじゃないかな。リリースビルドにしてみたら?
>>602 基本的に作りがマズイ。
毎フレーム頂点バッファを作成したり、
1000回もLock()、DrawPrimitive()を呼んだりしてはいけない。
>>602 の修正するべき点は、
・初期化の段階でライン1000本分の頂点を格納できる頂点バッファを作る。
・1フレームでロックするのは1回だけにする。 (ライン描画時)
・ロック後はすばやく頂点座標を書き換えてアンロックする。
・1フレームでDrawPrimitiveを呼ぶのは1回だけにする。 (ライン描画時)
・それでも動作が遅い場合は頂点バッファを動的メモリ(AGP)に配置してみる。
早い話が1000本まとめて描画しろってこと。(
>>603 と同じ)
Create系、Lock系、DrawPrimitive系の処理は重いので
呼び出し回数を極力減らすようにすること。
605 :
デフォルトの名無しさん :04/11/01 13:43:21
DrawPrimitiveUPのD3DPT_LINELISTでライン描いたら指定した色じゃなくて他の色が描かれたんですけどなんでですか? そのラインは平行移動できるようにしてあるので他の点に接触したときにに点の色に影響受けて色が変化します 点に接していないときは勝手に消えて点に接触すると現れます
>>605 ディスプレイ上の1ドットとバックバッファ上の1ピクセルが
1:1になってないような場合必然的にそうなると思われます
赤赤青赤赤 を4ドットで表現しなくてはならない場合
赤紫紫赤 になる という事と同じかと
Xファイルのデータの構造みたいなのってどこかに載ってないんでしょうか?
>607 >1 >3.SDKを見ても、Googleで検索しても、いまいち理解できない人 へるp
609 :
デフォルトの名無しさん :04/11/01 18:15:49
>>606 お返事ありがとうございます
どうすれば1:1に対応さすことができるのでしょうか?
危ないからさすなよ。
ひょっとしてあれか ちょっと前のあれと同じオチか…
失礼しました。あの行列はメッシュオブジェクトとは別のものでした。 電波の缶詰さんのとこのサンプルでも、FrameTransformMatrixは 独立して扱っていました。 というわけで自己解決いたしました。
613 :
デフォルトの名無しさん :04/11/02 05:40:11
フルスクリーンモードかどうかはどうやって判別するのですか? タスク切り替えで勝手にウィンドウモードになって困ります。
>>613 デバイスロストしたときの復帰方法が適当すぎるだけだと思われ
コピペじゃなくてちゃんと理解して書きましょう
615 :
デフォルトの名無しさん :04/11/03 02:21:57
質問のしかたが合ってるかどうか・・・ 256色の全画面モードでパレットをいじっているのですが、 IDirectDrawPalette_SetEntriesとかってチップによっては処理が遅くなりますか? Matrox > S3 になってるのですが。
>>613 >タスク切り替えで勝手にウィンドウモード
ってのは、正常な動作じゃないの?
まぁ俺が質問の意図をよく理解してないのかもしれないが…。
DirectXにはGDIにあるような円を描画する機能は無いのでしょうか?
>>618 2DならバックバッファにGetDCしてそのデバイスコンテキストでGDI関数を使う。
3Dだと線で描く必要があったかと。
山岡さん!ケリー候補を慰める料理を考えて!
誤爆スマソ
>>617 あっ、そうなのですか。
では他のタスクがアクティブになってフルスクリーンモードが解除された後、
ゲームがアクティブになってもフルスクリーンになってくれないのは仕様なのでしょうか?
ウィンドウモードで最大化されて表示されてしまって良くないと思います。
では、フルスクリーンモードが解除された事はどうやって知ることができるのでそうか?
>>623 ゲームがアクティブに戻ればまたフルスクリーンに戻るはずだけど…?
ウィンドウかフルスクリーンかは
D3DPRESENT_PARAMETERS の Windowed メンバで決まると
思うんだが、別にいじってないの?
あ、デバイスロスト時にしっかりReset処理してればの話だけど。
626 :
デフォルトの名無しさん :04/11/04 01:47:45
DirectX9 2003Summer + VC6.0を利用しています. 正五角形の表示させようとしています. ////////////////////////////// D3DXCreateMeshFVF(3,// 面の数 5,// 頂点の数 D3DXMESH_MANAGED, FVFst, device, &m_pMesh); // 頂点を設定 struct VERTEX *pVertex; m_pMesh->GetVertexBuffer(&m_pVB); m_pVB->Lock(0, 0, (void **)&pVertex, 0); int i = 0; pVertex[0].p = D3DXVECTOR3( 1.0f, 0.0f, 0.0f ); pVertex[1].p = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); for(i = 2; i < 5; i++) { pVertex[i].p = D3DXVECTOR3( cosf(D3DXToRadian(108 * (i - 1))) * pow(-1, i) + pVertex[i - 1].p.x, sinf(D3DXToRadian(108 * (i - 1))) * pow(-1, i) + pVertex[i - 1].p.z, 0.0f); } // インデックスバッファを設定 DWORD *pIndex; m_pMesh->GetIndexBuffer(&m_pIB); m_pIB->Lock(0, 0, (void **)&pIndex, 0); pIndex[i++] = 4; pIndex[i++] = 3; pIndex[i++] = 0; pIndex[i++] = 3; pIndex[i++] = 2; pIndex[i++] = 0; pIndex[i++] = 2; pIndex[i++] = 1; pIndex[i++] = 0; m_pIB->Unlock(); D3DXComputeNormals(m_pMesh, NULL); // 法線ベクトル ///////////// 改行が多いので2度に分けます
627 :
626 :04/11/04 01:48:25
インデックスをDWORDで扱ってるからそうなる。
× : DWORD *pIndex;
○ : WORD *pIndex;
>>628 のインデックスバッファの中身は実際にはこうなってるはずだ
4,0,3,0,0,0,3,0,2,0,0,0,2,0,1,0,0,0
3頂点ずつ(面)で分割すると
[4.0.3], [0.0,0], [3.0.2], [0.0.0], [2.0.1], [0,0,0]
面の数を5以上にしてやっと全ての面が描かれている
[4.0.3], [3.0.2], [2.0.1]
↑のアンカーは
>>626 の間違いです・・・ orz =3
WORDに変更しても、カリングがでデフォルトのCCWのままだと
何も表示されなくなるので注意。
インデックスを時計回りで指定するか、
もしくはD3DCULLMODEをCW or NONEに設定する必要がある。
DirectX9.0c Direct3D のサンプルの CustomUI って、 windows2000だとうまく動かないんですか? 付属のバイナリも文字化けするし、自分でビルドしてもダメポ。
上げ忘れ。 環境は win2000 DirectX9.0c GF4Ti4200 アスロンXP VC6sp6 です。 .NETも新しいの入ってるし・・・。 XPじゃないとだめなんですかねぇ・・・。 サンプルソースながめるとしますか・・・。
632 :
630 :04/11/04 07:36:01
いつもの癖で、ついまたさげてしまった・・・。orz 連投すいません。
void InitApp()内にて、 g_SampleUI.SetFont( 3, L"MS ゴシック", 16, FW_NORMAL );と、フォント追加して、 pIMEEdit->GetElement( 0 )->iFont = 3; pIMEEdit->GetElement( 1 )->iFont = 3; pIMEEdit->GetElement( 9 )->iFont = 3; と、設定することで、できました・・・。 なんだか、どろくさいなぁ・・・ もっとスマートにできないもんでしょうか?
634 :
デフォルトの名無しさん :04/11/04 21:32:06
GDIというと欠陥エンジンが思い浮かんでしょうがないのですが。
>>624-625 DirectDrawCreate(nil, DD, nil);
DD.SetCooperativeLevel(Handle, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN);
DD.SetDisplayMode(Width, Height, BitCount);
でディスプレイモードを変えているだけなのですが、
どうすれば復帰してくれますか?
>>628 さん
WORD *pIndex; に直し表示できるようになりました!
ありがとうございます.
>>635 EXCLUSIVE と DDSCL_FULLSCREEN
はorじゃなく、必ず一緒に(and)するんじゃなかったっけ。
DD.SetCooperativeLevel(Handle, EXCLUSIVE | DDSCL_FULLSCREEN);
俺はDirectDraw7使ってるせいか、初めて見る記述なんであまり自信ないが。
>>637 この場合は Bit毎の or なので、C言語の | と同じ意味です。
Cのand は & だったはず…。
>>637 "|" は "or" の意味ですよ。
DirectDraw7を使ってるせいじゃなくて、使ってない言語記述では?
641 :
デフォルトの名無しさん :04/11/05 04:24:55
DirectSex!
でも意味的には andなんだよね これだからマイクロソフトは
べつにMSが悪いわけではないだろ。
意味的にもANDじゃねー ゲイツも関係ねー 基礎からやり直せと
>>642 の言ってるandは
「〜且つ」の意味ではなくて、日本語的な「〜と」のことを言っているのではなかろうか。
どっちにしても
>>642 はあまりプログラマっぽくないね。
英語の A or B → A または B と区別がついてないんじゃないんかと
それぐらいわかってるよ
>>645 の言うように
これとこれっていう形だからandだろっていう意味
ビット単位のフラグまとめて一つにして渡す
てのは当たり前なんですか
フルスクリーンなら排他的に決まってるだろ と言いたいのでは?
排他のときには正露丸を歯に詰めるそうですが なんか意味があるんですか。
痛みが一時的に治まる。 が、痛みのない間にますます虫歯が酷くなるのでやめておいたほうがいい。 バファリンとかもだ。 とっとと歯医者に行こう。
>650 ぱっと見て何を言ってるかわからんかったが 歯痛的論理和ねw
DirectX7の日本語マニュアルはもう手に入らないのでしょうか? マイクロソフトのサイトにも8までしかないようなんですが・・・ どこか公開しているサイト知っていたら教えてください。
>どこか公開しているサイト知っていたら教えてください。 それはつまり無断公開しているサイトを教えろということなのか?
そうですが・・・ DirectX7時代の本いくつか持っているのでCDの中身みたんですが英語版しかないのです。
656 :
デフォルトの名無しさん :04/11/07 11:05:36
DirectXはまったくの初心者でこれから勉強しようと思っている者です。 ある装置を監視するために、現在はMedia Encoderでストリーミング配信しているのですが、 監視を自動化するためにビデオキャプチャしている動画をリアルタイムで簡単な画像認識をしたいです。 キャプチャのサンプルソフトをMedia Encoderと同時に起動すると、 デバイスが他のアプリで使われているというエラーが出るのですが どのように回避すればよいでしょうか?
>>657 一応英語は少し読めるけど日本語もほしい・・・
ウプしてくれる猛者いたらお願いします。
読みにくかったり間違った日本語訳で誤解してしまうよりは英語のまま読んだ方が理解が早いはず
661 :
デフォルトの名無しさん :04/11/07 12:54:51
わかりました。時間かかるけど英語の勉強だと思ってがんばります。
日本語版は翻訳ミスが多いからなぁ・・・
日本語になってないような日本語になってることが多いからなぁ
664 :
デフォルトの名無しさん :04/11/08 06:39:31
directinputはマウスの座標じゃなくて移動量が取得できるんですね GetCursorPos()でマウスの初期位置取得してから 初期位置にdirectinputで取得した移動量を加えて座標を求めることになるんでしょうか?
665 :
345 :04/11/08 16:35:34
gl_lpD3ddev->DrawPrimitiveUP(D3DPT_LINELIST, 2, hoge, sizeof(TLVERTX)); 実行中にこの行で .exe の 0x0044ee4c でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。 。 というエラーがでましたどうすればうまくいくのでしょうか?
くだらない質問だとは思うのですが、ご教授ください。 winmm.libはどこにあるのでしょうか。 DirectX9.0SDKをつかってます。
>>666 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib
>>667 あっありました(泣
本当にありがとうございました。
671 :
デフォルトの名無しさん :04/11/08 20:34:43
>>665 マジで言ってるのかな。
gl_lpD3ddevがNULLなんだよ。
>>671 ほんとです
どうすればエラーでなくなりますか?
インスタンスがある状態にしろ。
674 :
デフォルトの名無しさん :04/11/08 23:10:29
DirectX で Midi を演奏させれば、負荷が少なくなるのですか?
というか理解してソース書いたか? サンプル部分的にコピって動きませんってレベルな気がするのだが
DirectIntputでマウスの位置座標を求める方法を教えてください 直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すそうなので 正確なマウス座標は求められないのでしょうか? 初期値としてGetCursorPos()で求めた座標に GetMouseState()で求めた移動量を足していくことで座標を計算したのですが うまいことできなかったので困っています
>>677 Win32APIだけで瞬時に解決する問題で、
わざわざDirectInputを混ぜる理由は?
>>680 DirectInputをどうしても使ってみたいんです
>681 ワラタ てかズッコケタ
>>681 >>677 のやり方であっているはず
ソース見ないとわからんが
絶対値モードにしてるとかはないか?
というかマジなら具体的にどううまくできなかったぐらい書け
684 :
デフォルトの名無しさん :04/11/09 02:03:27
マウスとメッシュの当たり判定をし、当たった面の頂点座標を取得しようとしていますが コンパイルは通るものの立ち上げた瞬間落ちるのでどこがおかしいかご教授願えませんでしょうか。 メッシュはXファイルを読み込み、LPD3DXMESH pMesh;の形で持っていて、 D3DXIntersectでマウスとメッシュ自体との当たり判定までは成功しているので、 そのときにD3DXIntersectが返してくれた、当たった面へのインデックス(DWORD faceIndex;)を使って、 その面の頂点座標を取得しようとしています。DXは2003summerです。よろしくお願いします。 //D3DXIntersectの返した面のインデックスを使用して頂点を取り出す IDirect3DVertexBuffer9* pVB; IDirect3DIndexBuffer9* pIB; DWORD fvfSize; WORD* pIndices; BYTE* pVertices; pMesh->GetIndexBuffer(&pIB); pMesh->GetVertexBuffer(&pVB); // あたった面を形成する3つの頂点のインデックスを取得 pIB->Lock(3*sizeof(WORD)*faceIndex, 3*sizeof(WORD),(void**)&pIndices, D3DLOCK_READONLY); pVB->Lock(0, 0, (void**)&pVertices, D3DLOCK_READONLY);// 頂点バッファ取得 fvfSize = D3DXGetFVFVertexSize( pMesh->GetFVF());// 頂点フォーマット構造体のサイズを計算 // 面を形成する3つの頂点を取得 D3DVECTOR v0, v1, v2; v0 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[0] ); v1 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[1] ); v2 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[2] ); pIB->Unlock(); pVB->Unlock(); pIB->Release() ; pVB->Release();
>>683 エラーとかは出ないのですけど
絶対モードじゃないです
実際のマウスの位置と
>>677 で求めた座標の位置がずれてるのでなんでかなと思っていろいろ調べてたら
直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すと書いてあったので
GetMouseState()が実行されてない間のマウスカーソルの移動量は計算されないから
その分だけずれるのかなとかおもったりしてます
もう一度ソース見直してみます
レスありがとうございます
>684 デバッガはどの行をさしているんだ? あとGetIndexBufferとGetVertexBufferで得たpIBとpVBがNULLでないことは確認できてるのか? あとGetIndexBuffer、GetVertexBuffer、Lock、Unlock、Releaseの戻り値のチェックは?
>>686 解決しました。
なんと、常時メッシュと当たってない時も上記の処理をしていた為、
面のインデックスを受け取ってなくて落ちてました。
メッシュと交差した時だけ上記の処理を行うようにしたら
きちんと取れてました。ごめんなさい。
>687 てことは多分faceIndexに不正な値が入ってたんだろ? エラーチェックのコードを入れてたほうがいいぞ
689 :
デフォルトの名無しさん :04/11/09 11:14:10
実機用のTRIANGLESTRIPのバーテックスバッファがあるんですが、 DrowPrimitiveで表示させる場合ってやはり ニ、三個くらいのプリミティブ毎にレンダリングするしかないんでしょうか? 実際パフォーマンスの問題と、実機用のソースの変更が必要になるため 避けたいなあと思っているのですが… 普通はどうするものなんでしょうか? よかったらアドバイスお願いします。
690 :
デフォルトの名無しさん :04/11/09 11:19:01
>>689 言ってる意味がわからん。
その「実機」ってのも何を指してるのかサッパリ。
実機って何だ?
692 :
689 :04/11/09 11:47:21
実際のゲーム機です。 ゲーム機用のモデルをPCで表示させたいんす。 ハードによってはプリミティブの境目がわかる判別タグとか使って、 TRIANGLESTRIPのバッファを一回のレンダリング命令で表示できたりするんですが、 DirectXではそんなタグ使えないし、タグをとっぱらってただのTRIANGLESTRIPの バッファとして使ってます。 で、だからただのTRIANGLESTRIPのバッファなんですが、 例によってTRIANGLESTRIPのバッファって細切れなので、 ニ、三個くらいのプリミティブ毎にレンダリングになってしまい、重いと。
>>692 X箱でやったことあるが、縮退三角形を挿入して
DrawPrimitiveの回数を減らすとかじゃ駄目なの?
694 :
デフォルトの名無しさん :04/11/09 12:10:58
TRIANGLESTRIPのバッファが細切れってどういうこと? メモリ上に不連続にデータが並んでるの? うまいことストライドで処理できないかな。
>>692 変換行列・マテリアル・ステート等が同じで、
ストリップが細切れになってるだけの状況ならば、
無理やり繋げて描いた方がなんぼかマシだと思う。
インデックスバッファ未使用だと効率は良くないが・・・
>>694 > 境目がわかる判別タグ
から察するに、短いストリップが沢山あるということだと思う。
俺の勘違いかな?
ああ、もう出かける時間なので、あとは
>>694 よろしく
696 :
689 :04/11/09 12:18:46
どうもありがとうございます。縮退三角形の手法を勉強してみます。
697 :
デフォルトの名無しさん :04/11/09 12:41:16
うおっ、よろしくされたよ。 なるほどね、タグ方式だからストライドが一定にならないわけか。 細切れストリップを繋ぎ直しするにも、頂点バッファがビデオメモリにあるなら パフォーマンス激オチじゃないかな。 実際のところ、全部一括でDrawPrimitiveと、細切れDrawPrimitiveではどれくらい パフォーマンスが違うの?
何故自分で試そうとしない?
699 :
デフォルトの名無しさん :04/11/09 12:56:38
試すよ。興味あるし。でも今すぐは無理だから聞いてみたんだよね。
700 :
689 :04/11/09 13:28:49
>短いストリップが沢山あるということだと思う。 そのとおりです、すいません。言葉足らずm(__)m >どれくらいパフォーマンスが違うの? 全部一括って = 繋ぎ直し = 縮退三角形の方法ですよね? 繋ぎ直してやってみます、すまそ。 うーんどっちだろ。 実機よりもPCのが環境良いのに、細切れだと描画速度が実機の30%以下なので… 今は繋ぎ直しの方が魅力的に感じます。
>700 漏れもかなりコマ切れのSTRIP扱ったことがあるけど、全然違う なんで、こんなに重いかなと思ってデータみたらコマギレ… もちろん縮退三角形で繋いだらツルツル動きました
>700 前は繋ぎなおしのライブラリがnVideaにあった気がするけど今もあるのかな? 繋ぎなおしは非常に重いのでデータ読み込みの時にはしないほうがいいと思う コンバータ作って、データ自体を変えたほうが幸せになれる
703 :
689 :04/11/09 15:50:44
おぉーありがとうございます。 データ自体変えてしまおうか迷ってて、きつかったらコンバータ作ろうと 思っていました。参考にさせていただきます。
704 :
デフォルトの名無しさん :04/11/09 17:31:56
DirectX9はC++Builder6でも使えますか?
DirectDrawを使ってゲームを作っているのですが、 SetDisplayModeでフルスクリーンモードへ切り替えたときに、 画面がちゃんと表示されたかどうかを検出することって出来ますか? (WM_PAINTは画面が表示される前に来るようです) たとえば起動ロゴを表示する際、 完全に画面が切り替わった後で処理を始めたいと考えています。 現在は2秒ほど待つ処理を入れています。
ここ3日前ぐらいからこの世界に入り込んだ者ですが。。 SDKがいるんでマイクロ社のHPにいって一番新しいと思われるOctober 2004を落として勉強するべくサンプルを見てたんですが Direct3Dのサンプルの大体が「Switching to the reference rasterizer, a software device that implements the entire Direct3D feature set, but runs very slowly.」 と出てあとで起動するんですが激しく重いです... どうしたら普通に起動出来ますかね?('A`) あと激しく重いんだったら自分で作ればいいじゃんって思ってサンプルのcppを ビルドしてみたんですが。。文字セットがUnicodeじゃないと悪いらしく 何処の設定変えればいいのか判らないままです^^; (ビルドするときはBCC Developer 1.2.21使ってやってます…初心者に良いと思ったんで;) サンプルのcppをそのままビルドしても出来ないものなでしょうか… この2つの解決法、誰か教えて下さい('A`)
>>707 フリーのコンパイラ使うなら
Visual C++ Toolkit 2003
使ったほうがいいかもしれん。
あと、サンプル見てないからわからんけどソフトウェアエミュレーションで起動してるね・・・
CreateDeviceを検索してみ。
D3DDEVTYPE_HALに設定してないのかな??
・・・関係ないかもしれんな・・・
バカばっかり
>>708 Visual C++ Toolkit 2003ですか。
考えておきます...
ソフトウェアエミュレーション...?
多分、大丈夫かな…
よくじっくり見たら普通に動いてるのはD3DDEVTYPE_HALなんですが
重い動作してるのはREFでした('A`)
F2押してオプションっぽいところでHALに変えようとしたらREFしか...
始めから動作がスムーズなのは始めからHALになってるしオプションでREFにも変更できるんですが('A`)
なんか謎です…
October 2004よりも実はSummer 2004の方が良いってことは…ないか…。。
CreateDeviceを検索…サンプルのcppの中検索したらその文字ありましたが
普通に起動するやつと重いやつはそこは同じでした...
ヴぃでおカードを最新にすれ
あぁ。たしかに、オンボーでまだやってますたorz 有難う。
オンボードは厳しいぜ
てか、なぜにオンボード・・・
当たらし目のサンプル類はハードウェアアクセラレートなくてもソフトウェアで処理できる場合はそっちで なんとか立ち上がるようになってる。 速くならないのは使ってるPCがサポートしてないハードウェア機能を前提に作ってるからだね。 そろそろオンボードもピクセルシェーダまで対応しつつあるけど、まだ前提には作れんよなぁ。
というかDirectXの勉強するつもりなら 安いのでいいから買おうよ
717 :
デフォルトの名無しさん :04/11/10 13:55:05
DirectX9を始めて間もない者なのですが、 二次元配列を使用して円弧を作成しろという課題が出てしまったのですが、 いかんせん初心者な者でどう手をつけてよいのかわかりません。 どなたかご教授宜しくお願いします。 ちなみに、始点と終点と中心(半径r)を決めて始点と終点を結んだ扇形を作りたいです。 このとき中心から始点、中心から終点の線は表示しないで始点と終点のみを結びます。 あと、今DirectX グラフィックのチュ−トリアル4を参考に勉強させていただいてます。 宜しくお願いします。
宿題スレにGo
円弧をモデリングしてx-fileとして表示して終了。よかったね。
720 :
デフォルトの名無しさん :04/11/10 14:06:56
扇形の頂点座標計算はできるのか? バーテックスバッファを作って座標を順番にバッファにつっこんで、 DrawPrimitive。分かれば簡単だが、分かってないと途方に暮れるだろうな。
721 :
デフォルトの名無しさん :04/11/10 14:14:15
>>710 ありがとうございます。
>>720 扇形の頂点座標計算は良くわからないのですが、
教えていただけないでしょうか?
>717 開始角じゃなくて始点なの? 指定する始点、終点、中心点、半径rに関して、(始点-中心点)と(終点-中心点)かならず半径rである保障はあるの?
なんか線、正五角形、円、円弧と来てるね
724 :
デフォルトの名無しさん :04/11/10 15:11:48
>>721 DirectX以前の問題だな。sinとcosを使った円の式はわかるか?
そもそも2Dなのか3Dなのかもわからない 二次元配列を使うって書いてあるから2Dなのかとは思うが
726 :
721 :04/11/10 15:21:23
>>722 必ずしも半径rでなくてなはならいって事は無いです.
>>724 すいません数学が苦手なもので、ちょっとわかりません。
>>726 >すいません数学が苦手なもので
(;´Д`)それじゃどうしようもないじゃないか
数Iの教科書から出直しましょう
729 :
721 :04/11/10 16:04:42
>729 >すいません逆です。半径rは必ずです。 いや、だから半径が必須だから、描画する曲線はかならずしも始点、終点を通る必要はないってことでしょ? 始点をA、中心点をO、半径をrとすると ベクトルOAを正規化したベクトルをVとして 本当の始点 = V * r + O 同様に本当の終点を先に求める必要があるってことだよね?
731 :
721 :04/11/10 16:27:18
ホントに宿題なんだろうか。宿題を解くための知識が全然無いじゃないか。
733 :
721 :04/11/10 16:54:35
申し訳ないです。もう一度出直してきます。 アドバイス下さった方ありがとうございますm(__)m
734 :
デフォルトの名無しさん :04/11/10 16:56:32
sin/cosも分からないで円弧を描こうとしてたのか。。。 いやまあ、x^2 + y^2 = r^2からでも計算できるけどさ。 最近の学生ってこんなんばっかり????
んなわけねぇだろ 721がどうしようもなく無勉強なだけ
>731 じゃあ最初からそう書いてくれ はっきりいってDirectX以前の問題 スレ違い この課題をするにはあまりにも力が足りなさすぎる だいたい突然この課題が出たわけじゃないだろ? この課題につながるものをこれまでの授業でやってたはず ついていけてなかったらこれを機に復習するなり先生に聞くなりしろ 個人的にはこれくらいできないなら、必須単位じゃないなら落として、もう受けるな 必須なら学校やめてしまえ、と思う
友達にでも聞けばすむ問題のような気が・・・
OSがMEなんだけど 9bはもうダウンロードできない?
>738 DLはできるのでは? インスコはしらんけど
ダウンロードできるかどうかまで OSに決められてしまうのか… さすがME
すいません質問なのですが、DirectPlayのサンプルチュートリアルを開いて デバックで実行しようとしたのですが error LNK1104: コンパイラは、ファイル 'dplay.lib' を開くことができません。 とエラーが出て実行できません。 環境は DiextX9.0 Visual Studio.NET 2003 OS: XP ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。 いろいろ調べてみたのですができないので教えていただけないでしょうか
>>741 >>ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。
これをどういう意味で言ってるのか知らんが
設定をちゃんとしていないとか
調べが足りんとしか言えない
他のライブラリは問題ないのか?
DirectX と関係あるの
自作のコンバーターで作ったデーターをDX9・HLSLシェーダー2.0で表示しています。 データー内のサーフェス(マテリアル)ごとにできる限り最適なシェーダーを組み合わせたいのですが このままだとシェーダー数が簡単に1000個を超えてしまいそうで、メンテ不可能です。 どなたか良い方法を知りませんか?? ヘルプを読むとID3DXEffectCompilerでのリテラル指定をしての最適化が怪しいと思うのですが ID3DXEffectCompiler自体がまったく理解できませんTT
745 :
デフォルトの名無しさん :04/11/14 23:18:17
D3DXLoadMeshHierarchyFromX について詳しい解説はないのかっ! .Xファイルなんて使いたくないっつーの。どういう構造してんだこれ。
>744 大杉 本当に必要なシェーダに絞り込むべきじゃないか? もしコマンドラインでコンパイルしているなら/Dオプションでマクロが設定できる マクロとifdefを上手く使えば一つのシェーダのソースから複数のシェーダを生成できる 違うシェーダといっても部分的には他のシェーダと同じってのも多いはずだから そういったのをまとめて、違う部分をifdefを使ってわける 最終的には1000個でも管理するソースは100個くらいですむかもしれない その場合makeとかバッチファイルとか併用したほうがよさげだが あとはあんまりやりたくないがif乱用 まぁでも本当に必要なシェーダに絞り込むのが現実的ぽ
>745 電波の缶詰で前に見た気がする のぞいてみれ
748 :
デフォルトの名無しさん :04/11/14 23:23:16
>>747 あー、あれね。うん、見た。
一通りググって出たサイトは見た。
でもSDKのSkinningMeshを使い回してるだけで、情報量としてはたいして多くないんだよね。
やっぱSkinningMeshを解読するしかないのか。
>746 大変参考になります。 746さんの方法だとエフェクトとして使えるのでしょうか? もしやFXCで複数のアセンブラソースを出力して、1つのエフェクトファイルにインクルード? 辛いけどやってみますTT ifは使ってみたのですが、コンパイルすると分岐コードとして吐き出されず最悪の状態になりました。 たとえばボーンが0個とそれ以外(1〜4個)で1度だけ分岐させても、全て4個分のコードとして吐き出されました。
>>749 動的コンパイル時にD3DXMACROで分ける。
それとif文がうまくいかないのは
分嵯に使ってるフラグがリテラルじゃないからじゃないか?
>750 これまた参考になります。 やはり自分はEffectのヘルプの読み込みが不足しているみたいですね、 もっと読んで頑張ってみます。
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ページを教えてください
自前でXファイルローダを作っています。 マテリアル部分の話なのですが、Specular、Emissive、Powerはそのまま読み込めました。 詰まったのはXfile側にDWORD faceColorしかない箇所です。 これはD3DMATERIAL9::Diffuseと、D3DMATERIAL9::Ambientの 両方にfaceColor値を入れるだけで良いのでしょうか? これだとなんだか、思った以上に明るくなってしまう気がします。 (といっても元の発色が不明瞭なのでなんとも言えないのですが) かといってそれぞれを2で割ってみても暗すぎますし…どうするのが正しいのでしょうか。
なんでdiffuseとambientだけ、デフォルトのテンプレが無いんだろうな
>754 本屋にいって立ち読みしてコレいいかもって思った本がいいよ いや、マヂで 解説がわかりやすいとか読みやすいとか個人差があるから、 自分の目でたしかめるのが一番いい で最初は解説本をベースにしてやっていくと専門用語がでてきたりするから、 ネットではそういった専門用語をキーに詳しく調べていく 多分経験上これがいちばん効率がいい
I/Oの本は三冊買うまで役にたたない事に気づきませんんですた
>>756 そうなんですよ、なんだってこんな仕様に…。
昔はマテリアルのメンバにDiffuseとAmbientが無かったんですかね。
マテリアルの色は、単色一つとスペキュラパワーで十分だろがボゲェ!! By DirectX設計者
ふたりはスペキュラ
>>760 設計者さん、俺もそう思うからその単色の
セットの仕方を教えてくれインボーストリーム
( ゚Д゚)ハッ!!
RM時代から化石と化したフォーマットなど使わず、独自形式でやれ。
>>763 そうしたいのですが、この形式で何かをするとかではなくて
この形式を読めなければいけないというジョブでして。
ここまで回答が出ないとは思わなんだ_| ̄|○ <マイナー?
なぜだろうな… 一度書いた線がずーっと残るっておかしいな 1フレームごとに画面をクリアしてるのに なんで残ってるんだろう? クリアされた後は線の描画は実行されないはずなんだけどな あと、描いた線の色がまだらになったり、頂点の色は一緒だからグラデーションはかからないはずなんだけど DirectX8の線の描画はなんか不思議な現象がよく起こるな 原因と解決法を教えてください
どういうプログラムを組んでいるのかすら説明せず、ソースの提示すらしない。 他人はエスパーだという妄想でもいだいているんだろうか?
>>766 ソースはサイズが大きいので提示できないです
DirectX8で線を描くプログラムで
頂点を設定してD3DPT_LINELISTで線を引くという単純なものなんですけど
ラインで繋がれる頂点の色はすべて同じなのにラインが3等分されたようなグラデーションがつくんです
3等分された両端が頂点色で真ん中だけが他の色になるんです
ソースサイズが大きいのならそれは単純ではない。 まずはそれだけのための最小限のプログラムを作って試すこと。
769 :
デフォルトの名無しさん :04/11/16 09:54:15
>>765 どこをどう考えてもオマエのプログラムミス。
FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
どうせその程度。
自分のプログラムを100回疑ってからDirectXとドライバを疑え。
大抵、間違ってないっと思ってたところが勘違いであってると思い込んでる場合があるからな。
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 プログラムの解説ページのプログラムをいじってるので
へんないじり方はしてないのであってるとはおもうんですが
最小限にしたんだろ ならソース見せてみろよ
776 :
デフォルトの名無しさん :04/11/16 17:19:53
>>774 D3DFVF_なんとかいうとこを検索しろ。
その近くに、構造体宣言があるはず。
それらに矛盾がないか、構造体の宣言順番に問題がないか。
777 :
デフォルトの名無しさん :04/11/16 17:22:57
理解はしてないのに へんないじり方してないからあってる んなアフォな話があるか
779 :
777 :04/11/16 17:56:07
780 :
777 :04/11/16 17:58:34
パスワードは”1116"です
781 :
デフォルトの名無しさん :04/11/16 18:04:34
なんだ、SetTexture(0, 0)してないだけじゃねえか。
SetTexture(0, NULL)かな 色の違いがさっぱりわからんですが
更新してなかったorz しかし600行ってほとんどコメントなのね
784 :
777 :04/11/16 18:19:59
ていうか gl_lpD3ddev->SetVertexShader(FVF_TLVERTEX); ってなんなんだよw gl_lpD3ddev->SetFVF(FVF_TLVERTEX); の意?
あぁ、これでもいけるのか、無知すまそ。
787 :
777 :04/11/16 18:31:37
>>785 プログラム解説のHPから拝借したので詳しくわかりませんw
調べてみたところ
頂点フォーマットを定義するには
IDirect3DDevice8::SetVertexShader() メソッドを使います
図を描画するには、まずこれを用いて頂点フォーマットを決定する必要があります
HRESULT SetVertexShader(DWORD Handle);
Handle には、頂点フォーマットのフラグを指定します
この引数には、以下の定数を組み合わせて指定することができます
だそうです
>>777 DirectX8 か、はやとちりした… orz
ちなみにDirectX9の場合は SetFVF(FVF_TLVERTEX)にする必要があるよ。
質問ですけど 2Dの描画って頂点バッファつくってテクスチャ貼って表示するのが主流なんですか? スプライトで表示するのって少数派?
>789 スプライトに相当するものはもうないので、 それしか方法はない D3DXSPRITE(だっけ?)のことを言ってるんなら 内部では結局頂点にテクスチャはってる 最初は練習の意味もかねて簡易スプライトクラスみたいのを作るといいと思う 最初は指定矩形に表示して、あとで回転とか移動とか拡大縮小とか、 マルチテクスチャとかシェーダとか、少しずつ機能を増やしていけば勉強になる そのあとずっと使えるし
>>789 大抵の場合古き良きDirectDrawを使う
>>790 >>791 thx
とりあえずDrawPrimitiveに移行してみます
挫折したらSDLでもやってみるか…
793 :
デフォルトの名無しさん :04/11/16 21:46:59
>>791 スプライトは仕様がコロコロ変わりそうで実際変わってるので
DirectDrawを使うのが当分いい具合。
そういえばDirectShowのところにIDirectDrawというのがあるんですけど これを使うんですか? それとも古いバージョンのDirectXを指してるんですか?
795 :
デフォルトの名無しさん :04/11/16 22:59:59
古い方。
>794 最新のSDKにもちゃんとddraw.h入ってるから使えるだろ
(゚Д゚ ) ダイレクト ドロー・・・。 ノヽノヽ くく (゚Д゚ ) !! ノヽノヽ くく (゚Д゚ ) ノヽノヽ=3 プゥ くく 直訳すれば 「直接引き分け」 つまりは勝ち負け無し 平和 リャンメン待ちってこった
プログラムをコンパイルしたら、 g:\プログラム\sample\sample.cpp(5): fatal error C1083: include ファイルを開けません。'd3d9.h': No such file or directory と出てしまったのですが、どうすればいいのでしょうか?
ヘッダーのパスを通せ。
ヘッダーのパスって、d3d9.libとかってやつですよね? それをやったけど、エラーが出てしまうんです。 思い違いだったらすいません。
ヘッダじゃなくてlibファイルのパスを通しただけに違いない
>800 ツール→オプション→Project→VC++ディレクトリ ディレクトリを表示するプロジェクトでインクルードファイルを選びDXSDKのincludeディレクトリを追加 同様にライブラリファイルを選びDXSDKのlibでぃれくとりを追加 初心者本なり初心者向けサイトなら最初にやるべきこととしてあげられてるはず ちゃんと読みなさい あと >それをやったけど こういった他人に通じない抽象的すぎる言葉は極力避けなさい 具体的に書かないとわかりません
804 :
デフォルトの名無しさん :04/11/17 23:27:42
アホのお約束 ヘンなところは自分勝手に脳内変換解釈するのに 何でもないようなところは理解できない 例 脳内変換 ・Cでプログラムしています -> C++でプログラムしています ("C"と言うと"C++"に勝手に置き換わるバカ) 日本語読めれば理解できる流れ ・「○○ができません」 『△△しろ』 「それはやってます」 『何をやってるんだ?』 (自分で振っといて「それ」の対象を理解できないチョン)
DirectXも全然関係ないし、チョンなだけ
「DOSモード」と「リアルモード」は違うんですよ みたいな感じ
DXSDKをインストールして初めてのコンパイルでエラーした時 「ヘッダとライブラリへのパスをとーしてねーんだよ!!氏ね!!カス!!」 と表示されるウイルスきぼん
やけに親切なウィルスだなw
プログラムはC言語を今日から始めます って人でもPC使ってて >>ファイルを開けません。'd3d9.h': No such file or directory こんな如何にもDirectX関係のファイルですって名前のファイルが ありませんとか言われたら インストールか設定に問題があることぐらい察しがつくと思うのだが
いや無理だと思う
警告やエラーが英語だと無条件で読まない奴がいるからな 全然難しい英語じゃないのに
文でなくて図と認識すんだな。
おまえらは初心者じゃないみたいだし、初心者の質問にも答える気がないなら そろそろスレを移動する時期だ。
>813 質問には>800で答えてる
>>813 ここはDirectXの初心者質問スレであって
>>798 のようなVC++初心者質問スレではない
メッシュを読み込んで表示するまでは出来たんですが、 メッシュを回転して表示するにはどうすればいいんでしょうか??
行列作ってセット
>>816 ワールドトランスフォーム行列に回転行列をかける。
つまり、
ワールドトランスフォーム行列=回転行列*移動行列
とする。
「行列のできるプログラマ」
820 :
デフォルトの名無しさん :04/11/19 23:25:46
Direct3Dの行列は転置してるのが気に入らない。 なんであんな仕様に?
左手座標系が気に入らない
PS2は左足座標系だ。
823 :
デフォルトの名無しさん :04/11/20 00:35:18
華麗に822をスルー
文字表示の方法がわからないのですが・・・ D3DXCreateFontで作った後、 DrawTextを用いればよいのでしょうか?
>>820 頂点シェーダかSSEでマトリクスxベクトル書いてみれば分かる
DirectX8で1フレームごとに画面を全部書き換えたほうがいいのか 変更のある部分だけ書き換えた方がいいのか どっちがいいのでしょうか? 画面内でたくさんのキャラクターが動き回るようなことを想定しています
>827 どうせZバッファクリアしなきゃいけないから漏れなら全部消す 多分速度的に問題が発生したら、そんなところよりも他で稼げるところがあるはず どうしても60fpsキープする必要があって、ほんのあとちょっとで60fpsがキープできるのに ってことになったら試してみる
どのみちたくさんのキャラクターが動き回るなら 変更のある部分だけなんて やってられなくなると思うが
830 :
デフォルトの名無しさん :04/11/20 12:05:00
カメラが1度傾いただけでも全画面更新なのにアホな質問だな。 こんな想像力もないんじゃもうプログラマなんて辞めた方がいい。 どの道、この先何をやっても駄目。
視点移動するとは書いてないけどな
視点移動が行われない可能性を想像できなかったんだろ
D3DXSPRITE(だっけ)みたいのでも使って2Dやってるんじゃないかな
つまるところ、シェーダって何なのですか。 聞いた話では ピクセルシェーダというのは本当に点を表示するだけであり この点を表示する一連の行為自体をシェーディングと呼ぶ というのですが
他人にいちいち聞かないで、実際に使ってみること。
>834 最近は初心者本でもシェーダまで取り扱ってるから 読みながらやっていったほうが早い C++なんかに比べれば難しいものでもないし ただし、ちゃんと対応したハードウェア上でやってくれ 最低でもげふぉ5200かな
837 :
デフォルトの名無しさん :04/11/20 13:47:02
>>836 あれはゲフォと読むのかジーフォースと読むのか
どっちなのか迷ったがゲフォの方がヒット件数があまりにも多いのでゲフォでいいのかとか
思ったがやっぱりジーフォースって読むような気がするんだよね。
っていうか、セミナーとか言ってみたひとに聞きたいんだけど
外人ってGeForceのことなんて読んでた?
外人は差別用語。
839 :
デフォルトの名無しさん :04/11/20 13:52:05
>>838 じゃあ、外国の人
つーか、そんなんどうでもいいよ。
俺はジャップでも甘んじて受けるぞ。
概念を知りたいんじゃないの 最近は名前ばかりが多く取り上げられているから PixelShaderというと「キャラクターを描画すること」 しか思い浮かばないだろう 何のどういうプロセスを踏んで何を描画するのか そういう作動方式と言うかそこまで伝わってないのが現状
841 :
デフォルトの名無しさん :04/11/20 14:22:43
じゅふぉせ
>>834 シェーダってのは、各頂点・ピクセルで行われる計算
(頂点単位での法線とライトの内積計算とか、
ピクセル単位でのテクスチャと頂点カラーのブレンドとか)を
専用の言語で自分でプログラムすることだと思う。
これに対してハードウェア備え付けの計算機能を、固定機能…って言うかな。
元々はバンプマップとかのシェーディング(陰影づけ)のための
ものだったけど、今では陰影づけと関係ないこと
(頂点ブレンドとか輪郭抽出とか)にも使われるので、
"シェーダ"という単語の意味からは離れてる気がしないでもない。
(OpenGLでは頂点プログラム・フラグメントプログラムっていってた気がする。)
>840 だって素人さんに説明するの難しいんだよなー シェーダという言葉はシェーディング(陰影)からきている そこから発展して今はGPUに対する処理手順記述するものになってる 処理手順を記述することからプログラマブルシェーダといわれてる 世代が進むごとに応用の範囲が広がり多種多様な目的で使われている 代表的な例としてはスキニング(3Dモデルの変形)に使用さてることかな 本来の意味であった陰影付けとはかけ離れた使い方だな 基本的なシェーディングを実装する場合の使い方は 頂点の2D(スクリーン)への座標変換、光源計算、マルチテクスチャの重ね合わせ このうち「頂点の2Dへの座標変換、光源計算」までが頂点シェーダの役割 「光源計算(の結果の処理)、マルチテクスチャの重ね合わせ」がピクセルシェーダの役割 シェーダのバージョンが違うと何が違うかというと まぁ一番の違いは記述できる手順の量(行数)が違う 記述できる手順の量(行数)がたくさんあるほど複雑なシェーディングが記述できるということになる まぁ使える命令の種類が増えたりもするんだけどね ちょっと素人さん用に強引な説明だが、まぁそんな感じ
>>843 ほうほう。
シェーダについて少し調べた後なら、その説明はわかりやすいかも。
それにしても、プログラマブルシェーダはおもしろそうですな。
けど、バージョンごとで書き分け必要でめんどくさそうですな。
>844 こういうのは下位互換が前提だからね バージョン1.0のシェーダはバージョン2,0に対応したハードでも動く 逆はもちろん無理 これからは使用シェーダのバージョンで最低動作環境が決まってくるのかな バージョン1.0のピクセルシェーダはもう書きたくない 行数少なすぎ
素人にもわかるようにカタカナを使わずに説明してくれ。
>>845 あぁ、やっぱり1.0はつらいのか・・・かなり少なそうな気がしてたから分割するのかな?とか思ったよ。
>使用シェーダのバージョンで最低動作環境が決まってくるのかな
動作環境高くなりそうだねぇ・・・
PS2でPSのソフトが動く(厳密にはちょっと違うけども)のが上位互換 これで覚えろ DirectXやピクセルシェーダーも同じく 下位互換はレアなのだよ
バージョンがどうとかよりHLSLが使えるかどうかのほうがでかいとおもうね。
>>853 HLSL使えても
バージョン無視で何でもアセンブル通ると思ってる?
マイクロソフトの開発チームにバリバリ頑張って貰わないとなぁ
>>854 とりあえず1.1でやってるけど一通りのことはできるからね。
バンプ、環境、影、スキン、αブレンドなどやその他もろもろとかそれだけかよって感じだけど
これだって他のシェーダ同士の組み合わせとかモデリングツールからもってきたり
デザイナに足りないところを設定してもらったりしても結構面倒な作業だよ。
あと、バージョンが増えてもライトがいくつ使えるかってところだけで
他にはなんもないよ。(俺にとっては)
PS1.3では1ライトで限界だったな。 俺の中ではPS1.xは無かったことになってるよ。 こんなもんに対応する為に悩むなんて時間の無駄。
857 :
デフォルトの名無しさん :04/11/21 03:30:12
スキニング変形を加えた後のモデルに対し、「正確な」当たり判定を する必要があるのですが、これをスマートに実装する方法はあるのでしょうか。 今はまず、通常は普通に描画してしまっています。 そして当たり判定が必要なときのみ、対象のモデルのメッシュを全て自前で スキニングし、そのスキニング後の頂点座標を自前バッファに取って、それで判定してます。 「正確な」(全面に判定が必要で…)ということで、こういう泥臭い方法になってしまっています。 残念ながらこれは、判定の頻度や、対象の数が増えるにつれ、もったりしてきてしまいました。 いっそ最初から、通常描画も全てソフトウェアスキニングにしてしまおうか迷っています。 なんとかハード側がスキニングしてくれた後の頂点座標データにアクセスできないでしょうか。
>>857 それって要約すると
描画でスキニングして、なおかつ当たりが発生したら
変換前の頂点を自前でスキニングさせて、その座標で当たり取ってるって事だろ。
二重にスキニング計算してるって…
これを分ってても分ってなくとも致命的な発想の欠陥だよ(プログラマ向いてないよ)
推測でのアドバイスになるが
D3DXでしかモデルを扱えないレベルで
D3DXのモデル系の操作関数を深く知らないなら
D3DXは色々な操作をする時に足枷にしかならないと思う。
そう言う状況なら自前でオプティマイズした処理の方が良いと思うけど…
(理論的には頂点バッファでDrawしてるんだから、
D3DX使ってても頂点バッファを取得、アクセスできる筈、いっちょ調べようってならないかなぁ…)
それと、当たりの”正確な”って意味にもよるが
普通は当たり用の別な形を用意するんじゃない。
例えば人物の二の腕、腕、拳とカプセル体を仕込んでおいでスキンニングと同じ変形をかければ、
そのカプセル体との当たり判定で大体正確な当たりになると思うけど…
処理の理由でモデルと同じポリゴンじゃなきゃ駄目ってなら、素直に当たり取るしかない。
ただ全判定なんてアホな事は当然してないよね?
オクトツリーなりで空間分割してって当然だよね。
>>858 二重についてですが、今は描画時のスキニングをHLSLで任せているんです。
あくまで描画の頻度に比べてですが、当たり判定の頻度が少ないので、こういう処理にしていました。
となると二重にならず、なおかつスキニングをソフトウェア側でやらずに済む
方法があるのでしょうか?是非是非ご教授を…。
例えば描画時の処理を固定に変えてでも良いので、どこかにハード側が
スキニングしてくれた後の頂点座標が用意されていれば…。
D3DXは使って無いんです。それでもUpdateSkinnedMeshは試し、変換後のバッファを
取得してみましたが、これだと自前と大差無いどころか、融通が効かないのと初期化分駄目でした。
オクトツリーというか、モデルなのでBoundingBoxは作成しています。
> 二重にスキニング計算してるって… > これを分ってても分ってなくとも致命的な発想の欠陥だよ(プログラマ向いてないよ) オレも知りたい ここまで言い切ってるとナンカ気になる
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を求めたいです。
>>862 円はそれだと始点=終点で2点しか出来ないから無理
864 :
862 :04/11/21 12:16:12
drawCircle()drawArc()と分ける。
すごい宿題っぽい質問だ
867 :
862 :04/11/21 12:23:40
分けるとは?
869 :
デフォルトの名無しさん :04/11/21 12:30:46
とりあえずスレ違い、むしろ板違い 数学の問題 つーか数Bレベルだよw
870 :
862 :04/11/21 12:38:43
drawCircle()drawArc()ってのがわからないんですが…。
それは頭が悪いから。
873 :
862 :04/11/21 12:56:18
874 :
デフォルトの名無しさん :04/11/21 14:07:07
ゲームなどのBGMの再生に DirectX Audio って使ってますか? それともmidi関連のマルチメディアAPIなどを使っているのでしょうか。 DirectXAudio を、サンプルを見ながら何とか使ってみてはいるのですが まず再生までの手続きが複雑で気が滅入ります…w 1曲のロード時間も長く、また描画にかなりマシンパワーをとられて しまっているので、曲を再生すると相当な負荷がかかってしまいます。 この際、音質の良し悪しはあまり重要視していませんので、 この辺を軽くする設定はありますか?
出力ポートをソフトシンセ以外のところに切り替えるだけで軽くなる。 どこに切り替えるかはユーザに選ばせればいい。
ドライバの動作状況、 例えば演算器やシェーダのマネジメント状況ってDirectXで採れますか。
頂点シェーダというのは 描画の際に必須なんでしょうか? サンプルを自分のプログラムに組み込むと 失敗している関数がないのに何も表示されません (サンプルの頂点シェーダを使っても同じです)
>878 そのプログラムでシェーダをロードしている場所があれば使用しているシェーダが読み込めるようにしてください 不具合が出ても自力で解決できないようなものは組み込むべきではないと思います
>>858 氏はもう見てないんだろうか
結構切実なんで、どういうのが念頭にあったのか皮肉抜きで教えて欲しいのですが
もう他では時間稼げそうにないなり…
>>858 はきっとスキニングに使用する行列で球等の簡単な判定オブジェクトを変換して、それで判定しろって事じゃないですかね。
前半のアドバイスの意味はわからんけど。
ただ、正確な判定が欲しいなら必要な時のみソフトウェアで頂点変換するのが速いかと。
>>881 今時面レベルでの当たり判定というのは珍しくなさそうですが、
やはり「ソフトウェアで頂点変換」の部分はどこもあるんですかねぇ…
しょうがないので気が重いですが最後の手段、プログラム側で作ってた
判定オブジェクトを手動にしてもう少し頑張ってみます…お付き合いありがとうございました
883 :
デフォルトの名無しさん :04/11/22 09:53:39
884 :
デフォルトの名無しさん :04/11/22 13:23:29
LightWaveのレイアウトで、ピボットを使わずに 物体を移動させる時の事を想像して欲しいのですが、 パースビューでは(視点の位置に関わらず)、 マウスを左ボタンドラグで「上・下」に動かすと 物体が「奥・手前(Y座標は固定)」に動くし、 「左・右」に動かせば「左・右」に動きますよね。 マウスの動きを入れた2次元ベクトル(スクリーン座標)を どうやって変換したらそのような動きを再現できるでしょうか。 イメージとしてはモニターの平面を、ワールド空間のxz平面に倒すような感じで 投影(?)射影(?)すればよいと思うのですが、 どのように座標変換したらよいか教えてください。
LightWaveのことは知らないけど、つまりマウスを左右に動かせば カメラから見た左右に動くということ? じゃカメラの向きのベクトルとアップベクトルがあればカメラから見た横方向のベクトルは作れるので マウスの左右の移動量と横方向のベクトルを使って移動ベクトルを作ればいいだけでは?
UVって何スカ?紫外線スカ?
カメラの位置から注視点へのベクトルと垂直なベクトルを用意するだけでは?
888 :
デフォルトの名無しさん :04/11/22 15:52:59
>LightWaveのことは知らないけど、つまりマウスを左右に動かせば >カメラから見た左右に動くということ? そうです。そして(884では少し言葉が足らなかったかもしれません) カメラがワールド空間のXZ平面に対し平行に近い状態で マウスを上下に動かすと、物体はカメラから見て奥・手前に動き、 カメラがワールド空間のXZ平面に対し垂直に見下ろしたような状態で、 マウスを上下左右に動かすと、物体はマウスについてくるように動きます。 ワールド空間上でのY座標方向には、どんな視点の場合でも動きません。 とりあえずマウスのスクリーン座標をD3DXVec3Unprojectで 逆変換してベクトルを作ってみたんですが、これでは当然、 カメラ(視線)がワールド空間上でXZ平面に対し平行に近い場合、 マウスを上下に動かしても、物体はカメラから見た奥・手前方向にはよく動きませんでした。 (横方向には動きますが。)
ものすごく煽りたい衝動に駆られたがグッと押さえた。 俺は一つ大人になったと思う。
>>887 それだと視線が水平に近い時、奥や手前に進んでくれなそうな気が。。。
>>889 むしろヒントになるような事なら煽って欲しいんですけど。
簡単にいえばY方向への移動量をZに逃がしたいって話じゃないの? z+=y;y=0.0fでよさそうでない? 試してないけど。
>>891 すいません、何の座標系での話しでしょうか?
視点は一定ではないので、
必ずしも画面奥がワールド空間でのZ方向とは限らないのですが、
そういうことではないですか?
>892 とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って 横はカメラから視点までベクトルと(0, 1, 0)のベクトルの外積で求まるベクトル使ってしのいだら? 一番簡単な方法だし
>とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って それだと視線がワールド座標のXZ平面に大して垂直に近づくほど 動かせなくなっていくと思うのですが、、、
>894 XZ平面に垂直だろうが、水平だろうがカメラに向かって奥か手前に動くと思うんだけど? y成分を0にしたりしないよ
説明が下手でした。 どんな視点、視線の時も、左ドラグでワールド座標のXZ平面に平行に動くようにしたい、 (Yの位置は現在のままで。)ということです。
っていうかそのライトヴェーブの動きの簡易説明を画像で頼む
カメラから視点までベクトルのy成分を0にしてを正規化して特定の値を掛けて 常に一定の移動量を保てばいいだけかな?
ちなみに本当に垂直にしたらだめなので、ほぼ垂直以上にならないように気をつけること アップベクトルをきちんとしてないとジンバルロックが起きるから垂直にはできない もしアップベクトルをきちんとしているなら垂直のときにはアップベクトルが使える
やっぱりというかというか 別に難しいことじゃないじゃん
>901 初心者スレだからこれくらいはいいんじゃないの? 宿題はカンベンだけど
884は理解できたのだろうか・・・。 気になって夜しか眠れない
どうもです。たぶん理解できました。 これから試してみてまた報告に来ます。 ひとまずありがとうございました。
>903 >気になって夜しか眠れない 漏れ以外にもこのネタ使う香具師がいるのかw 一瞬、あれこんなレスしたっけ?と思ってしまったw
木になって昼間も動けない。
なんでベクトルの話が出てくるのがわからん。 マウスが縦横に動いたら、視点をオブジェの周りで縦横に旋回させるだけでは?
>904 >884のこと? 君がいってるのはカメラの操作で >884が言ってるのはオブジェクトの移動だよ
>>908 なるほど、では言い直そう。
なんでベクトルの話が出てくるのがわからん。
マウスが縦横に動いたら、オブジェをZYに移動させるだけでは?
あーむかつく。 こういうの出来ない奴って座標変換がまったくわかってねぇんだよな。 現役プリ☆グラマの俺様が指導してやる ・ワールド座標からスクリーン座標への座標の変換。 ・ワールド座標からスクリーン座標へのベクトルの変換。(言っててはずかしいぜw) ・スクリーン座標からワールド座標への座標の変換。 ・スクリーン座標からワールド座標へのベクトルの変換。(笑) ・ローカル座標からワールド座標への座標の変換。 ・ローカル座標からワールド座標へのベクトルの変換。(笑) ・ワールド座標からローカル座標への座標の変換。 ・ワールド座標からローカル座標への座標の変換。(笑) ・ローカル座標から別のローカル座標への座標の変換。 ・ローカル座標から別のローカル座標へのベクトルの変換。(笑) 面倒臭くなってきたw以下省略形でw ・ワールド座標からカメラ座標へ変換。座標・ベクトル。 ・ローカル座標からカメラ座標へ変換。座標・ベクトル。 ・カメラ座標からローカル座標へ変換。座標・ベクトル。 ・カメラ座標からワールド座標へ変換。座標・ベクトル。 っと、まあ、挙げればきりがないがこんなところか?
>>910 ワ
ワ
ス
ス
ロ
ロ
ワ
マ
ン
コ
不
ド
ウ
サ
ン
出来ない奴ってこれが全部同じものだってことがわかんないんだよね。 だからワールド→ローカル変換ができるくせに スクリーン→ワールドになっちゃうととたんにわからなくなっちゃう。 (まあ、これはちょっと違うけどDirectXで出てこなかったわけじゃないよね?) #ワールド→スクリーンの変換が出来ない奴は見捨てるしかないので自分で考えてチョw #つまり、その逆。できなきゃおじさん泣くw カメラ→ワールドも別の変換とか思っちゃうかな? ローカル→別のローカル と ローカル→カメラ なんて全く同じだよね? こんな変換とかはできるかな? どっかのローカル座標上にある物体を、 カメラ座標上にもってきてカメラ座標上でY軸上に5動かしたあとで、 またもとのローカル座標上に戻す。 こういう変換をすればカメラ座標上で上に動かしたんだから物体がどういう状態であろうと必ず上に動くよね? まあ、これは平行移動よりも回転で良く使うけど。
で、ちょっとわかりいいかもな図 とりあえず画面に描画されるまでの変換は スクリーン→カメラ→ワールド→ローカル→ローカル→ローカル・・・ ってわけだ。 でも、実際の世界の構造は必ずワールドが一番下で ワールド →ローカルA→ローカルB→ローカルC→ローカルD →ローカルE→ローカルF →ローカルG→ローカルH→ローカルI →ローカルJ→カメラ→スクリーン とかなってるんだよね。(あ、これは例ね。) あ、ちなみにこの図はワールド座標上に階層構造の物体が4つあって そのうち1つの物体にカメラがくっついてる状態ね。
これ、わかるかねぇ。 ためしにある点をローカルDの座標上からローカルFの座標上にもってくるためには ローカルD→ワールド の変換と ワールド→ローカルF の変換ができればいいよね? じゃあ、見た目どおりに動かしたいってことは一度カメラ座標上に物体をもってきて動かしてから またローカル座標上(またはワールド座標上)に戻せばいいよね? ま、例えばローカルDにその物体があったとすると ローカルD→ワールド ワールド→カメラ カメラ座標上でちょっと動かす。 カメラ→ワールド ワールド→ローカルD って動かせばおおよそなんでもできそうだよね。 じゃあ、プリグ☆ラマンはもうねるからじゃあねw え?長文がよめねぇだとぉ?死ね死ね死んじまえw
基本的な事を何得意げに語ってるんだ わかりにくいし
>>915 でもわかって無い奴多いだろ。
これができなきゃ売り物になるような3Dゲームなんか作れないのに。
それどころか初級シェーダもかけられない。
>>884 みたいなのができないなんて座標変換がわかって無い証拠だろ。
やれz軸がどうだとかy軸がどうだとか関係ねぇんだよ。
座標変換がわかってねぇんだよ。
微妙な計算なんてひとっつもでてこないよ。
なのに全然的外れなレスがあるし。ちょっと質問に答える側もレベル低くなってねぇか?
まぁ高校数学 というか三角関数わかれば分かるはずなんだけどな
皆さんこんばんは。 早速質問なのですが、よくオンラインのMMORPG等のインターフェースにある、 マウスでドラッグすると動く内部の小ウィンドウ(ステータスとかスキルとか表示してる・・・)って どんな風に実装されているんでしょうか・・・。教えてください。 現況はCreateWindowでウィンドウを作り、DirectX関連を初期化し、一応基本描画処理などが揃った状態です。 C/C++はそこそこなんですけど、DirectXはまだサンプルの理解やちょっとした派生程度のレベルなので その辺の処理は詳しくお願いいたします。
>>918 良く知らないけどそれってWin32APIのウィンドウっぽい?
ならツールウィンドウじゃねぇの?
WS_EX_TOOLWINDOW
で出来る奴。
VC6の奴だったらツールバーのおかしな奴だっけ?
(こっちはフォーカスを失ってもバーが青いまま。バグだろw)
そんなもん自分で考えられないヤツが C/C++そこそこ なんて話を漏れは信じないぞ
>>920 C/C++はそこそこでWin32はアレなんだろ。
>>918 それは自分も聞きたいですねぇ。
APIのウィンドウとか標準のコントロール貼り付けるとかでもなくて、
多分カスタムドロー使ってるだけとかでもなくて、
描画からウィンドウ管理から全部自分でやってるんですよね。。。
とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、
けど3D画面に2Dを合成するやり方が分からない。
>>922 >描画からウィンドウ管理から全部自分でやってるんですよね。。。
さらに難易度下がるんだけどw
Win32のご機嫌とるよりよっぽど楽だよ。
取っ掛かりがわかんないんですよね とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、 けど3D画面に2Dを合成するやり方が分からない。 なので、まずここからどんな感じの方法があるのか教えて欲しいのですが。 窓枠を表示する方法・・・
どうも922は自演くさいなw DirectX8以降なら、ID3DXSpriteを使うか、 TLVertexを使って窓枠とやらのテクスチャを表示すれば簡単に出来るかと。 DirectXを使った市販ゲームで、ゲーム中のメニューに コモンコントロールを使っているのはほとんど無い(SLG辺りで少しあったかな)。 Spyで覗いてみると良いよ。
ポリゴンにテクスチャ貼るのって(3D変換しないとはいえ)物凄く面倒そうなんですが そうするのがメジャーなんですかね? 裏画面で2D画像から読み込んだウィンドウのパーツを配置・組み合わせたりして ウィンドウの外観を2Dで完成させてから、それを 表画面にアルファ付きで転送、みたいなのってDXではできないんですか?
>>916 ここの回答者も>884もその程度の事は分かってるだろ。
わざわざ座標変換の話を持ち出すまでもない。
今のところレベルが低いのはお前だけだ。
>>926 > ポリゴンにテクスチャ貼るのって(3D変換しないとはいえ)物凄く面倒そうなんですが・・・
どこが面倒なのかが分からん。
> 裏画面で2D画像から読み込んだ 〜 DXではできないんですか?
出来る。
>>927 変換済みポリゴン使う場合は
FVF定義してとか手続きが面倒くさそうだし
例えばウィンドウの中にボタン一個配置するだけのために
もう一枚ポリゴン作ったりUV操作したりしなきゃならなそうで。
ならば2DRPGのマップを作るような要領で
裏画面で画像から読み込んだパーツ(タイトルバーとか、ボタンとか)を配置してウィンドウの外観を作り、
それを表に転送することができればそっちの方が簡単そうじゃないですか?
>出来る。
ぜひともその方法を教えてください。
>>928 自前でテクスチャを貼る際はUV座標で管理してるわけじゃない。
(最初からUVで管理してる奴もいるかもしれんが・・・)
使用する直前でUV座標に変換してやればいいだけだ。
細かい計算は省略するが、
FLOAT u,v;
u = 画像上の任意のX座標 / 画像の幅;
v = 画像上の任意のY座標 / 画像の高さ;
> ウィンドウの中にボタン一個配置する・・・
C++がそこそこ出来るんならクラスも作れるんだろ?
Win32のウィンドウシステムをクラスを使ってエミュレートしてみれ。
とりあえず階層構造(親子関係)と描画機能があればいいんだが、
階層構造が必要なければ描画機能だけ実装すればいい。
> 裏画面で画像から読み込んだパーツ(タイトルバーとか、ボタンとか)を配置してウィンドウの外観を作り・・・
レンダリング可能なテクスチャを用意する方法があるが、
どちらにしても板ポリを使って描くんだから余計面倒なだけだろ。
DirectDrawでも使うか?
>どちらにしても板ポリを使って描くんだから余計面倒なだけだろ。 そこが分からないんですが、 GDIのみで2DRPG作るときみたいな要領で、裏バッファに2Dビットマップを持たせて そこで画像を組み合わせたりする事は出来るけど、 それをそのままフロントバッファの3D画面に転送したり合成する事までは出来なくて 結局は変換済みポリゴンに対してテクスチャとして貼らなきゃいけない。 ってことですか?よく分からなくなってきました。 とりあえず変換済みポリゴンを表示するところから始めてみよう…
お礼も言えなきゃ、DirectXのバージョンも書かない様な奴に おまえら良く付き合いますね
>お礼も言えなきゃ いやだってまだ話し終わってないし… バージョンは9.0bであります。 バージョン関係ないような話だと思ったものでごめんなさい。 ちなみに私は918の方とは別人です。
>>924 >けど3D画面に2Dを合成するやり方が分からない。
もう、このへんでこいつ相手にしたら負けかなって思ったw
お礼はいらないが、結果報告はして欲しいな。 質問者はまず環境を書くこと。 環境がマズくてうまくいかない事もある。 DirectXスレなんだから、最低でもバージョンくらいは書いとけよ。 (技術的に)どの程度の事が出来るかも添えておけば更によし。 回答者はそれを考慮して答える。
最低限チュートリアルを全て終わらせてから出直せ。
テンプレに明記してあったのね・・・ 【 質問する香具師 】 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
D3Dのチュートリアルはやりましたが、 今回の質問内容が分かるような章はなかったような… c++でコモンコントロールを真似て 処理や動作をクラス化したりというのは何とかできそうなので、 引っかかっているのはそれをどうやってDXで描画するかという部分です。
D3DFVF_XYZRHW
>>937 チュートリアルにもろにそれぞれの座標の設定の仕方が載っているのに、
> 今回の質問内容が分かるような章はなかったような…
それはやったとは言わない。
もう一度きっちりやり直せ。
DirectXのヘルプを 一通り目を通しても別に大した時間かからないし、 こんなところでくだらない質問することもなくなるから 一度読んじゃったほうがいいよ。 もちろん細かいところは省きながら。
ヘルプ読んで理解出来るような奴なら、 こんなスレには来な・・・ うわっ何をすあwせdrftgyふじこl
一度質問内容を整理補足したいのですが、 ・変換済みポリゴンを使ってテクスチャを貼る方法は分かりますが、 ウィンドウ内の部品(ボタンなど)ごとにポリゴンを作らなきゃならないのでしょうか? ポリゴンで作るとなると、ウィンドウの大きさを変えるだけでVBロックしたり、とか そんなことをしなきゃならないのでしょうか? ・GDIのみで2DRPG作るときのような要領で、裏バッファに2Dビットマップを持たせ、 そこで画像パーツを組み合わせたりしてウィンドウの外観を作り、 それをそのまま(ポリゴンに貼ったりせずに)フロントバッファの3D画面に 転送したり合成する事はできないのでしょうか? ・もしくは裏バッファを作ってそこで画像を組み合わせたりとかは出来るけど、 単純にそれを転送して3D画面に合成する事は出来ないので 結局ポリゴンにテクスチャとして貼る事になる、ということでしょうか? ・というか皆さんはどんな風に作ってるんでしょうか?
>>引っかかっているのはそれをどうやってDXで描画するかという部分です。 それを勉強してわからなかったことを質問するんだろ?
>>942 >というか皆さんはどんな風に作ってるんでしょうか?
俺だったらモデリングツールで作ったモデルロードして終わりw
ボタンとかくっつけるの楽でしょ?アニメーションもくっつけられるし。
つーかゲームで出すモデルってのはデザイナが頻繁に変更かけるから
プログラムを実行させないとみられないもの(プログラム内で頂点を設定する等)は
できるだけつくっちゃ駄目。
>>944 ボタンやコントロールの位置・テクスチャが動的に変わる場合には
どう対応するんだ?
>>945 そのときどきで方法は変わるけど別に
設定ファイルを作ってそれを読み込んで終わり。
モデルファイルに直接データを埋め込んだこともある。
ボタンやコントロールの位置が変わるのは頭使えばなんとかなるでしょ?
パターンが少ないなら全部用意しちゃってもいいし、
法則があるならちょっと設定ファイルをつけてやるぐらいで対応できるでしょ?
悩むもんじゃない。
テクスチャが動的に変わるなんてゲームじゃしょっちゅうあることだからすでに対応済み。
動的変更に関しては、エディタなりビューアが無いと 設定ファイルの動作を見れないというわけか。 まあ、その時はその時だな。
なんでそんなにポリゴンを必要以上に忌み嫌うのかがわからない 四隅の座標指定してBitBltで貼るのと 四隅の頂点指定してDrawPrimitiveするのとなにがそんなに違うんだ 用途によって適した方を使い分ければいいだけ
違いを意識しなくてもいい関数を一つ作ればいいだけなんだけどね。 最初から用意されていれば、内部で何をやっているかすら考えずに使うくせに、 用意されていないと動作の違いについてグチグチグチグチ言い続ける。 そんな奴が何故プログラムを組むのかわけ分からん。
どうでもいいから >ウィンドウ内の部品(ボタンなど)ごとにポリゴンを作らなきゃならないのでしょうか? >・GDIのみで2DRPG作るときのような要領で、裏バッファに2Dビットマップを持たせ、 >そこで画像パーツを組み合わせたりしてウィンドウの外観を作り、 この2つがやってること同じとしか思えない漏れに誰か解説してくれ。 (後者は1パス余計なところ以外で)
後者はDirectDraw的な操作でなんとかならないかって事だろ。 毎度ポリゴン作るのが嫌だと仰っておられる。. もうね、アh
寝ている間に同じような疑問を持った方が来られたようで・・・。
918以降返信するのはこれが初めてですので。
C/C++がそこそこって言うのは他の方はどうかわかりませんよ。>回答者の皆様
>>919 回答ありがとうございます。ググってみます・・・。
たしかにツールバーと同じような働きですね。スキンをかけていることを除けば。
>>921 その通りです。Win32はまだまでして・・・。
>>925 回答ありがとうございます。そうですね、単にスプライト表示すれば3D描画座標は関係ないですね。
あとSpy++を活用してみます。
>>931 ,934
すいませんでした。当方はDirectX 9.0cと、VC++6です。
-----------------
色々な方の回答を受けて、私なりに2通りの方法を考えてみました。
1.別ウィンドウを作ってWS_EX_TOOLWINDOWを定義し、Paint系を横取りしてテクスチャを貼る。
→ググったらツールウィンドウの作り方が出てきたので、それを参考にしてみます。
2.ID3DXSpriteを使用して転送。マウスイベントで該当するウィンドウをずらす
→これだとそれぞれのウィンドウの座標位置を保持する変数が必要に思えて大変そうですが・・・。
とりあえずコード組んでみます。ありがとうございました。
>>951 そんな事書くくらいならお前が一発で納得させて質問者を黙らせるようなレスすりゃ済む話。
黙れ!小僧! 黙らせるようなレスだよ
ところで、次スレは必要なのか?
>>942 隊長!正直このスレのせいで、伝統の鬱だ氏のうスレが瀕死です
>DirectXについて、にいさま達がマターリと >技術情報交換&雑談するためのスレッド。 >初心者用相談室では扱わないような少し高度な話題も受け持つ。 鬱だ(rは趣旨としては情報交換がメインだからね 質問スレがあったほうがどっちも荒れないでいいと思う 誰も立てないなら立てます
やっぱりまだ早いのでやめますた >975あたりをゲットした人が立てるのがタイミング的によさそう >975よろしく
鬱だ(ry もたまにはageてやるか
2ヶ月前に立った鬱だスレがまだ50レス未満ってのは 昔を思い出すと確かに寂しいな
>>947 テクスチャアニメーションにしても
UVアニメーションにしてもモデリングソフトでサポートしてるからそんなことはない。
>>918 で
>DirectXはまだサンプルの理解やちょっとした派生程度のレベル
>>952 で
>当方はDirectX 9.0cと、VC++6です。
って言ってるが、サンプルって
ワザワザ自分の環境用にプロジェクトなりフレームワークなり作り直してる?
それともコード眺めてってレベル?
なんかなぁ…
X軸を中心にカメラを回転させる時 (0,0,-1)にいるとして、90度以上回転すると カメラの上下が反転してしまうので 上方ベクトルもカメラにかける行列と同じ行列をかけて回転させているのですが それでも90度以上回転させると上下が逆になってしまいます 何か考え方か上方ベクトルの認識が間違ってますでしょうか?
鉄棒で半回転すれば上下逆さまになるのは当たり前。 普通に振り向けよ。
>>965 いえ、なんというか
その上下逆さまになった状態をカメラに写したいので
上方ベクトルも回転させているのですが
逆さまに写ってくれないのです
もしかしてD3DXMatrixLookAt系でそれをやろうとしているとか? もしそうなら、致命的な勘違いをしているので、 この手の関数に頼らず自分で計算しろ。
>967 別に間違えていない 間違えてるなら具体的に何が間違えてるかちゃんと書け ろくな状況説明のない質問厨と同じレベル >966 上方ベクトルの出し方がおかしいんじゃないか? そこを見直したほうがいいと思う
969 :
デフォルトの名無しさん :04/11/23 23:22:02
こういうスレは、コーディングスタイルや 恩師からどう教わったかでケンカが始まるもの。 ガチガチの学校出、先生から懇切丁寧に教えてもらわないと プログラムひとつすらもできなかったアホはホントにケンカ好き。
と、喧嘩好きの
>>969 が自分のことを言っております。
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' の宣言を確認してください。
ログのベタハリで、スイマセン
>>963 もちろん、新規にプロジェクト作成して、一文一文を噛み砕きつつ…です。
わかんない処理は時にはググったり。
ところで
>>952 の方法1を試してみたんですが、
ウィンドウ(WS_EX_APPWINDOW)とその子ウィンドウ(WS_EX_TOOLWINDOW)の2つがあるとき、
子ウィンドウを親ウィンドウの領域内に納めたいのですが、
そういうコードなどは用意されていないんでしょうか。
親からの座標データを下に計算・・・なんですかねぇ。
WS_CHILDWINDOW
>>967 ビュー行列はD3DXMatrixLookAtLHで作っていますが
上方ベクトルが変わると正しく動かないんでしょうか?
>>968 実際のプログラムでもカメラはZ軸上にあるので
上方ベクトルは(0.1.0)にしてあって
カメラ座標にかけるX軸中心の回転行列を上方ベクトルにかけてるのですが
カメラのZ座標が0を通る瞬間にやっぱり上下反転してしまいます
余計な部分を省いたこの部分のみのプログラムにしても状況が変わらず
なので、何か勘違いしてる所があるのかなと思ったのですが
回転行列を掛ける対象が違うんだが。 何故部分的に使用して問題を引き起こそうとするのか。
>>974 視線ベクトルと上方ベクトルが一致する瞬間があるんじゃないか?
ちょっと簡単にソース書いてくれ。
>>975 書き方が悪かったです
上方ベクトル"にも"かけてるということです
もちろんカメラ座標にもかけています
>>973 子属性と定義してやればよかったんですね。ありがとうございました。
まずは上ベクトルの値がどうなってるか把握しる 定期的に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の直後にでもつっこんでデバッガでみれ
>>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 うざい。具体的なヒントなり解決法を書かないなら何もか書かないでくれていい。
上手くいかないのは勘違いしてるから上手くいってないんだから当たり前だ。
質問が流れて質問も解答もピントがずれてくる。双方にとって不幸。
うーん、すごい。いや驚いた。それはさておき。 一回のBeginScene〜EndSceneの間に、何度もD3DTS_VIEWやD3DTS_PROJECTIONを 設定してカメラを別位置にしたり透視投影と平行投影を画面に同時だししたりって いうことができるって、わかってないんじゃないかなと思った。 MFC+DirectXでプログラム覚えたヤツって融通が利かないのか?
>984 どのレスに対するレスなのかレス番を示してくれないとわからないんだが
>>985 スマソ。918あたりへのレスだった。
ステータスウィンドウをWindowsのウィンドウで描画しようとするあたりが
毒されてるなあと思ったんだよ。
ステータスウィンドウなんて、Orthoで自前で書いちゃえばいいじゃん、と
思ったワケ。で、もしかするとPerspectiveで描画したあとOrthoで描画って
いう発想に至れないんじゃないのかなって勘ぐったのさ。
質問なんですが、cppファイル内で #include <ddraw.h> DDPIXELFORMAT pixel; //インクルードした行の真下 このように書いたんですけど、 'DDPIXELFORMAT':識別名を宣言するのに、型が指定されていません。 等のDDPIXELFORMATがあたかも宣言されてないという感じのエラー がたっぷり(大袈裟)出ました。他にも同ファイル内で引数に使っている型(サーフェイス等DirectDraw関連)なども認識できないようです。 ddraw.hがインクルードされてないような振る舞い。 エラー発生場所をコメントにしたらコンパイルできました。 考えられる原因は何なんでしょうか。。。
windows.h はincludeしてるのか?
>987 パスが通っていないとか?
ディレクトリは 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 で全てです。(不要なものも入ってますが) 他にリンク、インクルードするファイルは有るんでしょうか。。。
いつも思うんだがパスを通せない人がDirectXを使いこなせるんだろうか
もしかしてDirect3Dが有ったらDirectDraw使えないという オチですか。 でも、DIRECTDRAW_VERSIONとDIRECT3D_VERSION 二つ別々にあるから大丈夫なのではないでしょうか。(小声で...)
んなわけ無い。
コンパイルさえもできないのですか?
Direct3Dが元にあってそこからDirectDrawに改良を
試みたんですが。。。
御迷惑掛けました。一からやり直します。
>>988 >>990 >>992 >>995 ありがとうございました。
立てるぞ?
1000 :
1000=999=998 :04/11/24 21:16:23
立てたぞ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。