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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
DirectXスレは既にあるってのは知っていますが、
初心者が気軽に質問できるような雰囲気じゃないのでスレをたてますた。

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



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


【 質問する香具師 】
・ どんな事で躓いているのか明確にしる。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
2デフォルトの名無しさん:04/05/17 13:20
2
3デフォルトの名無しさん:04/05/17 13:21
3
■ゲーム系なら……
DirectX総合スレ
http://pc5.2ch.net/test/read.cgi/gamedev/1083728025/
ゲームプログラミング相談室【Part6】
http://pc5.2ch.net/test/read.cgi/gamedev/1078503950/

■Delphiユーザーはこちら(QD,DelphiXなどのライブラリや非DirectXもOK)
Delphiゲームプログラミング相談室
http://pc5.2ch.net/test/read.cgi/gamedev/1006249204/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 【作れば?】
http://pc5.2ch.net/test/read.cgi/gamedev/1051110669/
5デフォルトの名無しさん:04/05/18 14:28
DirectShowでMP3再生のソフトを作ろうとしているのですが、
サンプルみてもぜんぜんわかりません。
どこか解説されているサイトとかはないでしょうか?
無能の>>1==>>5は自分の為だけにこのスレを立てた時空を越えたバカです。

このスレは放置してください。
7デフォルトの名無しさん:04/05/19 13:45
DirectXを勉強するのに良い書籍はありませんか?
Direct3Dの表示や当たり判定、物理演算などをお願いします
このスレ使わないの?
91:04/05/19 22:17
tukauyo
>>7
サンプルとかヘルプ読んどけ

>>8
使わないよ

/*******************************************
終了
*******************************************/
>>10
物理演算ないよ
そもそも何の物理演算がしたいんだよ?
目的を言わずに、とにかく計算がしたいと言っているのと同意なんだが、
それすら分からないほど無能なのか?
お前は物理演算と言いたいだけだろ?
なんでいつも高圧的なんだ?
いつも機嫌が悪いから
香具師は生理中じゃねーの?


サンプルもヘルプもたいして訳にたたねー。
それも中途半端でお粗末な物・・・
サンプルやヘルプが悪いのではなく、それを理解できない人間に問題がある。
何でも他人のせいにするのはよくない。
まずは自分が悪いことを認識するべき。
仮に「BMPを表示するだけ」でもそれに辿り着けるまでえらい苦労する。
SDKのヘルプでいけばDirectX Graphicsあたりだろうな。
プログラミングガイドを見れば、関数の使い方とかはわかるが、
そいつをどう繋げていくのかが不明だ。

仮にD3DXCreateTextureFromFileを使うとしよう。
引数は3つしかねーし、バカでもわかるように説明書かれてるわな。
だけど、それをどうやって表示させるん?
関数の説明が載ってても肝心な情報が入ってこないわな。
時間かけて調べてりゃその内わかるけどさ、そんな暇人いるかって。
ググってみてもくだらねー解説サイトしかひっかからんし。

DirectXやる香具師が少ねーのも当然だわな
>>17
VBでもやっていてください
言語の基礎が分かっていないのに、いきなり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
>>25

FAQに日本語で書いてあるところぐらいはちゃんと読もうね。
http://www.microsoft.com/japan/msdn/directx/japan/license/dx_license.asp
すみませんでした。
また、親切にURLをご提示頂きましてありがとうございました。
質問があります。
DirectShowで、カメラとマイクからの入力をキャプチャしてAVIで保存しています。
現在、圧縮なしで保存しているのですが、
どうすれば圧縮をかけられるのでしょうか?
まずは初心者と名乗るのをやめることが先決。
次からは挑戦者と名乗れ。
誤爆った。
>>29-30は先行者
32デフォルトの名無しさん:04/06/18 22:32
亀レスだけど
どうしてヘルプのチュートリアルを
何も考えずに追ってみる
とかやってみないんだろう。

これでDirectXの初期化からポリゴンの描画までいくんだけど・・・。
33デフォルトの名無しさん:04/07/04 13:27
そもそもピクセルシェーダって何ですか。
34デフォルトの名無しさん:04/07/04 21:47
ヤダヤダヤダ
DirectXなのにダイレクトに弄れないなんてヤダ
ヤダヤダヤ



 〃∩ _, ,_    /)    〃∩ _, ,_    /)      
⊂⌒( `Д´)ミ( ⌒ヽつ⊂⌒( `Д´)ミ( ⌒ヽつ
 `ヽ._つ⊂ノ⊂( ,∀、)つ.`ヽ._つ⊂ノ⊂( ,∀、)つ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|     ミ
                            |    〃 ∩  。
                            |   ⊂⌒从ヽ从゜o ザバーン
                            | 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
                            |       

>32
さらに亀レスだけど、
DirectXで出来ることを理解する前に、
自分がやりたい事だけを知ろうとしているからだろ。
36挑戦者:04/07/29 19:17
DirectXを始めようと思っている挑戦者です。

<質問>
DirectXSDKをインストールし、DirectXSDKについて解説してあるサイトを参考にパス等を設定した後、
ネット上で見つけたサンプルをコンパイルしようとしてもエラーが出てできません。
コマンドラインオプションは-Wでコンパイルしようとしました。

<エラー内容>
外部シンボル 'Direct3DCreate9' が未解決 (C:\C\DX.OBJが参照)
外部シンボル 'D3DXGetImageInfoFromFileA' が未解決 (C:\C\DX.OBJが参照)
外部シンボル 'D3DXLoadSurfaceFromFileA' が未解決 (C:\C\DX.OBJが参照)

<参考にしたサイト>
環境設定:ttp://goldfly.ld.infoseek.co.jp/program/directx/bcc90b.html
サンプル:ttp://www.geocities.jp/toru_website/sample/index.html#dxg(ここの"2Dの描画"のサンプル)

<開発環境>
BCC5.5
DirectXSDK9.0b
OS:WindowsXP(Home/SPなし)
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++ってなに?」

友人「ちんちんぷらぷら」
3936=挑戦者:04/07/29 20:03
>>37
すいません、確認したいのですがどのファイルか分かりません。
40デフォルトの名無しさん:04/07/29 20:07
>>38

なんやそれ(w
4137:04/07/29 20:08
すみません。36とは関係ないです。
4236=挑戦者:04/07/29 20:16
>>41
あ、そうだったんですか。
こちらこそすいません。
44デフォルトの名無しさん:04/07/29 23:30
>>36
この辺のライブラリがリンクされてないんでしょ?BCCのリンカは判らんので設定は自力で頑張って。
d3dx9.lib d3d9.lib d3dxof.lib dxguid.lib dxerr9.lib (dsound.lib dinput8.lib 必要ならば)
4536=挑戦者: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]
行列で計算する際は、割る必要があるから。
5048:04/07/31 03:13
ごめん、嘘ついてました。ちゃんと動いてなかった。zバッファリングがおかしくなってた。
5148:04/07/31 03:28
>>49
やっぱそうですね。ありがとう。
5249:04/07/31 05:23
>>51
できるだけ、わからない部分は調べて+αでいろいろ知識増やさないと大変だぞ?あとあと・・・
基本的なことですが
ピクソーシェーダの原理ってどういうものですか
t-potが閉鎖したっぽいんだが・・・詳細キボンヌ
>>55
54じゃないけど、おれからもサンクス。
57デフォルトの名無しさん:04/08/04 09:02
DirectXSDKsummer2004をインストールして、summer2003をアンインストールしたところ、
.NET-[新規作成]-[プロジェクト]のテンプレート選択で、
DirectXアプリケーションの項目がなくなってしまったのですが、
これを復活するにはどうすればいいのでしょうか?。。。

2004をインストールしてから2003をアンインストールしたのが悪かったのかと思い、
2004を一度アンインストールしてから、再インストールしてみましたが、ダメでした・・・。

もう容量きつくても、2003を入れっぱにしとけってことなんでしょうか・・・。
S2004には存在しない。
>>58
そうなんですか、、、。

必要になったとき、容量と折り合いつけて2003入れることにします。

情報ありがとうございました。
2004はサンプルブラウザからインストールしろって事なんだろ
ビルドしたら
「D3DXSPRITE_ALPHABLEND」
「D3DXSPRITE_SORT_TEXTURE」
が定義されていない識別子です、
というエラーが出るのですが、
なにかインクルードとか、
し忘れているのでしょうか?

>>62
d3dx9core.h
6462:04/08/09 10:58
ありがとうございます。
できました。
>>64
∀・) < エクスプローラ(インターネットじゃないほう)でF3を押すとファイルの内容を検索できるぞ。
すみませんが質問です。
http://masafumi-t.cool.ne.jp/d3d05.htm
のサイトを参考にポイントスプライトのを作ってみているんですけど、
カメラをズームさせたり、Z軸移動をさせても、テクスチャが縮小はしますが、拡大してくれません。
なにか足りない設定があるのでしょうか?
>>66
SetRenderStateのD3DRS_POINTSIZE_MAXはどうしてる?
6866:04/08/18 13:06
>>67
64.0fを指定してみましたが、効果ありませんでした・・・
6966:04/08/18 17:09
状況としては、一定のサイズ以上に拡大してくれない状態でして、
Z軸の移動は正常に行われ、カメラより手前に来ればちゃんと消えるようにはなってくれます。
が、遠近での縮小や、サイズ指定の縮小はしてくれるものの、拡大の処理がまったく行われません。
SetRenderStateのD3DRS_POINTSIZE_MAXを指定しても、改善しません。
出来ましたらアドバイスをよろしくお願いします。
orz
>>68
>状況としては、一定のサイズ以上に拡大してくれない状態でして、
その一定の「サイズ以上」ってサイズが実はD3DRS_POINTSIZE_MAXの
サイズだったりしないよな?
7166:04/08/18 18:31
>>70
ためしに1000.0fとかイタズラにでかくしても改善されませんでした。
MaxPointSize とかどうなってんのよ?
7366:04/08/18 18:55
>>72
調べてみたら、64.0fとなっていました。
これを変えるにはどうしたらいいのでしょうか・・・?
>>73
それはグラフィックボードの性能によって違うので
MaxPointSize が 64.0fならそれ以上はそのグラフィック
カードでの出力は不可能。
7566:04/08/18 19:28
>>74
グラフィックカードでは不可能ということは、ソフトウェアでエミュレーションさせれば
出切る可能性もあるということでしょうか?
あるライブラリを使用してポイントスプライトっぽいのを作ろうとしたときは
いくらでもテクスチャーを拡大出来るのですが
7673:04/08/18 19:38
>>75
ちと誤解のある書き方をしてしまったが、

D3DCREATE_HARDWARE_VERTEXPROCESSINGとか
D3DCREATE_SOFTWARE_VERTEXPROCESSING

の問題ではなくD3DDEVTYPE_HALとかD3DDEVTYPE_HALの問題なので
REFデバイスでも64.0fなんで無理。

おとなしく、自前でビルボードで代用した方がよいかも。
7773:04/08/18 19:38
すまん
>>D3DDEVTYPE_HALとかD3DDEVTYPE_HAL
ではなくD3DDEVTYPE_HALとかD3DDEVTYPE_REF
7873:04/08/18 19:39
すまん
>D3DDEVTYPE_HALとかD3DDEVTYPE_HAL
D3DDEVTYPE_HALとかD3DDEVTYPE_REFだ
7966:04/08/18 19:40
>>73
わかりました。
アドバイスありがとうございました。
ビルボードみながら奮闘してみます。
8066:04/08/18 19:43
Σ(゚Д゚;)
>>73ではなく>>74ですね
すみません
8136=挑戦者: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
8336=挑戦者:04/08/23 02:28
>>82
C++スレで聞いたほうがいいですか?
8436=挑戦者:04/08/23 17:48
>>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のような厨しか沸かない罠
8986:04/08/25 21:15
>>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で出回っているものと違いました。
ほんとにほんとにありがとうございます。
102挑戦者:04/09/07 12:19
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
>>102
DirectX8ならいいとこあるんだけどね
http://rina.jpn.ph/~rance/index.html
106デフォルトの名無しさん:04/09/07 17:29
>>104
レスありがとうございます
おかげさまで無事解決できました
ほんとうにありがとうございました
107挑戦者102:04/09/07 20:10
>>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ゲームの解説してるところ教えてください
114挑戦者102:04/09/07 22:48
いろいろ教えてくださって皆様ありがとうございました。
結局解説サイトは
ttp://www.plustarnet.com/aspil/
しか見つかりませんでしたがMSDNでも見ながら頑張ってみます。

>>113
いくつか見かけたのですがブックマークしてなかったので、
分からなくなってしまいました。すいません。
IDirect3DTexture9
ID3DXSprite

2Dしか使わないなら
ドキュメントでこの二つのメンバを見れ
簡単や一日あれば余裕
116デフォルトの名無しさん:04/09/08 13:28
APIの命令使う方がいいのかダイレクトインプット使う方がいいのか
どっちがいいのでしょうかそれぞれの短所長所を教えてください
117デフォルトの名無しさん:04/09/08 14:14
VC++.netでdirectxのウインドウモードの時に
ウインドウに文字を表示するにはどんな命令を使えばいいのですか?
118117:04/09/08 16:03
デバイスコンテキストで表示できました
あと、表示される文字のフォントサイズを小さくするにはどうすればいいのでしょうか?
119118:04/09/08 16:20
directxと関係ないので他のところで聞いてきます
120 ◆Z0vd5w812U :04/09/08 17:15
>>116
好きな方を使えばヨイ。
もしキミが学生で将来ゲームプログラマになりたいなどと考えているなら、両方使って違いを体感すべきである。
121デフォルトの名無しさん:04/09/08 22:52
>>120
趣味でゲーム作りたいなと思っています
directxでゲーム作る限りはダイレクトインプット使いたいんですけど
初期化とか色々めんどくさそうだし、どっちにしようか悩んでます
122 ◆Z0vd5w812U :04/09/08 23:30
>>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操作をするとか、そんな感じになるんでしょうか。
125124:04/09/10 14:13
>120*200の矩形範囲内に画像の大きさ&縦横比を変えずに

すいません、これはあくまで例えの大きさでして、
この矩形(ウィンドウ)はマウスドラッグとかで
随時大きさを変えられるようにしたいです。
126デフォルトの名無しさん:04/09/10 23:05:40
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デフォルトの名無しさん:04/09/11 01:15:59
129デフォルトの名無しさん:04/09/11 01:33:11
>>128
レスありがとうございます。
2004夏から変更と書かれていたので使えるのか半信半疑だけど試してみます(・ω・)
130デフォルトの名無しさん:04/09/11 01:41:14
エラーは出なくなったけど画像が表示されない罠orz
改めてありがとうございます。
131デフォルトの名無しさん:04/09/11 01:46:37
XSIのデータをコンバートするプログラムで悩んでいます。
SI_TriangleListがSI_Modelの中に複数あったりするので面倒なのです。
個人的にはSI_Modelの括りごとにデータを分けられれば楽なのですが、そういう風にするうまいやり方が思いつきません。
やはり、読み込んだデータは一行一行別々にリスト管理して、それから数値などを取り出していくやり方しかないのでしょうか?
132124:04/09/11 02:13:03
>>126
なるほど、やっぱそんな感じですか。
なんとなく見えてきました。ありがとうございました。
133デフォルトの名無しさん:04/09/11 07:51:25
directinputでマウスカーソルの座標を知るにはどうすればよいのでしょうか?
134デフォルトの名無しさん:04/09/11 10:55:47
>>133
サンプル嫁
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度。

方法が書いてあったと思われる向氏のサイトが閉鎖されてるし・・
136デフォルトの名無しさん:04/09/11 18:17:11
>>135
その行列の行を一本のベクトルと見立てて
ペイントで絵でも描いてみろ。
そうすりゃわかるだろ。
137デフォルトの名無しさん:04/09/11 18:35:46
>>136
atan2は使えないし、正確なPIが表示できないので誤差がかなりでる・・
138137:04/09/11 18:36:17
↑atn2
139デフォルトの名無しさん:04/09/11 18:40:44
140デフォルトの名無しさん:04/09/11 18:45:12
>>135
ちょっと曖昧
方位を求めたいのか、角度を求めたいのか
「何の」方位を求めたいのか、「どこの」角度を求めたいのか
141デフォルトの名無しさん:04/09/11 18:53:13
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]));
142デフォルトの名無しさん:04/09/11 20:08:09
>>140
方位ってY軸の回転ね。
てか方位で曖昧って言われたの初めて(´・ω・`)

>>141
ありがとうございます。
ちと試してみま〜
143デフォルトの名無しさん:04/09/11 20:38:16
>>142
全ての発言が、お前に3Dは無理と感じさせる。
144デフォルトの名無しさん:04/09/11 20:40:50
>>142
下を向く(X軸かZ軸が180度回転した)状態で
それでも方位をY軸回転って言うの?
145デフォルトの名無しさん:04/09/11 20:40:52
くっ、レス書いてたが教える気が萎えるなw
146デフォルトの名無しさん:04/09/11 20:54:14
無理してまで教えなくていいですよ
147デフォルトの名無しさん:04/09/11 21:28:14
>>144
釣られているのかも知れんが
相対座標以外にも絶対座標があるのですよ。
おまいは寝転がると自分から地球の中心方向が南でその逆が北になると言うのか
148デフォルトの名無しさん:04/09/11 21:36:52
>>147
あのさ、基底ってわかる?
3Dで言うと、ローカル、ワールド、ビュウって基底が違うだろ。
意識的に混同して誤魔化してる?

自分が寝転んだら、自分の絶対座標の基底は逆になるだろ。
それとも3D初心者によくある、全部ワールド座標以外理解出来ない君ですか?
149デフォルトの名無しさん:04/09/11 22:03:45
誤魔化してきたぞw
150デフォルトの名無しさん:04/09/11 22:26:32
話し終わったのかな?
>>141のを使うと
    error C3861: 'dot': 識別子は、引数依存の照合を使用しても見つかりません。
とエラーが出てきますorz
dotを使えるようにするにはなにかインクルードしないといけないのでしょうか。
151デフォルトの名無しさん:04/09/11 22:42:35
>>141
よく見ればバンク角かorz
バンク角とピッチ角は出来てます・・。
変なゴタゴタも起こってますし、とりあえず別のところから作って見ます(´・ω・`)
152デフォルトの名無しさん:04/09/11 22:44:26
float3型は通ったんだよね?

つーか内積程度は自前で計算すれば?
153147:04/09/11 22:45:04
>>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軸回転は違うわけだが。
154デフォルトの名無しさん:04/09/11 22:45:56
>>152
出来るかどうか・・・なんとか頑張ってみます。
155デフォルトの名無しさん:04/09/11 22:51:30
>>153
ローカルで横になって、ワールドで変化なしでも
ローカルで変化なしで、ワールドで横になっても

見た目は同じだが、ワールドでの姿勢制御行列は違うだろ。

156デフォルトの名無しさん:04/09/11 22:55:25
>>153
基底をわかってない。それで語り出すなよ。
人間には人間の基底があって、地球には地球の基底がある。
人間を地球の基底にもって行くのをLocalWorld変換と言うんだろ。

なんだよ…派生って…
157147:04/09/11 23:22:22
半端な知識な点について申し訳ない。
>>155
ワールドがメッシュAでローカルがメッシュBとして
メッシュAの中にメッシュBがあると考えていたけど違うか。
メッシュAが姿勢を変えたらメッシュBも姿勢が変わる。
メッシュBが姿勢を変えてもメッシュAは姿勢が変わらない。
>>156
3年前は基底クラスと派生クラスと学んでいたのでそのまま使っているが最近(cpp)は違うのか。
それとも基底の解釈の仕方が違うのかも知れんが。

考え方が色々あるみたいなので当方も頑張って勉強します。
様々なサイトや本を見ながら格ゲーを作ったけどこの考え方で作れたのは奇跡に近いのか・・・
158デフォルトの名無しさん:04/09/11 23:33:56
>>157
これ以上、醜態を晒すなよ。

一つのメッシュで、ローカル、ワールド、ビュウと変換していくんだよ。
で、それぞれの座標系で姿勢制御行列は変わるだろ。

基底クラス?それはC++の話。
回転と姿勢制御で基底ってわからないの?
>{{1,0,0},{0,0,1},{0,-1,0}}
とか自分で言ってるじゃん?

>様々なサイトや本を見ながら格ゲーを作ったけどこの考え方で作れたのは奇跡に近いのか・・・
丸写し、サンプルコピペ、D3DXライブラリ等、知識なくとも作れるよ。
作れた == 知識ある
じゃない。

自前実装でもして勉強したら。
159デフォルトの名無しさん:04/09/11 23:36:50
>>157
>3年前は
>3年前は
>3年前は

3Dの適正ない…
160デフォルトの名無しさん:04/09/11 23:50:05
>考え方が色々あるみたいなので

…なと言えばいいのかな…
貴方の捉え方、理解のしかたをもって
基本的な考えを
>考え方が色々あるみたいなので
と言ってるの?
161デフォルトの名無しさん:04/09/12 00:10:07
162147:04/09/12 00:18:46
>>158
半端な知識と書いてある通り知識があるわけでないしそもそも基底の意味が分からん。
Javaで少し出てきたけどcppでは今のところ出てきていない。
DXでの自分の考えでは
基となるのが大きなメッシュ その中に小さなメッシュ
小さなメッシュにXファイルをいれて大きなメッシュから見た座標と姿勢を指定する。(3x3の行列)
カメラも大きなメッシュの中にあってこれも同じく座標と姿勢を指定する。(Zベクトルが視点)
人などの小さなメッシュは大きなメッシュを基にして動くのでみんなバラバラに動くことができる。
大きなメッシュが動くとその中にある全ての小さなメッシュ(カメラ)も動く。
大きなメッシュが180度回転しようが大きなメッシュを基にしているので
小さなメッシュやカメラも一緒に動く・・・結果中身に何も変化なし。
つまり大きなメッシュを動かしても小さなメッシュと東西南北などの方位は変わらないのでは。

>>160
本に書いてあることがバラバラでどれが基本なのかわからない。
なので自分にとって分かりやすい考え方を自分の基本にしている。
英単語を覚えるのは基本的に何度も読み書きをするだけど
無理やりローマ字読みしたり睡眠中に流して覚えると言うものそれが自分に合ってればその人の基本かと。
基本は違えど結果は同じわけだし。
163デフォルトの名無しさん:04/09/12 00:23:30
フレームとメッシュが滅茶苦茶に混同されている。
しかもメッシュの中にXファイルっていったい…。
164デフォルトの名無しさん:04/09/12 00:29:48
>>147
お前、キモイんだよ、間違った自分の考えをダラダラと。

基底とは数学の話だよ。なんだよJavaって。
でモロに、ワールドでの話でしかないだろ、下らない例をグダグダと。

>本に書いてあることがバラバラでどれが基本なのかわからない。
>なので自分にとって分かりやすい考え方を自分の基本にしている。
数学的な物は、バラバラなわけないだろ。
で今は、モロに3Dの数学的な姿勢制御と座標系の話をグダグダ述べてんだろ、お前。

基本が同じって自前で実装してるなら通じるが
ライブラリやサンプルコピペしてるような奴は、基本が同じなど
おこがましい。
165デフォルトの名無しさん:04/09/12 00:35:50
とりあえず餅つけ
166147:04/09/12 01:29:54
>>163
ご免、素で変なこと書いてた。
大きなメッシュ→大きなフレーム(親)
小さなメッシュ→小さなフレーム(子)
>しかもメッシュの中にXファイルっていったい…。
箱の中にポリゴンを入れているイメージが載っていたのでそういう形で覚えてました。
(大きな箱を動かしたら小さな箱も一緒に動く 等)
変だろうけど勘弁してください。

>>164
数学の基底、学校で習うわけでもないし今まで必要じゃなかったので
回転と姿勢制御で基底ってわからないの?
分からないと言うよりも知らないの方が正しいです。
167デフォルトの名無しさん:04/09/12 01:54:22
>>147
何を言い分けしても、お前の3Dの基本はグダグダ。
ワールド座標系しか理解出来ない奴は、ワールド座標系でしか物事考えられんって奴だ。
基底座標の変換と、同じ基底内の回転、平行移動、スケールが混同されすぎってか
理解も出来てない。
それで、語ってりゃ世話ない。

偉大だよな、DirectXって。
こんなイカレ野郎でも3Dやってる気にさせちゃうんだから。
168デフォルトの名無しさん:04/09/12 05:56:55
モーフィングしたいのですがどうすればよいでしょうか?

モーフィングという言葉が不適切かもしれませんがメッシュAをメッシュBへ変形させたいのです
顔A、顔Bと用意しておいて顔Aから顔Bへ徐々に変形していくことで表情を変えたりしたいです
169デフォルトの名無しさん:04/09/12 16:44:19
頂点と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 での頂点宣言を使う利点って何なんでしょうか?
171170:04/09/12 23:09:59
「2Dの頂点宣言を、3Dの頂点宣言にする際に」を

>D3DFVFを使用したときには、
>float x, y, z, rhw; → float x, y, z;
>のように、float型3つになっていたので、

の前に追加願います・・・。
スレ汚しスイマセン。
172デフォルトの名無しさん:04/09/12 23:14:11
>>169
DirectXにそういう機能は無いってことですか?
173デフォルトの名無しさん:04/09/13 00:39:03
>>170
全然要領を得ない。
何言ってるの理解不能。
頂点型とD3DVERTEXELEMENT型の宣言を見せてみ?

>>172
頂点バッファの値も取得出来るし、書き換えも出来る。
だからスキニング等のアニメーションが出来るんでしょ?
まさか、D3DX系関数で関数呼べばやってくれるとかじゃないよな?
174170:04/09/13 01:01:42
>>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のポリゴンに使いたいのですが。
175デフォルトの名無しさん:04/09/13 01:24:48
>>174
別にオカシイと思える所はなさげだけど?

もしかして2Dを3Dにとか言ってるって事は、
プロジェクション変換してないとか?
176デフォルトの名無しさん:04/09/13 01:45:18
>>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の指定にした場合、
他にどのような部分を変更しなければいけないのでしょうか?
177170:04/09/13 02:02:42
スイマセン・・・、どうやら見えない位置に
しっかり表示されていました・・・orz
お手数とってしまってホント申し訳ない・・・・。
スレ汚しスイマセンでした・・・。
178デフォルトの名無しさん:04/09/15 05:48:18
MeshとPMeshってどう違うのですか?
179デフォルトの名無しさん:04/09/15 07:01:12
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とは違うのだろうか…
181デフォルトの名無しさん:04/09/15 23:57:10
182デフォルトの名無しさん:04/09/16 00:59:11
2Dスプライトの表示と移動を行うソースなんですが
エラー原因特定が掴めない。あと、ファイルのまとめ方とか
プログラムの書き方とかも自信無いのでアドバイスを頂けたら光栄なんですが。駄目元で、ソース置いときます。。。

ちなみにエラー有りそうな所はsprite.hとDXInput.hが有力で
次にDXHeader.hが有りそう。

http://sterdust.net/upload/upload.cgi?page=Download&dir=&sort=date&filename=VSHTest.zip
183182:04/09/16 18:13:54
バグとれました。(冷やし中華始めました風)
ソース見て下さった人ありがとう。(いたかどうか分かりませんが)
184デフォルトの名無しさん:04/09/19 05:55:59
SDKに付いているd3dappを使って組むのと
1から組むのどっちがいいと思いますか?

まぁたいした量じゃないけど、、、めんどくさい
185デフォルトの名無しさん:04/09/19 09:12:49
その程度を面倒くさいという理由でやろうとしない人間は、
結局何も作れないで終わるだけ。
186デフォルトの名無しさん:04/09/19 13:57:09
>185
すみません
僕が甘かったようです

ちょっと調べて思ったんですが
ネット上の情報ってなんでエフェクト処理ばかりなんだろう。。。
ゲームにはそんな重要ではないと思うが
187デフォルトの名無しさん:04/09/21 05:39:23
xファイルを読み込んでDrawSubsetで描画する、というのを
ネットで適当にサンプルを拾ってきてそれをコピペしてやってみたのですが、
なぜか所々ポリゴンが抜け落ちたようになります
(3角形の穴が開いたように、裏側というか内側?が見えたりする)
また、メッシュのx座標を変化させても抜け落ちるポリゴンは変わらないのですが、
z座標を変化させると別のポリゴンがかけたりします
こうなる原因として、何が考えられるでしょう?

バージョンはDirectX9で、開発環境はVC++.netです
188デフォルトの名無しさん:04/09/21 13:01:09
>>187
背面カリングをしない設定だとちゃんと描画されるのか?
189デフォルトの名無しさん :04/09/21 14:07:38
LINK : fatal error LNK1181: 入力ファイル "dinput8.lib" を開けません

ビルドするとこんな↑エラーが出るのですが、どうすればいいのですか?
190デフォルトの名無しさん:04/09/21 14:50:16
ここはDirectXの初心者スレだ

開発環境C/C++の初心者スレではない
191デフォルトの名無しさん:04/09/21 15:37:38
Windowsをぶっこぬくほうほうを教えてください
192デフォルトの名無しさん:04/09/21 15:48:01
どうすれば、テクスチャ上の文字列をきれいにそのまま表示できますか?
テクスチャは拡大も縮小もせず(Worldで256x256なら、Screen上でも256x256で表示)、
傾き0で表示していますが、ノイズが入ることがあります。
193デフォルトの名無しさん:04/09/21 16:13:04
スプライトって飲むとシュワシュワしますか。
194192:04/09/21 16:31:19
うーん、スプライトではなくてテクスチャで何とかしたいのですが。。。
195デフォルトの名無しさん:04/09/21 16:42:00
トランスフォーム済みで0.5ずらすだけ。
196デフォルトの名無しさん:04/09/21 18:23:14
>>180
DrawIndexedPrimitive
IDirect3DDevice9::SetIndices を繰り返し呼び出すことなく、
同じインデックス バッファで複数のプリミティブをバッチ処理できるように、
IDirect3DDevice9::DrawIndexedPrimitive が変更された。

とあるから、それぞれの意味はなんとなくわかるよね?
197187:04/09/21 20:04:46
>>188
背面カリングをしない状態でも、同じのようです

よく見ると>>187で書いたのと少し違うようで(スイマセン...
背面は描画されないのですが、
たとえば球の前に立方体を置いて、立方体の方向から
球が立方体の影になるようにして球を見ると、
球のポリゴンがチラつくように立方体を通して表示されます
(球と立方体でひとつのメッシュです)

わかりにくいと思いますが、よろしくお願いします
198デフォルトの名無しさん:04/09/21 20:10:47
射影の遠近設定が不適切で、Zバッファの精度が足りなくなっているのでは?
199187:04/09/21 21:13:20
>>198
まだ安定してませんがどうやらその辺りのようです
ありがとうございました
200デフォルトの名無しさん:04/09/22 00:25:01
>>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との整合性は保たないとあれかね。
まぁ部分的に間違ってるヤカン
201180:04/09/22 08:01:39
>>196 >>200
(*゚Д゚*)!

いや正直未だに分からず放置してたんです。
な、なるほど!インデックスバッファをまとまり毎に処理するためのものに加え、
頂点バッファもまとまり毎に処理が可能に出来てるんですね。

IKのためにオブジェクト毎に持っていた頂点バッファを、ひとつにまとめて
変更を少なくしたり出来ちゃうわけですか。これは便利だ…。
いや目が覚める思いです。まことにありがとうございました!
202デフォルトの名無しさん:04/09/22 12:44:29
バッファはあればあるほどよい

この親父が権威。
ttp://www.jca.apc.org/~maki_t/waseda2-82.jpg
203デフォルトの名無しさん:04/09/22 13:58:00
あまり面白くないね。
204デフォルトの名無しさん:04/09/23 02:45:45
ATL/WTLと一緒に使うサンプルなんかありませんかね?
205デフォルトの名無しさん:04/09/23 11:36:32
ウィンドウに描画されているものを、そのまま引き伸ばすにはどうすればいいんでしょう?
(ウィンドウサイズが自由に変更できて、そのサイズに合わせて表示されるようにしたいのです)
206デフォルトの名無しさん:04/09/23 11:58:14
描画先のサイズを指定するだけ。
207デフォルトの名無しさん:04/09/23 12:27:57
>>205
チュートリアルぐらいみようじぇー

Presentのあたりを
208205:04/09/23 13:41:42
Thanks!!
209デフォルトの名無しさん:04/09/23 17:49:27
.pic形式のファイルをLPDIRECT3DTEXTURE9型で扱えるように読み込んでくれる関数ってないですか?
210デフォルトの名無しさん:04/09/23 17:55:58
fopenとか。
読み込んだらテクスチャのフォーマットに変換すれば完了。
211デフォルトの名無しさん:04/09/23 22:04:37
GDI使ってサーフェスに直線を描きたいんですが
WM_PAINTの中でコードを書いてInvalidateRectしないと駄目ですか?
InvalidateRectは画面がちらつくからできれば使いたくないんです。
212デフォルトの名無しさん:04/09/23 22:08:18
バックグラウンドサーフェイスに描くのなら、別にちらつきなど関係ないが?
213211:04/09/23 22:13:30
いえ、peekmessageループの中でバックグラウンドサーフェスに描いてみても
なぜか描画されないんです。
WM_PAINTの中でバックグラウンドサーフェスに描いてInvalidateRectすれば
ちらつきながらも描画されました。
214デフォルトの名無しさん:04/09/23 22:31:54
どこのDCに描いているか記せ。
215211:04/09/23 22:38:40
HDC hdc
oss(オフスクリーンサーフェス)->GetDC(&hdc)
こんな感じです。
216デフォルトの名無しさん:04/09/23 22:44:52
GdiFlushしてる?
217デフォルトの名無しさん:04/09/23 23:07:41
WM_PAINTの中で
BeginPaint->Blt(hdc,...oss,...);->EndPaint
他は好きなところでossに書けばいいだけじゃ?
218デフォルトの名無しさん:04/09/24 17:47:12
いつのまにかMSのサイトからDirectX7.0日本語のヘルプファイルが消されてしまいました。
DirectDrawだけ使いたいのに困ってしまう。
googleで探しても見つからない。どこかにミラーしてありませんでしょうか。
219デフォルトの名無しさん:04/09/24 19:27:50
>>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週間・・・・どうかヒントだけでも教えてくださいませ。
_| ̄|○
221デフォルトの名無しさん:04/09/24 22:52:44
別にDirectXがXファイルに対応しているわけではない。
222デフォルトの名無しさん:04/09/25 00:30:38
>>220
割れでも使ってるのか?
LW7.5用のXfileエクスポータープラグインは無料でD-STROMのサイトでDL出来るが…
223220:04/09/25 11:22:25
無事解決できました。
感謝いたします。
m(_ _)m
224デフォルトの名無しさん:04/09/26 00:44:46
アセンボラって
覚えたほうふあいいですか。
225デフォルトの名無しさん:04/09/26 05:05:47
>>224
何がしたいかによる
以上
226デフォルトの名無しさん:04/09/26 09:20:52
3Dグラフィコにはアセンブラ必須だろ

MFC使ってノホホンと組んで
「別に遅くなってもいーや」とか
ハナクソほじりながら言える分野じゃない
227デフォルトの名無しさん:04/09/26 09:26:33
必須じゃねーよタコ。シェーダ以外でアセンブラを使ってる方が稀だ。
228デフォルトの名無しさん:04/09/26 13:57:51
レベルによるだろ。理解出来ない、気が付かない奴は知らないだろ。

例えばD3DX系の関数は内部でSSEで最適化されているとか。
行列x行列なんてモロにアセンブラでオプティマイズ必須だろ。
自分で行列型なりクラスなり作っても、一番簡単な高速化はアセンブラだし。

演算子オーバーロードして
matrix = matrix * matrix;
なんて速度を意識してない奴だけ、
そりゃアセンブラなんて必須じゃないし、何故必要かも理解も出来ないレベルだろうね。
229デフォルトの名無しさん:04/09/26 14:03:21
行列*行列は頂点*行列に比べると圧倒的に数が少なく、
全体に与える影響など極微量なのだが、
それが理解できていない奴がこういう勘違い発言をしてしまう。
230デフォルトの名無しさん:04/09/26 14:15:55
ま、少なくとも日本のゲームには無いな
231デフォルトの名無しさん:04/09/26 14:26:01
このスレには日本で発売されたゲーム全てのソースを、
一つ残らず見たお方がいます。
232デフォルトの名無しさん:04/09/26 14:40:16
それで全部書けりゃ一番いいことは間違いないわけだ

実際DX8までは全員これでなきゃシェーダ書けなかったわけだし
シェーダに限らずアセンブラで全部できればそれが一番いい
233デフォルトの名無しさん:04/09/26 14:59:37
>>229
スゲー頭悪いね…
アセンブラを使うってのは頂点*行列でも同じ意味だろ?

行列*行列はアセンブラ使って
頂点*行列は使わないってか?
234デフォルトの名無しさん:04/09/26 15:06:37
>頂点*行列は使わないってか?
Direct3Dでまともにプログラムを作ったことがない人間だということが、
この発言で証明されてしまったわけだが
235デフォルトの名無しさん:04/09/26 15:17:57
>>233はきっとDirectXには頼らず、自前でソフトウェアレンダラを作ったのですよ。
236デフォルトの名無しさん:04/09/26 15:27:11
算術ライブラリ程度作った事があれば、
オペレーター演算子計算の中身と、関数化した違いは分るだろ。

D3DX系のクラスのヘッダーは見れる訳だし、
HELPにもD3DX算術計算は内部でSSEに最適化した処理を持っていると(アライメントした型を使うが)
記述されている。
237デフォルトの名無しさん:04/09/26 15:28:29
つまんねーよオマエラ
もっとマシな話をしろや
238デフォルトの名無しさん:04/09/26 15:30:30
>>234
国語の力を身に付けてください。

>行列*行列はアセンブラ使って
>頂点*行列は使わないってか?

>>頂点*行列は使わないってか?
>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>この発言で証明されてしまったわけだが

頂点*行列にかかってくる使わないかどうかの物は、アセンブラであって
頂点*行列自体を使うかどうかではありません。



239デフォルトの名無しさん:04/09/26 15:35:11
>>234
>>頂点*行列は使わないってか?
>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>この発言で証明されてしまったわけだが

D3DX使わないと、まともにDirect3Dでプログラム組めない人間だということが、
この発言で証明されてしまったわけだが

240デフォルトの名無しさん:04/09/26 15:36:27


行列*行列は(では)アセンブラ使って
頂点*行列は(では)(アセンブラを)使わないってか?


241デフォルトの名無しさん:04/09/26 15:46:42
>>238
>行列*行列は頂点*行列に比べると圧倒的に数が少なく、
最も計算量の多い頂点*行列はDirectXを使う限り、そちら側で行われる。
アセンブラで最適化する余地はほとんど残されていない。
にもかかわらずその反論が、
>行列*行列はアセンブラ使って
>頂点*行列は使わないってか?
恥の上塗りはみっともない。

さらに致命的な墓穴、
>>>頂点*行列は使わないってか?
>>Direct3Dでまともにプログラムを作ったことがない人間だということが、
>>この発言で証明されてしまったわけだが
>D3DX使わないと、まともにDirect3Dでプログラム組めない人間だということが、
なぜそこでD3Dではなく、D3DXになるのか。
頂点*行列をDirectXに任せるのであれば、少ない例外を除けばD3DXの介入余地はない。

プログラムを組んだことが無いどころか、全然DirectXを理解していないだろう?
242デフォルトの名無しさん:04/09/26 15:52:49
>>241
D3DXはDirect3Dとは別物。
vectorクラスやmatrixクラスの演算子のオーバーロードによる計算は
あくまでクラスの実装。

>頂点*行列をDirectXに任せるのであれば
お前が全く理解してない。

243デフォルトの名無しさん:04/09/26 15:53:34
特定の最適化を馬鹿の一つ覚えで連呼する奴は、
最適化した部分のみで計測する偏ったベンチマーク結果は出すが、
それを組み込んだ場合に、システム全体がどの程度高速化するのかは全く考えない。
実際にやってみると、誤差程度に1FPS増えたような差しか出なかったりするわけだが、
それをひた隠しにするか、それ以前にそういう実験すらしない。
244デフォルトの名無しさん:04/09/26 15:55:42
>>241
D3Dには算術系の処理なんてありませんよ??
245デフォルトの名無しさん:04/09/26 15:58:15
>>243
>特定の最適化
と・く・て・い
なんだから
さらっとやっとけ。
246デフォルトの名無しさん:04/09/26 15:58:53
>>241
どっちにも与す気はないが、234は確かに読解力無いよ

D3DXMATRIXのmatrix * matrixは、最適化されてないのかね
247デフォルトの名無しさん:04/09/26 16:04:29
>>244
トランスフォーム済みにでもしない限り、
D3D側がHALやソフトエミュで頂点*行列を行うわけだが。
248デフォルトの名無しさん:04/09/26 16:05:08
>>246
241様はD3DX使わずに、
D3Dの方で
vector * matrix が出来ると発言なさってます。
249デフォルトの名無しさん:04/09/26 16:07:23
つまりD3D側で頂点*行列が出来ないと思っていたわけか。
ならアセンブラアセンブラと連呼するのも納得がいった。
元から何も分かってないだけじゃん。
250デフォルトの名無しさん:04/09/26 16:07:35
>>247
ハードウェアT&Lと激しく混同なさってますyo...
251デフォルトの名無しさん:04/09/26 16:10:01
>>249
ハードウェアT&Lと激しく混同なさってますyo...
252デフォルトの名無しさん:04/09/26 16:10:39
アセンボラ
253デフォルトの名無しさん:04/09/26 16:13:44
ハードウェアT&Lの機能をさして
そのソフトエミュをさして

D3Dで
Vector * Matrix が出来るか…
スゲーな。
254デフォルトの名無しさん:04/09/26 16:17:44
>>247
>>249

わたくしめの、
スキニングアニメーションのプログラムで
vector * matrix
をD3Dがやってくるようにしたいのですが

何か指定の方法があるのでしょうか?
D3Dの関数が用意されているのでしょうか?
D3Dのクラスが用意されているのでしょうか?
255デフォルトの名無しさん:04/09/26 16:19:55
おれが249だったら絶対に正体を知られたくないw
256デフォルトの名無しさん:04/09/26 16:20:16
>>254
固定処理なら頂点にウエイトを設定して、
必要な行列をセットしてレンダリングするだけだが?
257デフォルトの名無しさん:04/09/26 16:24:00
>>256
それだとグラボ(GUP)で処理されてしまいます。
D3Dにやらせたいのです。
258デフォルトの名無しさん:04/09/26 16:25:08
>>256
レンダリング以外の処理は?
259デフォルトの名無しさん:04/09/26 16:27:14
>>257
つまりドライバ側に投げる処理は、D3Dではないと言いたいわけか?
260デフォルトの名無しさん:04/09/26 16:30:24
>>259
つまりSetTransformの処理を、vector * matrixと言いたいわけか?
261デフォルトの名無しさん:04/09/26 16:34:24
>>259
普通投げた時点で、計算はしてないってなるだろw
計算から処理に言葉を変えるなよw
262デフォルトの名無しさん:04/09/26 16:35:47
ドライバ側が行う処理がDirectXの仕事ではないとすると、
例えばDirectDrawでVRAM上の画像のブロック転送を行ったときも、
それがビデオカード側で処理されれば、
DirectDrawの機能ではないという屁理屈をこねたいのだろうか?

>>260
>つまりSetTransformの処理を、vector * matrixと言いたいわけか?
そこでは値を設定しているだけというのは置いておくとして、
その後に実際に演算が行われるときは、頂点*行列が行われている。
263デフォルトの名無しさん:04/09/26 16:39:13
>>262
お前はハードウェアT&Lの機能を
vector * matrixとか言ってD3Dだとほざいてるわけか?

プログラマが任意にvector * matrix使いたい場合は
どうすんるんだ?
264デフォルトの名無しさん:04/09/26 16:43:47
>>262
お前の理屈でドライバの処理がD3Dなら
ドライバに命令するプログラムで使用した
VECTORやらMATRIXのクラスなり構造体が
D3DXだとD3DXの処理だ、とはならんのか?
265デフォルトの名無しさん:04/09/26 16:52:33
算術計算の話をしている中で

>そこでは値を設定しているだけというのは置いておくとして、

置いておけないだろ…
266デフォルトの名無しさん:04/09/26 16:53:49
HW-TnLでもシェーダでもソフトエミュでも、
それ以上ユーザが低いレベルで使えるAPIが存在しない以上、
D3D内のインタフェイス上から実行されているのならD3Dの機能。
そもそもドライバ側がD3Dの機能の一部として使えるように書かれている。

>プログラマが任意にvector * matrix使いたい場合は
それは自前で計算する以外にはない。
割合的には多くないが、最適化したいのなら、アセンブラでも何でも使えばいい。
ただし少ない部分を最適化しても、全体のパフォーマンスが上がる可能性は薄い。

逆に質問するが、処理負荷の中心である、
頂点*行列のほとんどはD3D側で行うことになるわけだが、
これをどうやってアセンブラに置き換えるのか?
267デフォルトの名無しさん:04/09/26 16:55:36
>>262
ぼくのPCのグラフィックカードのドライバはnVidiaの物です。
学校のPCのはオンボードです。
ともだちのPCはATIのグラフィックカードのドライバです。

世の中に色んなDirectXがあるんですね。

…つーかCOMでも勉強しろや
268デフォルトの名無しさん:04/09/26 16:58:11
>>265
いちいち突っ込んでいるときりがないのだが。
「投入されたジョブが実行されるときだろ」
とか言っておけばいいのだろうか?
269デフォルトの名無しさん:04/09/26 16:58:31
>>267
YOUの判定負け、これ以上醜態をさらすこともなし
270デフォルトの名無しさん:04/09/26 16:59:13
>頂点*行列のほとんどはD3D側で行うことになるわけだが、
いや、いや、いや、いや、
お前のアホアフォな前提を完全肯定して話を進めるな
271デフォルトの名無しさん:04/09/26 17:01:33
>>267
HDDにも色々あるけど、ファイルの入出力はOSの機能とは言えないと?
HDDの種類だけOSがあることになるが。
272デフォルトの名無しさん:04/09/26 17:03:53
>>266
俺は、家でも、会社でも
SetTransformはワールドの制御のみで
ローカルやアニメーション処理は自前で計算してる、若しくはD3DX使う。
273デフォルトの名無しさん:04/09/26 17:06:17
>>270
頂点*行列というと意味がぼやける。
要は頂点トランスフォームは、D3D側かアプリ側
どっちが担当するんだってことだな。
274デフォルトの名無しさん:04/09/26 17:07:15
>>272
なぜ?
275デフォルトの名無しさん:04/09/26 17:08:44
各社のグラボドライバが様々あるのに
DirectXと言う物で制御出切るのは
COMと言う、DirectXではない技術を使っているから

これまでの理屈だと、COMが処理してるってならないの?
276デフォルトの名無しさん:04/09/26 17:09:58
>>275
国≒COM
日本≒DirectX
277デフォルトの名無しさん:04/09/26 17:10:15
結局負荷の高い処理がアセンブラ化出来ない隠蔽されたところに存在するわけだが
アセンブラ化の目的ってパフォーマンスを上げることじゃないの?
278デフォルトの名無しさん:04/09/26 17:11:54
>>273
頂点トランスフォーム

vector * matrix
は、全く意味が違うだろ。
279デフォルトの名無しさん:04/09/26 17:13:57
>>278
いや同じだが、何をもって違うと言いたいのだろう?
280デフォルトの名無しさん:04/09/26 17:16:43
>>279
はぁ?
算術処理と頂点トランスフォームが同じ?

何かい?DirectX使いには
vector * matrixと言う物は
ハードウェアT&Lでの頂点トランスフォームだとなるわけ?
281デフォルトの名無しさん:04/09/26 17:19:01
>>279
君さ、数学得意じゃなかったでしょ
282デフォルトの名無しさん:04/09/26 17:22:22
>ハードウェアT&L
過去の遺物のこれにこだわる理由はよく分からないが、
投入されたデータから頂点*行列の演算しないことには正常に描画出来ないんだが。
それとも頂点*行列は行われていないと?
283デフォルトの名無しさん:04/09/26 17:25:34
vector * matrix
これが描画の為の頂点計算のみだと
盲目的に考える馬鹿がいる
284デフォルトの名無しさん:04/09/26 17:27:59
>>283
もう無理しなくてもいいよ。
285デフォルトの名無しさん:04/09/26 17:27:59
>>282
>>ハードウェアT&L
>過去の遺物のこれにこだわる理由はよく分からないが、
>投入されたデータから頂点*行列の演算

これをSetTransformでやってるのが、ハードウェアT&Lじゃねーの?
286デフォルトの名無しさん:04/09/26 17:32:22
スキニングなんかのボーン毎、頂点毎に行列が違う物って
一頂点毎にSetTransformやってるの?
287デフォルトの名無しさん:04/09/26 17:37:13
>>286
まとめてセットしておけるから、
一頂点ごとにやらなければならない理由はないが?
288デフォルトの名無しさん:04/09/26 17:39:49
だから、行列がちがうんだよ?
何?まとめてセットって?
289デフォルトの名無しさん:04/09/26 17:41:10
>>288
必要な行列の数は?
290デフォルトの名無しさん:04/09/26 17:42:27
>>288
君のDirect3Dの知識はVer.5ぐらいで止まってないか?
話がまったく噛み合ってないぞ。
291デフォルトの名無しさん:04/09/26 17:44:02
>>285
シェーダなんかもあるという意味だなんだが、
そういう反応をするところなんだろうか?
292デフォルトの名無しさん:04/09/26 17:44:46
頂点数が大体4000だから、4000
256づつやれってか?
293デフォルトの名無しさん:04/09/26 17:47:48
頂点数が4000で行列も4000あるっていうと、
ええと、ここは驚くところですか?
294デフォルトの名無しさん:04/09/26 17:52:29
ウェイトが固定じゃない以上は、頂点数必要だろ
295デフォルトの名無しさん:04/09/26 17:53:26
スレタイ読もうぜ
296デフォルトの名無しさん:04/09/26 17:54:43
>頂点数が大体4000だから、4000
参りました、降参です。
オールアセンブラで最適化してください。
297デフォルトの名無しさん:04/09/26 18:04:51
頂点に匹敵するボーン数を誇るデータが、いったいどんなものなのか興味がある。
すでにスキニングが意味をなしていないと思うが。
298デフォルトの名無しさん:04/09/26 18:06:45
自前でスキニング処理した事あるやついないの?
299デフォルトの名無しさん:04/09/26 18:09:03
ボーン数の行列と
頂点にウェイトが変動でかかる以上
頂点数の行列は必要だろ
300デフォルトの名無しさん:04/09/26 18:15:20
>頂点にウェイトが変動でかかる以上
想像もつかないんだけど、
いったい何をモデリングして動かしているの?
301デフォルトの名無しさん:04/09/26 18:35:39
>>300
流体ですが何か?
302デフォルトの名無しさん:04/09/26 18:56:16
とりあえず固定で処理したいのなら、
ウエイトが異なる頂点は別頂点として扱うこと。
データが増えて嫌なら自前で処理すればいい。
303デフォルトの名無しさん:04/09/26 18:59:30
デザイナにウェイトかけて良い頂点は4つまでね、とか言ってるのかな?

理由、俺のプログラムがウェイト数4つまでしか対応してないから
304デフォルトの名無しさん:04/09/26 19:01:42
OpenGL、DirectX、C、VB、またはお手軽組み組みMFCのスレは
アセンブラの話が出ると荒れる
305デフォルトの名無しさん:04/09/26 19:01:57
アセンブラといえば昔は2D系のポストエフェクトにつかわれる
ことが多かったけど、今はシェーダで書くことも多くなったから
つかわないといけないシーンは減ったな。

かつて一番計算のコストが高かった頂点のトランスフォームも
これもシェーダをつかうからアセンブラで最適化する必要も
なくなったし。

必須というわけじゃないが読めると得することが多いので
暇なときにアセンブラの本を1冊読んで、プロセッサ固有の
最適化に関する部分はネットの情報で簡単に勉強すれば
十分だと思う。重ねて言うが読めると得することは多いが
書くことはあまりないと思う。

シェーダのアセンブラについてはピクセルシェーダ1.x系列
は命令数とかテクスチャ読み出しの依存関係とか面倒
くさいことがいろいろあるのでHLSLとかCgつかうにしても
アセンブラがわかってないと実質何もできないけど。

あと、スキニングって普通シェーダをつかってたら必然的に
書くことになると思うんだけど。そんなに難しい処理
じゃないはずなんだけど。複数の行列でトランスフォーム
した頂点を重み付けして加算するだけだろ。何か変な
勘違いをしている人がいるような。しかもほとんど頂点
シェーダで書くからアセンブラの出番ないし。
306デフォルトの名無しさん:04/09/26 19:04:06
>>286から後出しで追加要素が色々出てきたな。
なんだかもういろんなところに転げ回っている感じがする。
307デフォルトの名無しさん:04/09/26 19:04:34
DirectX9以前からやってりゃアセンブラのほうがしっくり来て早い
308デフォルトの名無しさん:04/09/26 19:05:00
>>305
発売する前に、
必須環境
DirectX9とDirectX9対応グラフィックボード

俺のプログラムが動く環境と明記してくださいね。
309デフォルトの名無しさん:04/09/26 19:07:37
>>308
そんなことをお願いしなくても、
販売する物なら動作環境ぐらい普通書くだろう。
310デフォルトの名無しさん:04/09/26 19:11:09
DirectX9フル対応ボード「のみ」
なんてものは見たことがねえなあ

いまだにGF2MXをメインに据えている俺からすれば
そんなものが出てきたらサブマシンに変えざるを得なくなって非常に困る

サブ
Athlon64 3200+
GF6800Ultra

入れ替えるのめんどくせえ
しかもメインに比べてうるせえ
311デフォルトの名無しさん:04/09/26 19:12:32
>>305
シェーダでスキニングさせた事ないだろ?
シェーダでスキニングする場合、ウエイトは1頂点に4つまでと縛りが入る。
デザイナのデータに規制をかけてるのか?
312デフォルトの名無しさん:04/09/26 19:16:44
>>305
君のプログラムだと、シェーダーが動かないと
実行されない物なんだ?

必須環境、指定のVSバージョンが動くグラボ?
王様プログラムだな。
313デフォルトの名無しさん:04/09/26 19:33:01
>シェーダでスキニングする場合、ウエイトは1頂点に4つまでと縛りが入る。
そりは固定機能の制限だ。
314デフォルトの名無しさん:04/09/26 20:04:37
ヘルプを見ては後出しで条件を出して、そのたびに墓穴を掘っているような。
315デフォルトの名無しさん:04/09/26 21:30:42
SDLスレってあった気がするんだけど
俺の気のせいだったかな
ちなみにSDLはこの板でいいの?
316デフォルトの名無しさん:04/09/26 21:31:50
317デフォルトの名無しさん:04/09/26 21:45:20
318デフォルトの名無しさん:04/09/26 22:00:13
DirectX9ではなくDirectX8で組む場合
どうすればいいのでしょうか?
DX8のSDKが見つからなかったので・・
319デフォルトの名無しさん:04/09/26 22:14:05
320デフォルトの名無しさん:04/09/26 22:17:55
>>318
9SDKには8のヘッダは入ってないだろうし無理じゃね?
つうか9で組めばいいじゃん。
初めて始めるなら9でも8でも殆どかわらんよ。
321デフォルトの名無しさん:04/09/26 22:34:51
>>320
間抜けな発言をする前に、ヘッダファイルの中を覗くことをお勧めする。
322デフォルトの名無しさん:04/09/26 22:53:15
>>321
確かにオールバージョン入ってるね。
これなら9SDKでモーマンタイだな。
323デフォルトの名無しさん:04/09/26 23:24:54
>>316
情報thx
それそれ
でもム板でも昔見かけた気がするけど
やっぱ俺の気のせいだったかな

SDLって、COMと縁切れるからC++以外の言語で使いやすいんだよね
むちゃ簡単だし
適当なやつ作る程度ならこれで十分でしょ
このスレで使ってる人いないの?
まあ使ってるからって話題なんもないんだけどさ
俺自身も自作言語のテスト用途なわけよ
SDLとのインタフェースってかなり小さく出来るんだよね
Linuxでも同時に動くし
覚えることほんと少ないから
知らないでDirectX直で使ってる人いたらオススメだよ
324デフォルトの名無しさん:04/09/28 05:18:32
質問です。

DirectShowをDirect3Dのテクスチャとして表示するために四苦八苦してます。
で、DirectX9.0bSDKの日本語ヘルプが欲しいのですが、マイクロソフトの所を
探しても見つかりません。
どこにあるか教えていただけませんか?
325デフォルトの名無しさん:04/09/28 08:34:41
困ったな・・・・・・・・・・海外のBBSでもこういう質問が平気で飛び交うんだろうか?
326デフォルトの名無しさん:04/09/28 14:16:18
以前のサンプルを DirectX 9.0 SDK Update (Summer 2004) でビルドする方法
DirectX 9.0 SDK Update (Summer 2004) をインストールするとウィザードが使えないために、こ
のコラム用に作った以前の C# サンプルコードがビルドできません。今回はその対策方法を紹介します。

http://www.microsoft.com/japan/msdn/directx/default.asp
327デフォルトの名無しさん:04/09/30 01:54:18
すげー盛り上がってたようだが
落ち着いた所で何が正しいのかまとめてくれ
328デフォルトの名無しさん:04/09/30 05:54:39
遅いマシンの為の動作テストをやりたいんですが
OS全体に負荷をかけるツールってないですか?
単純にfor(;;);を実行するだけだとむらが出てしまいます。
329デフォルトの名無しさん:04/09/30 10:27:32
DirectXって何ですか?
330デフォルトの名無しさん:04/09/30 11:38:29
331デフォルトの名無しさん:04/09/30 12:47:36
WinGとは違うんですか?
332デフォルトの名無しさん:04/09/30 12:53:00
WinGが何か知ってるんならわかるだろ
20年程山篭りしてたわけでもあるまい
333デフォルトの名無しさん:04/09/30 13:17:08
ネタにマジレスするみっともない馬鹿がいるのはこのスレですか?
334デフォルトの名無しさん:04/09/30 14:14:05
いえ、無知を指摘されたため、慌ててネタということにして逃げる
典型的な厨房が吠えるスレです。
335デフォルトの名無しさん:04/09/30 15:23:23
恥の上塗りをするのは自由だが、
どこをどうみたってネタにしか見えない。
なぜこんなネタにマジレスを返すのか、
馬鹿の考えることはさっぱり理解できない。
336デフォルトの名無しさん:04/09/30 17:07:00
なぜこんなに必死なんだろう。
「20年」を転がすことも思い付かずにマジレス、マジレスとお猿のように。
337デフォルトの名無しさん:04/09/30 18:14:51
どーでもいー
338デフォルトの名無しさん:04/09/30 21:11:33
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 );
339デフォルトの名無しさん:04/10/01 00:32:04
質問です。
鬱だ死のうDirectXスレはどこに行ったの?
340デフォルトの名無しさん:04/10/01 03:44:54
リンク中...
d3dx9.lib(fastftoa.obj) : error LNK2001: 外部シンボル "__aulldvrm" は未解決です
Debug/dx9.exe : fatal error LNK1120: 外部参照 1 が未解決です。

MSDN(ttp://www.microsoft.com/japan/msdn/academic/Articles/DirectX/01/
のサンプルをビルドしたときに、エラーだと言われました。
どこをどうすれば良いのか教えてください。
341デフォルトの名無しさん:04/10/01 04:20:01
HRESULT EnumSurfaces(
DWORD dwFlags,
LPDDSURFACEDESC2 lpDDSD2,
LPVOID lpContext,
LPDDENUMSURFACESCALLBACK2 lpEnumSurfacesCallback
);
この関数の使い方がよくわかりません
342デフォルトの名無しさん:04/10/01 07:46:35
>>341
使い方はヘルプに書かれているとおりだが。
わからないのなら他のEnum系のSDKサンプルを参考にすればいい。
343デフォルトの名無しさん:04/10/01 17:54:59
>>339 某所の有名厨が削除依頼と聞いたが
344デフォルトの名無しさん:04/10/01 18:18:48
>>339
ゲ製作技術のスレと統合。
345デフォルトの名無しさん:04/10/01 18:41:02
346デフォルトの名無しさん:04/10/02 13:02:57
次回の授業までにDirectXを使ってインベーダーゲームを制作しろと
課題が出されました。しかし、全くやり方が分からないんですけど
だれか、インベーダーに関しての、情報が書いてあるサイト、
知識を持ってる人はソースコードとまでは言いませんが
誰か、知恵をお貸し下さい 長文スイマセン
347デフォルトの名無しさん:04/10/02 13:12:16
インベーダーの情報か。

名古屋打ちとか。
348デフォルトの名無しさん:04/10/02 13:16:48
高橋名人ってもっと後だっけ?
349デフォルトの名無しさん:04/10/02 13:18:16
ウェブ上でプレイできる奴があるから研究してみ
ActiveXをONにしておくこと
http://www.google.co.jp/search?q=%E3%82%A4%E3%83%B3%E3%83%99%E3%83%BC%E3%83%80%E3%82%B2%E3%83%BC%E3%83%A0&hl=ja&lr=&ie=UTF-8&start=10&sa=N
350デフォルトの名無しさん:04/10/02 13:29:37
DirectX齧ってる人間が
インベーダーもどきも自力で作れないなんて
ネタでしかないわけだが
351デフォルトの名無しさん:04/10/02 14:22:43
>>350
インベーダーゲームを知らない年齢では?
352デフォルトの名無しさん:04/10/02 14:33:39
DirectXの知識はあるとも書いてないしな、微妙
353デフォルトの名無しさん:04/10/02 15:00:16
昔のゲームは面白かった

とかいうのでやってみると
実につまらない



SFCのRPGなら今より面白いと言えるが
354デフォルトの名無しさん:04/10/02 15:44:36
スレ違いだけどちょっと俺も同意
オヤジがレゲーにノスタルジー感じてるだけじゃないかと

あと15年もすれば
「ポケモンは最高だった。今のゲームは複雑&作業プレイ」
とか言い出すやつが出てくるが出てくるだろう
355デフォルトの名無しさん:04/10/02 16:49:05
>>346
インベーダーが課題に出ててソースもある。

http://gamdev.org/up/upload.php?page=all
【初心者】課題をクリアしていくスレ【講習会】
http://pc5.2ch.net/test/read.cgi/gamedev/1086858349/
356デフォルトの名無しさん:04/10/02 17:37:45
既に今のゲームは作業プレイだ
357デフォルトの名無しさん:04/10/02 18:19:07
>356
そうじゃない意欲的な作品も稀にあるが、人目につくこともなく消えていく
絵がきれいとか広告がうまいゲームしか売れてない

>既に今のゲームは作業プレイだ
結局そんな作業ゲーが生き残ったのはユーザがそれを選択したってことなんだな
358デフォルトの名無しさん:04/10/02 19:01:45
でも初代ポケモンをプレイしてた奴ってそろそろ家庭もって子供がいてもおかしくない年だよな。
359デフォルトの名無しさん:04/10/02 19:15:01
>>358
何歳から家庭もって子供がいてもおかしくない年だと考えている?
360デフォルトの名無しさん:04/10/02 19:17:57
>>359
28歳
361デフォルトの名無しさん:04/10/02 19:35:55
バカモン
362デフォルトの名無しさん:04/10/02 20:16:13
>361
バカモンゲットだぜ
363デフォルトの名無しさん:04/10/02 20:35:58
gets()

ゲッツて言うな
364デフォルトの名無しさん:04/10/02 20:38:31
>>359
家庭を持つのが「おかしくない」のは18歳からだな。
そんなこともわからないの?
365デフォルトの名無しさん:04/10/02 20:48:10
>>364
18で家庭持ちは流石に早いよ
366デフォルトの名無しさん:04/10/02 20:50:15
>>365
早いかどうかなんて問題になっていないでしょ。
「おかしくない」のが何歳からか、という話だよ。
367デフォルトの名無しさん:04/10/02 20:50:55
>363
ハゲワラタ
テユーカマイリマスタ
368デフォルトの名無しさん:04/10/02 20:53:51
>>366
だから早いって
社会通念上おかしい
369デフォルトの名無しさん:04/10/02 20:54:56
18は最短ですな。主語が男なら
370デフォルトの名無しさん:04/10/02 21:00:11
>>369
女も今は18じゃなかったっけ?
371デフォルトの名無しさん:04/10/02 21:01:21
>>368
早いけど、社会通念上まったくおかしくないよ。
あなたが勝手におかしいと思うのは自由だけど。
372デフォルトの名無しさん:04/10/02 21:28:14
>>370
マジっすか
知らなかった…
373デフォルトの名無しさん:04/10/02 21:50:44
>>371
法律でセーフなだけだろ?
最近は高校生が妊娠したまま学校に通うのが普通なのか?
374デフォルトの名無しさん:04/10/03 00:01:22
358からの流れが微妙に面白いな。ズレてるが
375デフォルトの名無しさん:04/10/03 00:08:32
「18で結婚はおかしくはない」がいつのまにか
「高校生が妊娠したまま学校に通うのが普通」へ。
376デフォルトの名無しさん:04/10/03 15:04:00
DX9のDirectShowに含まれているDirectDrawつうのは
DX7の頃のDirectDrawと同じもんか?
377デフォルトの名無しさん:04/10/03 15:09:58
>>376
別物。
DX7のDirectDrawはDX9でもそのまま残ってる。
378デフォルトの名無しさん:04/10/03 17:46:56
>>373
何が普通か、などという話ではないんだよ。
何が「おかしくない」のかという話。
なんでそんなに頭が悪いの?
379デフォルトの名無しさん:04/10/03 21:17:54
DirectX初心者質問スレでそんな話をする奴らがおかしい。なんでそんなに頭が悪いの?
380デフォルトの名無しさん:04/10/03 21:57:54
猿真似すると、言われて凄く悔しかったんだってのがばれちゃうよ?
ま、いいけど。
他人のふりして逃げるならそれも結構。ミスを認めたく無い場合はそれも有効だしね。

↓何事も無かったかのようにスレ再開
381デフォルトの名無しさん:04/10/03 22:11:07
もう勝利宣言
382デフォルトの名無しさん:04/10/03 23:33:55
おまいら少しは鬱氏に書き込まないと即死判定でスレが落ちるよ
383デフォルトの名無しさん:04/10/04 07:18:22
>>340と同じ問題につまづいています。どうすりゃいいのこれ。
384デフォルトの名無しさん:04/10/04 08:50:08
>>383
.NETとDX9でやってる?
385デフォルトの名無しさん:04/10/04 09:59:27
directx8で3Dの座標はfloat型で扱わなければならない とあるのですが
座標表すだけならintで十分とおもうのですがなんでfloat型が採用されてるんですか?

座標のfloat型に合わせるためか
warning C4244: '=' : 'int' から 'float' に変換しました。データが失われているかもしれません
warning C4244: '=' : 'double' から 'float' に変換しました。データが失われているかもしれません

という警告が出まくります

座標に関わる計算するときに使う変数はすべてfloat型に統一しておいた方がいいのか
警告文が出てもプログラム自体は実行できるのでこのままほっといていいのか悩んでます



386デフォルトの名無しさん:04/10/04 10:01:12
意図的にやっているならキャストすればいいだろう。
ここはDirectX初心者スレであって、C言語初心者スレではない。
387デフォルトの名無しさん:04/10/04 10:13:36
>>386
すいませんでした
388梅宮:04/10/04 10:15:20
シンボルッ(でっでー)
シンボルッ(でッでー)

外部のシン〜ボルぅぅー
389デフォルトの名無しさん:04/10/04 10:43:21
この言語はプログラム初心者にはお使いいただけません
とか言ってるところがある。

float志向

390デフォルトの名無しさん:04/10/04 10:46:46
甘いよオマエラ。
玄人は浮動小数点を捨て
固定小数点もしくは整数を選ぶ。
すなわち>>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 ;
:
(ここに配列要素に値を格納する処理があるとして
  :
この後どうなるんでしょうか??
お願いいたします


393デフォルトの名無しさん:04/10/04 12:21:01
とうとうDirectXと何の関係も無くなったが。
394デフォルトの名無しさん:04/10/04 12:22:23
>>392 宿題ぐらい自分でやれよ
395デフォルトの名無しさん:04/10/04 12:27:57
サーフェイスデバイスからGetDCを呼び出して
396デフォルトの名無しさん:04/10/04 13:23:15
>>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;}
397デフォルトの名無しさん:04/10/04 14:19:59
>>392
"p","[","0"といった文字はそのまま出力できませんのでまず各文字をポリゴンに変換します。

デバイスコンテキストにアウトラインフォントを選択した後GetGlyphOutline
でアウトラインフォントの輪郭(4 次スプライン形式)が取り出せますので
それを元に変換してやればいいです。

参考ページ:
ttp://www.inet-lab.org/ted/program/prog176.html
398デフォルトの名無しさん:04/10/04 20:08:08
>>384
VC6.0とDX9SDKSummer2004でやってます
aulldvrmってなあにいい
399デフォルトの名無しさん:04/10/04 20:46:09
Summer2004はVC6.0に対応してない
400デフォルトの名無しさん:04/10/04 20:56:49
対応してなかったっけ?
たしかVC6用のも別に用意されてたような
401デフォルトの名無しさん:04/10/04 21:13:01
Extras
Extras ダウンロードには、ソフトウェア開発キットには含まれていない以下の内容が入っています。

Visual Studio 6.0 をサポートする d3dx.lib
以前のバージョンの CG ツール プラグイン
日本語ドキュメント (Summer Update 2004 の更新は反映されていません)


Date: July 28, 2004
402デフォルトの名無しさん:04/10/05 01:48:42
403デフォルトの名無しさん:04/10/05 02:03:52
>>401
どうもありがとうございます。そちらのd3dx.libにてちゃんとコンパイルが通るようになりました
Summer2004はrequires both Visual Studio .NET and the .NET framework for developmentって
書いてあったんですね・・すいませんでした見落としてました
404デフォルトの名無しさん:04/10/05 12:22:03
ポストプロセス、ポストブレンディング、ポストフィルタリング
これらの原理というか、概要が何のこっちゃか全然わかりません。
Google検索しても、「それが使われている」ことは書いてあっても
何をどうするのがポストプロセスと言うのかが書いてません。

申し訳ないですが教えてください。
405デフォルトの名無しさん:04/10/05 18:29:42
原理も何もポストプロセスって「後処理」のことだぞ。
ようするに特定の処理を指すわけじゃなくて、後で何か手を加えること
全般を指す。
ポリゴンで描画したキャラクタの額にフォトショップで「肉」と書き
加えるだけでも立派なポストプロセス。
406デフォルトの名無しさん:04/10/05 19:56:57
407デフォルトの名無しさん:04/10/06 12:11:41
ゲームで言うポスト処理は
光をブルーミングするような感じにすることと思い浮かべる人もいる

良い例が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に関係する質問ではないですが,よろしくお願いします.
409408:04/10/07 11:10:59
自己解決しました.
410デフォルトの名無しさん:04/10/07 13:00:52
DirectInputのバッファリングデータの取得で
キーを押したらキーを離すまでの間キャラクターを移動させたいのですが

キーを押すと
押す→離す→押す
と状態の変化がなぜか3回起こってしまい

直接データでやった場合のように移動開始直後にカクついてしまいます
これはキーボード自体の仕様なんでしょうか?
411デフォルトの名無しさん:04/10/07 17:14:55
> キーを押すと
> 押す→離す→押す
> と状態の変化がなぜか3回起こってしまい

こんな現象、正常なら起こらないと思う。
キーボードが機械的に壊れてるとか、そもそもプログラムにバグがあるとか。
412デフォルトの名無しさん:04/10/07 17:32:55
フルスクリーン時にIMEの入力中文字表示が
画面の描画で上書きされてちらつくんですが、これを
なるべく少ない労力で正常に表示させる方法ってありませんか?

自分で考えた限りだと
・WM_IME_STARTCOMPOSITIONを拾って変換中の情報を全て自前で描画。
・WM_IME_STARTCOMPOSITIONで変換中文字列だけ取って、
 入力表示の幅を計算してその部分だけ画面を更新しない。

ってのを思いついたんですが、これらよりも簡単な方法ってないでしょうか?
413デフォルトの名無しさん:04/10/07 17:47:21
よくわからんけど日本語入力モードになってるんじゃないだろうか
414デフォルトの名無しさん:04/10/07 18:15:04
IMEバーやGUIなんかは自前でやるしかないだろう。
俺はやりたくないがな!
415デフォルトの名無しさん:04/10/07 18:29:44
>>413
ええ、日本語入力モードの入力中の文字を表示したいんです。

>>414
自前以外の方法はやっぱ無いんですか・・・
416デフォルトの名無しさん:04/10/07 18:49:10
>>415
http://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=43&vew=21
これとか参考になりませんか?
417デフォルトの名無しさん:04/10/07 19:06:58
>>416
DX9.0c夏Verから簡単に使えるようになってたんですか。それは知らなかった。
しかし、DX7使ってたんだよなorz
今から移行するよりは、このまま自前処理したほうが早いか。
418デフォルトの名無しさん:04/10/08 09:30:37
DirectX9.0のDirectShowで利用できる独自のエフェクトを作成しようと考えています。
最初は、再生するMPEGのRGB値を調整(例えば、R値を10だけ増やすとか)するエフェクトから
取り組んで生きたいと思っています。
参考になる書籍やウェブサイトをご存知の方がいらっしゃいましたら、教えて下さい。
419410:04/10/08 18:45:07
>>411
自分のデスクトップが
PS/2のキーボードをUSBに変換するのを咬まして
(さらにUSB切り替え機もかまして)接続してるのが原因だったようです
知り合いのPCで試させてもらったらちゃんと動きました
誰かしらの参考になれば幸いです
420デフォルトの名無しさん:04/10/08 23:55:53
>>419
私の環境も同様に PS/2→USB変換をかましているのですが
やはり同じ症状が出ますね。
変換のせいだと思って間違いないと思われます。
おかげでゲームがやりづらいの何のって・・・・
421デフォルトの名無しさん:04/10/10 22:25:59
>>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]);
422デフォルトの名無しさん:04/10/11 15:08:59
そのレベルもできないヤツは他の課題はどうやって乗り切ってきたのだろうか…
423デフォルトの名無しさん:04/10/11 15:11:18
周りからぱくってんじゃないの?
424421:04/10/11 19:09:35
でも本当は1行で済むんだよね
425デフォルトの名無しさん:04/10/11 19:33:50
1行で書けるの?
改行しないだけ?
426デフォルトの名無しさん:04/10/11 19:55:18
矩形の辺上に存在する複数の点を全部使って、
矩形を構成するトライアングルを抽出したいのですが、
何か良い方法ありませんか?
427デフォルトの名無しさん:04/10/11 21:10:00
矩形って長方形(四角形)の事だけどそれでいいの?
頂点を一つずつ順番ずらして拾っていくだけかと。
428デフォルトの名無しさん:04/10/11 21:23:42
すいません
上でポストフィルタの話があったので質問させてください

http://sylphys.ddo.jp/upld2nd/game/img-box/img20041011211855.jpg
ポストフィルタあり

http://sylphys.ddo.jp/upld2nd/game/img-box/img20041011212005.jpg
ポストフィルタなし


ポストフィルタは、どのゲームでも例外なく
遠くにあるものはボケたように見え、
近づくにつれてはっきりと見えてくるような感じ、
光をボカシた感じにしてますが

これがポストフィルタなんでしょうか。
「後処理」すると、必ずこんな感じになるのですか。

そもそも後処理とは、この場合何の処理をしているから
こんなようにボケるのでしょうか。
似たような効果を示す、ブラーを用いたようには見えないのですが
429デフォルトの名無しさん:04/10/12 00:04:45
>428
距離に関係なく全体をぼかすことはできる?
あとはそれに距離(Z値)を考慮すればやりかたはいくつか思いつくんじゃないかな?
430デフォルトの名無しさん:04/10/12 08:25:22
>>428
海外サイトにソースが山ほど転がってるよ
普通に中学卒業してるのなら読める
431デフォルトの名無しさん:04/10/12 16:14:23
実行速度が速すぎてキャラの移動が早すぎるので
ウエイトかけたいんですけど簡潔で効率的なウエイトのかけ方を
教えてくださいC言語でおねがいします
432デフォルトの名無しさん:04/10/12 16:28:32
>>431
for(i = 0, i < x;i++){}
xの値を変えるだけで速度調節できるぜ
433デフォルトの名無しさん:04/10/12 16:33:48
>>432
ありがとうございます
試してみます
434デフォルトの名無しさん:04/10/12 16:35:53
>>432
BASICを思い出す
435デフォルトの名無しさん:04/10/12 17:02:52
>431
DirectXなのか?
そもそもWindowsなのか?

なんちゃって
ネタだということはお見通しなんだが
436デフォルトの名無しさん:04/10/12 17:12:37
>>432
VCなんかだと空ループは最適化で無かったことにされるので、ネタにもなってないぞ。
437デフォルトの名無しさん:04/10/12 17:15:21
なかったことにされなかったらネタにならないじゃねえか
438デフォルトの名無しさん:04/10/12 17:32:04
ネタ(?)に便乗して、質問。
そういう時タイマー(開始時間と経過時間)使って、
よく処理するんですが他に方法って有ります?
439デフォルトの名無しさん:04/10/12 17:37:58
最近どこかで同様の議論を見たが・・・どこでだったか・・・
440デフォルトの名無しさん:04/10/12 17:43:18
>>438
キー入力があるまでひたすら待て。
441デフォルトの名無しさん:04/10/12 22:58:15
>438
この辺とか
typedef enum _D3DSWAPEFFECT {
    D3DSWAPEFFECT_DISCARD = 1,
    D3DSWAPEFFECT_FLIP = 2,
    D3DSWAPEFFECT_COPY = 3,
    D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF
} D3DSWAPEFFECT;
442デフォルトの名無しさん:04/10/12 23:13:46
>>428
ポストフィルタってのは特定の処理を表す言葉じゃないって言ってるだろ。
メインの処理の後にフィルタ処理をすること全般を表す言葉。
ボケるかどうかはどんなフィルタをかけたかって話。

逆にクッキリさせるフィルタをポストフィルタとして使うこともある。
CGの場合は元々ボケないから、シェープネスフィルタをかけることはまずないが。

先にフィルタをかけるプレフィルタ(プリフィルタ)というのもあるが、
3DCGではまず使わない。(クリッピングがプレフィルタとも言えるが)
身近なところだと、圧縮処理の前に圧縮率を上げる目的でプレフィルタを
使ったりする。

そのボケてるのがどんな処理をしているのかは、フィルタ処理を勉強しろ。
画像処理と呼ばれるものがほとんどフィルタ処理だから、画像処理で
調べた方がいいかも。フォトレタッチソフトで各種フィルタを試してみる
だけでも、かなり参考になる。

深度によってボケ方が変わるのは、深度情報(Z値)によってボカしの
強度を変えてるだけ。細かい話をすると深度エッジ部分に問題があったり
色々と難しい話があるが。
443デフォルトの名無しさん:04/10/13 04:52:33
DirectXで垂直同期モードにするとSleepさせても
絶対60FPS出るんですがこれはどうなってるんでしょう?
444デフォルトの名無しさん:04/10/13 09:21:15
レンダリングパイプラインに明確に依存するポスト処理よりも
メインエンジン内でフィルタリングしたほうが幾らも良いのに

見た目も少し良くなる可能性がある
445デフォルトの名無しさん:04/10/13 16:00:26
>>443
質問の意図がよく分からないが。

垂直同期にあわせつつ、60FPSより下げる方法を聞きたいのなら、
・Sleepの値を増やす
・SleepではなくGetSystemTime、GetTickCount等で経過時間を
 計って調整する

60FPS以上で動作させたいのなら、
・リフレッシュレートを上げる

意表を突いて垂直同期自体が何なのか分かってないのなら、
詳しく書くと長くなるからググろう。
446デフォルトの名無しさん:04/10/13 17:50:09
ちゅうかそもそもsleep使ったってfpsそれ程落ちんだろ
ネタですか?
447デフォルトの名無しさん:04/10/13 20:11:20
sleep(1)で1msマチだから、17よりでかいの渡せば落ちるんじゃないかな。
レンダ処理がOSからのメッセージかコールバックで動作してるとダメだろうけど。
448デフォルトの名無しさん:04/10/13 20:25:18
高橋名人か
449デフォルトの名無しさん:04/10/13 20:30:48
あのデブは今何しているんだろうなあ。
450デフォルトの名無しさん:04/10/14 17:29:35
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が出てきたのでインクルードしてみても同じでした…
ライブラリの追加が必要なんでしょうか…?
451デフォルトの名無しさん:04/10/15 06:51:04
「全体的なお約束の一例」
・基本的にマイクグチソフトのサンプルはVC++でないとコンパイルは難しい
 (ボーランドのでコンパイル通るサンプルがあったとしても運が良かっただけ)


その他
・「C == C++」
 ("C"としか言ってないのに勝手に"C++"に置き換える奴がいる)
・「Cのソースを書いてる == VC++で書いてる」
 (全員VC++使ってると思ってる)


会社にあるものも勝手にコピーしてきて家に持って帰ってきただけなのに
自分の金で買ったわけでもないVC++を賛美
とか
452デフォルトの名無しさん:04/10/15 10:52:56
>>451
動画処理とカメラ使ったソフトを調べてたんですが、ネットで公開されてるものが、その辺りのサンプルを参考にしてたものばかりで…
同じエラーが出てきたので、何か方法があるかと聞いてみたんですが…おとなしくVS使います
(使い勝手が慣れないので、まだ殆ど使ってないです)
453デフォルトの名無しさん:04/10/15 13:43:56
つーかエラーの内容からしてBCCのせいじゃないと思うが
454デフォルトの名無しさん:04/10/15 13:55:57
足りないGUIDを自分で定義すればいいだけの話だが、
その程度のことすら出来ないのならBCCは使わない方が無難。
455デフォルトの名無しさん:04/10/15 17:41:01
>>450
guiddef.hのなかで
DEFINE_GUID(...)が定義されてるところをよく読め。
456デフォルトの名無しさん:04/10/15 21:11:23
DirectX初心者は特にVC++.Net買え
いや、マジで
普通に買っても一万ちょっと
学生なら安く買える
金がないとか言う香具師は遊ぶ金とか食費削ってでも買え
457デフォルトの名無しさん:04/10/15 21:14:02
それじゃ勉強にはならんな

VC++使って何か作れても


「わかったつもりになってる」


だけ
458デフォルトの名無しさん:04/10/15 22:08:44
VC++買う
なにかサンプルをサクっとウィザードでつくる
ちょっと凝った事をしようとするが、MFCが使い辛くて困る
勉強する
嫌気が差す
C#に乗り換える
459デフォルトの名無しさん:04/10/15 23:40:04
>458
いいんじゃね?
その程度の香具師なら何使ってもその程度だろうから
できる香具師はBCC使ってもいいんだけど、
BCC特有の問題とかめんどいからVC++の方がいいんじゃね?
460デフォルトの名無しさん:04/10/16 05:16:22
2Dゲームの場合、DirectXを使うと本当に速くなりますか?
あまり変わらないのなら、スクリーンの解像度と色深度のみをDirectXで
変更するだけにしようかと思うのですが、どうですか?


461デフォルトの名無しさん:04/10/16 05:51:45
正直GDIのほうが早い



8bitカラーなら
462デフォルトの名無しさん:04/10/16 11:59:39
GDI使うと、Win98あたりと互換性考える必要があって面倒じゃない?
463デフォルトの名無しさん:04/10/16 12:15:18
GDIに互換性がなかったら、一般アプリは軒並み問題が発生してるな。
初心者スレとはいえ、何故こういう馬鹿が発生するんだろう?
464デフォルトの名無しさん:04/10/16 13:57:45
この人は普段から16bitを超える座標系を頻繁に扱っていたんだろう。
465デフォルトの名無しさん:04/10/16 15:02:05
>正直GDIのほうが早い

便利機能を使うGDI+なら開発は早いってことだと思ったんでね。
DirextX9.0c使えるならそっちのが開発早いと思うが。
466デフォルトの名無しさん:04/10/16 15:31:32
>460
テスト用のプログラム作って試してみれば?
もし、まだDirectX触ってないんだったらいい機会だから触ってみれ
実際使うかどうかは別として
何事も経験
467640:04/10/17 05:51:33
>>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が変換された後のスクリーン座標の値を
取り出したいときはどうしたらよいのでしょうか。
469デフォルトの名無しさん:04/10/17 17:49:33
激しく無駄だけど自分で変換マトリクスを掛けてみる
470デフォルトの名無しさん:04/10/17 17:52:14
無駄以前に、それ以外に方法はない。
471デフォルトの名無しさん:04/10/17 22:16:19
なんか関数ありそうじゃん
ないんだ
472デフォルトの名無しさん:04/10/17 23:16:49
関数が用意されているいないにかかわらず、計算するのは一緒だが。
473デフォルトの名無しさん:04/10/17 23:21:22
>>472
474デフォルトの名無しさん:04/10/18 00:03:51
質問良いでしょうか?

皆さん描画システムどうしてます?
(D3DFrameでいうRenderのBeginSceneとEndSceneの間)
SetRenderState SetSamplerState SetTexture SetFVF
と設定周りを色々呼び出すわけですが「呼び出し回数が少なければ少ない程早くなる」のだと思います。
最低の呼び出し回数でやろうとすると当然ツリー状態になるのですが、
確保やら解放やらでそんなに速度は変わらないのではと危惧しています。

「じゃぁ、どっちも試して速度調べろよ」と言われそうですが、他の人のシステムも知りたいので書き込みました。
よろしこです。
475468: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);
476デフォルトの名無しさん:04/10/18 01:34:17
>>425
for (i = 0; i < 100; i++) if (p[i] == 0) printf ("p[%d] = 0\n", i);

これで1行だけど、入力・処理・出力を分けてないから気持ち悪いというわけだ
いまさらだけど
477デフォルトの名無しさん:04/10/18 02:07:10
>>475
ビュウポート行列を掛けないとスクリーン座標は求まらんと思うが?
478468:04/10/18 02:36:57
>>477
プロジェクショントランスフォームってのはパースつけるとこまでで、
その後更にビューポート座標に投影する変換が必要ってことでしょうか?
479デフォルトの名無しさん:04/10/18 02:44:16
漏れもやったことがなかったのでためしにやってみた
ちといじってみた
    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);
で見事予想した値が得られたのでこれで計算方法は間違ってないはず
これにアスペクト比を含めて考慮すればいいのかな
480479:04/10/18 02:45:53
カメラ位置が( 0.0f, 0.0f,10.0f )→カメラ位置が( 0.0f, 0.0f,-10.0f )
です
481468:04/10/18 04:28:36
>>480
わざわざすいません。
D3DXVec3Projectっていう関数を発見したんですが、
これで一発で出せたみたいです。
でも479で説明してもらった事があんまりハッキリ理解できてないので
後で困りそうですが・・・もうちっと勉強します。
なにしろありがとうございました。
482デフォルトの名無しさん:04/10/19 13:28:03
DirectXってリフレッシュレートの変更ができない環境のほうが多いと聞いたのですが
自分が持っていない環境のできる/できないはどうやって調べたらいいですか?
それを調べる関数やプログラム、まとめサイト、メーカー資料などありましたら教えてください
483デフォルトの名無しさん:04/10/19 14:17:05
リフレッシュレートを変えたがる奴は、ビデオカードが変更可能でも、
ディスプレイ側で表示不能だったらどうするつもりなんだろう?
ディスプレイにノーシグナル警告を表示させる嫌がらせソフトでも作りたいのだろうか?
484デフォルトの名無しさん:04/10/19 14:48:23
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サンプルのようにマウスとの当たり判定を取ろうとしてるんですが、
どうもメッシュがワールド座標の中心(初期位置)にあるときは
そこそこ取れているみたいですが(なぜだかちょっと誤差あり)、
移動させても判定位置はついていかず、中心に残ったままになってます。
486デフォルトの名無しさん:04/10/20 16:43:21
当たり判定ぐらい自分で作れば?
487デフォルトの名無しさん:04/10/20 17:22:09
>>485
判定する線を逆に行列変換すればいけるんじゃない?
488485:04/10/21 17:13:45
>>487
それはやってるつもりなんですが、うまくいってないっぽいんですよねぇ。
「カメラの位置座標」と「マウスのスクリーン座標をワールド座標に変換した座標」を
結んだ直線との当たり判定を取ってます。
マウス座標をワールド座標に変換するにはD3DXVEC3Unprojectを使ってます。
でもこの関数が返してくれた値がちょっとばかり変な様子です。
が、その正当性を検証する以前に、とりあえずお聞きしたいのは、
D3DIntersect関数は判定するメッシュを
D3DXMatrixTranslationで移動させたりしていたとしても
移動先の位置できちんと当たり判定を取ってくれのでしょうか?
という事であります。これが分からないもので、
どこが間違えてて思うような結果になっていないか当たりがつけられないんです。
489デフォルトの名無しさん:04/10/21 18:31:46
>>488
487さんの言っている事を理解できてないと思う。

D3DIntersectは対象のメッシュが持つ頂点座標そのままで判定する。
だから対象メッシュが別のローカル座標系に移動されているなら、当然そのままでの判定は無理。

これは判定する線も、そのローカル座標系に変換すれば簡単に解決。
具体的には対象メッシュを他の座標系に移した行列の、逆行列を使えばOK
490485:04/10/21 18:48:16
そういうことですか。なるほど分かりました。ありがとうございます。
ちょっと試してみようと思います。
491デフォルトの名無しさん:04/10/21 21:58:26
まぁようするに同じ土俵に立てと

WORLD座標系で比べるのが一番簡単かと
492デフォルトの名無しさん:04/10/23 08:16:13
「深度情報を参照するのは しんどー」

(深度情報を参照するのはつらいです)
493デフォルトの名無しさん:04/10/23 11:30:35
ワロタ
494デフォルトの名無しさん:04/10/23 21:24:25
そんなくだらないギャグ飛ばしてるから地震が起きるんだよ。
495デフォルトの名無しさん:04/10/23 21:28:31
地震がギャグのせいだというその自信はどこから?
496デフォルトの名無しさん:04/10/23 22:20:14

 殺伐としたスレに救急車が!

          ┌┬┬┬┐
    ―――┴┴┴┴┴―――――、
   /.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||
  /.    ∧// ∧ ∧| ||      |||   ||
 [/____(゚_//[ ].゚Д゚,,) ||___|||   ||
 ||_. *  _|_| ̄ ̄ ∪|.|.       |ヽ. _| |
 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軸に対してはずれは起こらないみたいです
498デフォルトの名無しさん:04/10/24 21:02:57
DirectX8というだけでどのインタフェイスを使っているのかすら書いていないが、
Direct3Dだとすると、まずDCを扱うメソッドは存在しない。
ということはウインドウから直接DCをとっているのだろうが、
そうだとするとDirectXと全く関係ないのでスレ違い。
499デフォルトの名無しさん:04/10/24 21:22:55
>>498
directx8のDirect3Dで描画したグラフィックとのずれが生じてるのでやっぱdirectxと関係があります
Direct3Dで座標(0,50)に描画したグラフィックと
DCで座標(0,50)に描いた文字列が見た目にy軸方向に少しずつずれて表示されてます

このためにグラフィックと文字の対応があやふやになって見にくいのです
500デフォルトの名無しさん:04/10/24 21:33:37
まず描画したものをキャプチャーして、
それぞれどの座標を指定したのかコメントを添えて提出しろ。
501デフォルトの名無しさん:04/10/24 22:05:42
>>500
画像見てもらえばy軸方向に数字がすこしずつずれていってるのがわかると思います
http://houjicha.mxx.jp/up/img/img20041024220414.bmp
丸の画像は(0,0)からy軸方向に32ドットの間隔で配置
数字も同様に(0,0)からy軸方向に32ドットの間隔で配置してます
502501:04/10/24 22:21:51
ウインドウの大きさを変化さすとそれに応じた割合で丸画像は拡大縮小されるけど
DCで書かれた数字は同じ位置に表示されたまま変化ないんだけど
それと関係あるのかな?
ウインドウの横幅と縦幅の初期設定と
directxの初期設定の
       // 横ドット幅設定
gl_d3dpp.BackBufferWidth
// 縦ドット幅設定
gl_d3dpp.BackBufferHeight
は全く同じにしてあるんだけどな…

なんでずれるんだろう?
503デフォルトの名無しさん:04/10/24 22:25:04
504デフォルトの名無しさん:04/10/24 22:33:52
>>502
つまり自分でウインドウサイズに合わせて、
描画するように指定しているだけの話だろう。
自らやっていることに文句を言うのは筋違い。
505501:04/10/24 22:36:52
>>504
どこをどういじればいいのか教えてください
506デフォルトの名無しさん:04/10/24 22:37:56
>>502
ウィンドウにはタイトルバーとかボーダーがあるの忘れてないか?
507501:04/10/24 22:41:30
プログラム実行後ウインドウの大きさを一切変えないでも
ずれるんで困ってます
508デフォルトの名無しさん:04/10/24 22:44:18
ウインドウのクライアント領域の大きさと、
デバイスサイズがずれているからだろう。
もはやDirectXの話とは無関係。
Windowsプログラミングの基礎からやり直せ。
509501:04/10/24 22:44:22
>>506
といいますとどういうことでしょうか?
510501:04/10/24 22:46:58
>>508
どこのスレで聞けばいいんでしょうか?
もしよろしければ誘導お願いします
511デフォルトの名無しさん:04/10/24 22:57:06
>>510
聞くんじゃなくて基礎からやり直せといっている。
コトバツウジマスカ?
512デフォルトの名無しさん:04/10/24 22:58:51
教えてあげればいいのに
513デフォルトの名無しさん:04/10/24 23:03:18
GetSystemMetrics
AdjustWindowRect
とか
DirectX 全然関係ないですね!
514デフォルトの名無しさん:04/10/24 23:06:00
システム情報を拾っても、メニューが二行になっただけで計算が崩壊するので、
普通は目的のサイズになるまで適当に繰り返すんだが、この話はスレ違いだ。
515501:04/10/24 23:24:52
>>513
AdjustWindowRect使ったらうまいこといきました

レスくださったみなさんありがとうございました
516デフォルトの名無しさん:04/10/25 13:23:15
DirectX9.0cで追加された

PS2.aと2.bは従来の2.0は何がどう違うんでしょうか。
517デフォルトの名無しさん:04/10/25 17:25:37
開発環境
:WindowsXP
:VC++6.0
:DirectX7 SDK

DirectDrawで320*240*16のフルスクリーンをやってみたけど、
全体的に画面がずれてしまいます。
マウスカーソルを一番右に寄せると、実際のディスプレイの右端から2〜3cm程度の箇所で、カーソルが止まってしまいます。
自分が作ったもの以外にも、フリーで流れてるソフトで320*240のフルスクリーンでも同じ現象が見られました。

EnumDisplayModesで、対応しているディスプレイを調べてみても、ちゃんと320*240*16は対応しているみたいなんですが…。
フルスクリーン時にプリントスクリーンして、ペイントに貼り付けてみたらちゃんと320*240になってました。
試しに640*480にしたら、ちゃんと描画されてました。

320*240で画面がずれるのは、うちの環境に限った事なんでしょうか?
もし、対処方があれば教えてください。
518デフォルトの名無しさん:04/10/25 17:27:25
>>517
ディスプレイの調節しろ。
519デフォルトの名無しさん:04/10/25 17:32:21
>>517
ここはDirectX初心者質問スレであって、PC初心者スレではない。
520デフォルトの名無しさん:04/10/25 17:44:03
>>517,518
すみませんでした。ディスプレイ調節したら治りました。
俺がアホでした…。OTL
わざわざ、ありがとうございました。
521517:04/10/25 17:45:07
アンカーミスった…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つのダイアログを表示する場合を
簡易的に説明します(引数は判断に必要そうなのしかかいてません)
523522: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);

以上のような手順でリソースを作成すると
問題なく表示されます。
524522: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);

以上のような手順でリソースを作成すると
問題なく表示されます。
525522:04/10/26 14:59:13
はう・・・523と5242重投稿になってしまいました;;すいません
526522: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のプログラム部分は画面を黒く塗りつぶす単純なものだけを入れて確認しました。
単一ウィンドウの場合は不具合なく動くのですが・・
527522:04/10/26 15:00:39
どうすれば解決できるのでしょうか・・?
フリーの3Dモデルビューワーなどでは結構やっているのをみるので、可能だとは思うのですが・・・
よろしくお願いします。
528デフォルトの名無しさん:04/10/26 16:16:10
デバイスを作るときはトップフレーム、
描画するときはサブウインドウを指定すればいいだけ。
529デフォルトの名無しさん:04/10/26 16:53:52
>>527
っ[ IDirect3DDevice9::Present ]
530デフォルトの名無しさん:04/10/26 20:29:47
ボクセルのデータをボリュームレンダリングするのに
ボリュームフォグをつかうと高速にできたりするんでしょうか?
現在はVTKというライブラリを使っているのですが そのなかでは レイトレーシング法での表示とテクスチャをつかった擬似表示があります
しかし あまりにも表示速度が遅いので(たった256*256*35のデータでも3FPS程度)
DirectXのHLSLあたりをうまくつかって高速に処理できないかと考えているのですがさっぱりわかりません
フォグがだめならピクセルシェーダでレイトレーシングさせたらCPUより高速にできやしないかとも考えているのですが できるんでしょうか?
ご教授お願いします
531 ◆Z0vd5w812U :04/10/27 14:18:20
>>530
GPUレイトレーシングは最近ホットな分野。
つまり、「できる」
532デフォルトの名無しさん:04/10/27 18:51:00
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省略
長すぎてごめんなさい。よろしければ情報お願いします。初心者なんで無礼かもしれませんが。。。
537530:04/10/28 11:59:56
>>532
今使ってるはただのPCです(まだ機能の検証段階なので)
VTKにはハードアクセラレーション機能はあるのですが
専用のハードウェアを搭載しないと使えないので ふつうのPC環境ではうごきません(ハード処理でもカクカクらしいです)
ボリュームレンダリングは基本的にレイトレーシングという光の進路を追跡して ボクセルデータを平面に映しこむ処理をするのですが
これは3Dグラフィックスの機能をなんら使用していないので CPUのみの力に頼ります
最近のGPUは非常に高速なのでGPUに処理をさせた場合どのくらいの結果が得られるのか
ゲーム技術を応用して 擬似的に高速な表示方法はないのかを考えているところです
なにぶん学部4年でCGの教育をまったく受けていないものでぜんぜん解っていないのですが 努力していこうと思います
538530:04/10/28 12:12:48
>>531
たしかにググってみるとものすごく熱くなってる分野であることが実感できました
最高レベルのGPUならそこそこのスピードが期待できそうなのでがんばって勉強していきたいと思います
539デフォルトの名無しさん:04/10/28 13:38:07
DirectInputに関して質問なのですが、パッドを入力装置として使用するにはどうすればいいのでしょうか?
SDKを読んでInputオブジェクトを作り、次にInputデバイスの生成まで理解できたのですが、
それから一向に分からないので教えてください。
よういされているゲームパッド用のクラスを宣言すればいいのでしょうか?
それとゲームパッドから入力された情報はどのような形式でどこに格納されるのでしょうか?
540デフォルトの名無しさん:04/10/28 19:06:14
>>533-536
マルチうぜー
541デフォルトの名無しさん:04/10/28 19:29:12
>>539
まずはキーボードかマウスの入力やってみたら?
542デフォルトの名無しさん:04/10/28 23:08:34
>>533-536
そんなに長くなるくらいならソース上げろ
あとマルチするな
543デフォルトの名無しさん:04/10/28 23:36:58
ワンショットでいいなら pSGrab->SetOneShot(FALSE); は 引数がTRUEじゃね?
544デフォルトの名無しさん:04/10/29 02:03:09
質問スレは公開デバッグセンターではない
545デフォルトの名無しさん:04/10/29 12:02:19
539です
マウスやキーボードはマニュアルに書いてある通りやればできるのですが
パッドやジョイスティックになると理解できなくなるんです。
パッド等の入力装置を使う場合には自分で設定したクラスを宣言しなければならないんでしょうか?
それともキーボードやマウス同様にもう既に準備されてるんでしょうか?
546533-536:04/10/29 12:11:26
長文すみませんでした。デバッガ使用しましたら無限ループしてるとこ発見しました。
みなさんありがとうございました。
547デフォルトの名無しさん:04/10/29 13:05:16
他にも言う事があるだろう。
548デフォルトの名無しさん:04/10/29 15:37:10
しつもんです
ttp://gamdev.org/up/img/1714.zip
上のファイルをVC6でビルドすると、外部参照未解決のエラーが出ます。
どうもD3DXMatrixPerspectiveFovLHメソッドを入れるとd3dx9.lib内でエラー
が出るのですが、原因とかわかりますでしょうか。

549デフォルトの名無しさん:04/10/29 15:58:04
>548
VC.NETだが普通にコンパイル通った
550548:04/10/29 16:11:31
あれー?(´・ω・`)
自分とこはこうでます

プロジェクト '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


(´・ω・`)
551デフォルトの名無しさん:04/10/29 16:20:56
>>550
DirectXのVC6用のExtrasパッチを上書きしる
552548:04/10/29 16:35:39
>>551
Extras落として上書きしたらビルドできました。
ありがとう!
553梅宮辰夫:04/10/29 19:31:51
シンボルッ
シンボルッ

外部のしん〜ぼる〜ぅぅ〜
554デフォルトの名無しさん:04/10/29 21:17:18
メッシュについての質問なのですが、
XファイルでFrameTransformMatrixに入っている行列は
参照したり変更したりできるんでしょうか?
プログラム中でメッシュオブジェクトを作って中身を入れる
サンプルというのはいくつかありますが、この行列の
扱いはどうなっているものかと。
555デフォルトの名無しさん:04/10/30 02:06:36
みんなXファイルとかメッシュとか結構使ってるんだな
556デフォルトの名無しさん:04/10/30 02:28:55
SDK落としたんですが、
有効なWin32アプリケーションではありません
といわれてインストーラが起動しないんですが、対処方法を教えて頂けないでしょうか?
557デフォルトの名無しさん:04/10/30 02:38:35
補足:
再ダウンロード、Irvineでダウンロード等やってみましたが、ダメでした。
558デフォルトの名無しさん:04/10/30 04:53:28
独自形式
となると自分でモデリングソフト作るか
独自形式のコンバーター作らないといけないし
手間掛かりすぎる
559デフォルトの名無しさん:04/10/30 09:06:54
>>556
プロキシ抜くとか
雑誌付録CD-ROMを探すとか
560デフォルトの名無しさん:04/10/30 11:53:49
DirectXを初期化するときに、描画する領域を指定する方法を教えてください
例えばウィンドウの描画領域が640×480のときに、
DirectXで描画する領域を
始点100, 100
幅 320
高さ240

とか、三面図+透視図のように描画する領域を4つにして
ウィンドウの画面全体にDirectXで描画する領域を4つにする
みたいなことがやりたいんです。
561デフォルトの名無しさん:04/10/30 14:11:28
DirectX8で点や線を描くにはどういう命令を使えばいいのでしょうか?
562デフォルトの名無しさん:04/10/30 16:04:58
>561
typedef enum _D3DFILLMODE {
    D3DFILL_POINT = 1,
    D3DFILL_WIREFRAME = 2,
    D3DFILL_SOLID = 3,
    D3DFILL_FORCE_DWORD = 0x7fffffff
} D3DFILLMODE;
563デフォルトの名無しさん:04/10/30 16:07:19
バイナリ実行するとき画面更新の頻度を無理やり半分とかに抑えるツールってない?
564デフォルトの名無しさん:04/10/30 16:12:26
ここはクレクレ厨房が書き込んでいいスレではない。
厨房板に帰れ。
565デフォルトの名無しさん:04/10/30 16:15:27
>>562
D3DFILLMODEを検索してみましたが
利用例が載ってないのでどうやってつかえばいいのかわかりません
使用例などを教えていただけないでしょうか
566デフォルトの名無しさん:04/10/30 16:17:51
使い方が分からない場合は、分かるまで試行錯誤を繰り返せば、そのうち何とかなる。
プログラムはそういうものだ。
567デフォルトの名無しさん:04/10/30 16:47:58
>>566
一つ例がないと取っ掛かりがないので試行錯誤しづらいです
568デフォルトの名無しさん:04/10/30 16:50:27
試行錯誤しづらいということ自体を、まず試行錯誤すればいい。
569デフォルトの名無しさん:04/10/30 16:58:44
DirectX8で画像の表示の仕方はたくさん載ってるのに
なんで点とか線の描画法は載ってないのかな…
資料がなさすぎです
570デフォルトの名無しさん:04/10/30 17:23:07
>>569
DrawPrimitiveUPあたりから始めれ
571デフォルトの名無しさん:04/10/30 17:28:41
>>570
ヒントありがとうございます
・RTS系のゲームで建物ユニットを置くときにメッシュが
 テクスチャと青っぽい色をブレンドしたみたいな色でレンダリングされたり
・MMO系のゲームでキャラクターとか落ちてる小物とかをマウス選択すると
 発光したような感じの色でレンダリングされたり
・アクション系のゲームでダメージを喰らった時に赤っぽく色が点滅したり
 
そんな感じで、読み込んだXfileに指定の色をブレンドしてレンダリングするには
どうしたらよいでしょうか。
DX9を使っていますが、ピクセルシェーダーとかは使わずに実現したいです。
573デフォルトの名無しさん:04/10/30 18:14:10
D3DPT_LINELISTはプログラムが勝手に点と点をつなげるみたいですけど
自分が意図した順番で点と点を線でつなぐにはどうしたらいいのでしょうか?
574デフォルトの名無しさん:04/10/30 18:53:25
普通は指示したとおりにしか動作しないのだが、>>573のところでは勝手に動くのか。
AI搭載の最新環境なんだろうな。
575デフォルトの名無しさん:04/10/30 20:24:49
>572
マテリアル変えればいい
576デフォルトの名無しさん:04/10/30 20:25:16
>>574
>>573の件は解決しました

頂点色が白以外だと表示したビットマップと頂点色がブレンドされてしまうんですが
ビットマップの色だけが表示されるようにするにはどうしたらいいのでしょうか?
577デフォルトの名無しさん:04/10/30 20:29:06
D3DRS_COLORVERTEX

てか一度ヘルプのD3DRENDERSTATETYPE 列挙型に目を通して
SetRenderStateでどういったことができるのか大雑把にでもいいので把握することをお勧めする
もしかしたらライティングもいじらないといけないかも
578デフォルトの名無しさん:04/10/30 20:31:36
おまえらゲームが完成するまで付き合わされるぞw
579デフォルトの名無しさん:04/10/30 20:42:40
付き合わされても結局完成しないに首ちょん一つ。
580デフォルトの名無しさん:04/10/30 20:47:15
>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
基本的に教える側も

センセイ方に学校で懇切丁寧に[教えていただいてる]セーガクなので

あまり難しいことや「習ってない」ことは答えられないので
あまり期待しないように。
584556:04/10/30 22:27:32
>>559
プロキシは入れてないんですが。
ミラーサイトみたいのないっすよね……M$じゃ。
585デフォルトの名無しさん:04/10/30 22:56:25
D3DXVECTOR3構造体にXYZを入れられるみたいに
HPB(or YPR)を入れる構造体ってないですか?
別に自分で作ってもいいのですが、
あれば使ったほうが便利だし統一性があってなんとなく気持ちよいので
使いたいのですが。
586556:04/10/30 23:27:36
すまん。結局実行出来ないみたいなんで、exeを解凍して、出てきたexeを更に解凍して、
CDのファイル構成の様な物が出てきたので、そこでやっとインスコ出来ました。
587デフォルトの名無しさん:04/10/31 01:47:25
ひとつ質問させてください。

DirectX9+VS.netでスプライト描画をしようとしているのですが、
先日SDKをアップデートしたところ
ID3DXSprite::Drawメソッドが「7個の引数は指定できません」
というエラーが出てくるようになってしまいました
アップデートする前はエラー等は全く無かったのですが・・・

pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,0,&vec2Position,0x55ffffff);
こんな感じの使い方してます。

MSDNの日本語ヘルプみる限りでは引数7個なのに・・・

どなたかご教授願えませんでしょうか(´・ω・)
588デフォルトの名無しさん:04/10/31 01:59:11
>>587
日本語DX9のヘルプは、アップデートしたSDKのヘルプとは違うものだろ
適合するヘルプを読め
589デフォルトの名無しさん:04/10/31 02:19:05
しかし2004/9/27作成の日本語ヘルプすら間違ってるってのは怠慢だよなー

>>587
これがGoogle検索だ!
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/directx9_c/directx/graphics/reference/d3dx/interfaces/id3dxsprite/draw.asp
590589:04/10/31 02:20:29
591デフォルトの名無しさん:04/10/31 02:23:40
>>588-590
ありがトン(´;ω;)

消えた二つの引数はどこで処理されるんだろう・・・
592587:04/10/31 03:46:06
たびたびごめんなさい
今度はスプライトが表示されなくなりますた・・・

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」
すでに両側でやってるはずなのですが・・・うーん?
593デフォルトの名無しさん:04/10/31 06:00:10
D3DX: ID3DXSprite::Draw called outside a *Begin/End* pair

BeginScene/EndScene じゃない。
ID3DXSpriteのメンバを良く見る。
594593:04/10/31 06:12:43
「BeginScene/EndScene じゃない」
だと、語弊があるか…。

BeginScene/EndScene
Begin/End
両方のペアが必要ってこった。
595587:04/10/31 15:45:16
>>593
ありがとうございました・・・
Beginメソッドいれるだけでできました。

pSprite->Begin(D3DXSPRITE_ALPHABLEND);
   (略)
pDevice->EndScene();
こんな感じで。

しかし、スケール情報と回転のための数値はどこへ・・・
596デフォルトの名無しさん:04/10/31 17:18:54
英語のドキュメントも見るようにした方がいいよ。DrawTransformでマトリクス使ってやるようになったんで。
最初は使いにくく思うかもしれんけど、マトリクス渡すだけで良くなったので3Dと合わせて使うのに便利になった。
597デフォルトの名無しさん:04/10/31 21:20:01
Summer2004なんですけど

この座標系ってどうなってるんですか
Drawでスプライト表示させるとき、座標を-で指定しないとちゃんと表示されないんですが



598597:04/10/31 21:30:33
アホだ
間違ってCenterに座標設定してた
ちゃんとドキュメント読んでこよ…

すみません
599デフォルトの名無しさん:04/10/31 21:43:33
あ、ほう。
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デフォルトの名無しさん:04/10/31 23:35:19
>>600
おい、人質を解放しろよ。
602デフォルトの名無しさん:04/11/01 00:01:57
>>601
ありがとうございます。VBを開放したらなんとなく大丈夫っぽくなりました。
ただそれ以外の部分もこれで正しいのかどうか自信がないのですが、
毎フレームごとにVB作って開放してって言うのを繰り返してよいのでしょうか?
もちろんハード性能にもよると思うのですが、
たった1000本ほどライン描画するだけでFPSが半分くらいになります。
そういうものって思ってよいのでしょうか。
603デフォルトの名無しさん:04/11/01 03:53:52
その関数を1フレームに1000回読んでるなら、1回で1000本分のバーテクスバッファ作って1回で表示するように。
そうしてるならスペック不足かなんかじゃないかな。リリースビルドにしてみたら?
604デフォルトの名無しさん:04/11/01 12:57:50
>>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でライン描いたら指定した色じゃなくて他の色が描かれたんですけどなんでですか?
そのラインは平行移動できるようにしてあるので他の点に接触したときにに点の色に影響受けて色が変化します
点に接していないときは勝手に消えて点に接触すると現れます
606デフォルトの名無しさん:04/11/01 15:56:19
>>605
ディスプレイ上の1ドットとバックバッファ上の1ピクセルが
1:1になってないような場合必然的にそうなると思われます

赤赤青赤赤 を4ドットで表現しなくてはならない場合
赤紫紫赤 になる という事と同じかと
607デフォルトの名無しさん:04/11/01 16:46:39
Xファイルのデータの構造みたいなのってどこかに載ってないんでしょうか?
608デフォルトの名無しさん:04/11/01 17:04:48
>607
>1
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
へるp
609デフォルトの名無しさん:04/11/01 18:15:49
>>606
お返事ありがとうございます
どうすれば1:1に対応さすことができるのでしょうか?
610デフォルトの名無しさん:04/11/01 19:49:03
危ないからさすなよ。
611デフォルトの名無しさん:04/11/01 20:20:42
ひょっとしてあれか
ちょっと前のあれと同じオチか…
612554:04/11/02 00:21:24
失礼しました。あの行列はメッシュオブジェクトとは別のものでした。
電波の缶詰さんのとこのサンプルでも、FrameTransformMatrixは
独立して扱っていました。

というわけで自己解決いたしました。
613デフォルトの名無しさん:04/11/02 05:40:11
フルスクリーンモードかどうかはどうやって判別するのですか?
タスク切り替えで勝手にウィンドウモードになって困ります。
614デフォルトの名無しさん:04/11/02 16:38:17
>>613
デバイスロストしたときの復帰方法が適当すぎるだけだと思われ
コピペじゃなくてちゃんと理解して書きましょう
615デフォルトの名無しさん:04/11/03 02:21:57
質問のしかたが合ってるかどうか・・・

256色の全画面モードでパレットをいじっているのですが、
IDirectDrawPalette_SetEntriesとかってチップによっては処理が遅くなりますか?
Matrox > S3 になってるのですが。
616613:04/11/03 02:59:42
>>614
理解できません。
617デフォルトの名無しさん:04/11/03 03:11:45
>>613
>タスク切り替えで勝手にウィンドウモード
ってのは、正常な動作じゃないの?
まぁ俺が質問の意図をよく理解してないのかもしれないが…。
618デフォルトの名無しさん:04/11/03 08:34:58
DirectXにはGDIにあるような円を描画する機能は無いのでしょうか?
619デフォルトの名無しさん:04/11/03 11:51:39
>>618
2DならバックバッファにGetDCしてそのデバイスコンテキストでGDI関数を使う。

3Dだと線で描く必要があったかと。
620デフォルトの名無しさん:04/11/03 12:39:22
というか堂考えても>>613の日本語がおかしい
621デフォルトの名無しさん:04/11/03 14:57:30
山岡さん!ケリー候補を慰める料理を考えて!
622デフォルトの名無しさん:04/11/03 14:59:01
誤爆スマソ
623613:04/11/03 23:07:34
>>617
あっ、そうなのですか。
では他のタスクがアクティブになってフルスクリーンモードが解除された後、
ゲームがアクティブになってもフルスクリーンになってくれないのは仕様なのでしょうか?
ウィンドウモードで最大化されて表示されてしまって良くないと思います。



では、フルスクリーンモードが解除された事はどうやって知ることができるのでそうか?
624デフォルトの名無しさん:04/11/03 23:32:10
>>623
ゲームがアクティブに戻ればまたフルスクリーンに戻るはずだけど…?
ウィンドウかフルスクリーンかは
D3DPRESENT_PARAMETERS の Windowed メンバで決まると
思うんだが、別にいじってないの?
625624:04/11/03 23:41:56
あ、デバイスロスト時にしっかり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度に分けます
627626:04/11/04 01:48:25
イメージは↓こんなかんじです.
ttp://up.isp.2ch.net/up/2543664e58c8.gif
実行結果は↓です.
左は,D3DXCreateMeshFVFの第一引数を3に,右は5に変えただけです.
ttp://up.isp.2ch.net/up/72cb2b2bcee3.gif
4に変えても左と同じ結果になりました.

頂点番号が順番に0,1,2,3,4となり,
インデックスバッファに頂点番号を指定して3つずつで1つの面を作っている.
と思っています.
そもそも理解が間違っているのでしょうか.
ご指摘お願いします.
628デフォルトの名無しさん:04/11/04 02:33:31
インデックスを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]
629628:04/11/04 02:55:48
↑のアンカーは>>626の間違いです・・・ orz =3

WORDに変更しても、カリングがでデフォルトのCCWのままだと
何も表示されなくなるので注意。

インデックスを時計回りで指定するか、
もしくはD3DCULLMODEをCW or NONEに設定する必要がある。
630デフォルトの名無しさん:04/11/04 07:29:57
DirectX9.0c Direct3D のサンプルの
CustomUI
って、
windows2000だとうまく動かないんですか?

付属のバイナリも文字化けするし、自分でビルドしてもダメポ。
631630:04/11/04 07:35:20
上げ忘れ。

環境は
win2000
DirectX9.0c
GF4Ti4200
アスロンXP
VC6sp6

です。
.NETも新しいの入ってるし・・・。

XPじゃないとだめなんですかねぇ・・・。

サンプルソースながめるとしますか・・・。
632630:04/11/04 07:36:01
いつもの癖で、ついまたさげてしまった・・・。orz

連投すいません。
633630:04/11/04 08:49:03
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というと欠陥エンジンが思い浮かんでしょうがないのですが。
635623:04/11/05 00:20:16
>>624-625
DirectDrawCreate(nil, DD, nil);
DD.SetCooperativeLevel(Handle, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN);
DD.SetDisplayMode(Width, Height, BitCount);
でディスプレイモードを変えているだけなのですが、
どうすれば復帰してくれますか?
636626:04/11/05 00:49:05
>>628さん
WORD *pIndex; に直し表示できるようになりました!
ありがとうございます.
637デフォルトの名無しさん:04/11/05 00:56:05
>>635
EXCLUSIVE と DDSCL_FULLSCREEN
はorじゃなく、必ず一緒に(and)するんじゃなかったっけ。
DD.SetCooperativeLevel(Handle, EXCLUSIVE | DDSCL_FULLSCREEN);

俺はDirectDraw7使ってるせいか、初めて見る記述なんであまり自信ないが。
638デフォルトの名無しさん:04/11/05 01:03:13
>>637
この場合は Bit毎の or なので、C言語の | と同じ意味です。
Cのand は & だったはず…。
639637:04/11/05 01:07:42
>>638
スマソ。もう寝るわ…。
640デフォルトの名無しさん:04/11/05 01:07:53
>>637
 "|" は "or" の意味ですよ。
DirectDraw7を使ってるせいじゃなくて、使ってない言語記述では?
641デフォルトの名無しさん:04/11/05 04:24:55
DirectSex!
642デフォルトの名無しさん:04/11/05 09:38:31
でも意味的には
andなんだよね
これだからマイクロソフトは
643デフォルトの名無しさん:04/11/05 09:51:04
べつにMSが悪いわけではないだろ。
644デフォルトの名無しさん:04/11/05 10:28:54
意味的にもANDじゃねー
ゲイツも関係ねー
基礎からやり直せと
645デフォルトの名無しさん:04/11/05 12:24:49
>>642の言ってるandは
「〜且つ」の意味ではなくて、日本語的な「〜と」のことを言っているのではなかろうか。

どっちにしても>>642はあまりプログラマっぽくないね。
646デフォルトの名無しさん:04/11/05 13:02:38
英語の A or B → A または B と区別がついてないんじゃないんかと
647642:04/11/05 17:48:12
それぐらいわかってるよ
>>645の言うように
これとこれっていう形だからandだろっていう意味

ビット単位のフラグまとめて一つにして渡す
てのは当たり前なんですか
648デフォルトの名無しさん:04/11/05 17:56:40
ttp://ew.hitachi-system.co.jp/p/r-logic.html
はい、復習してくださいね
649デフォルトの名無しさん:04/11/06 00:44:05
フルスクリーンなら排他的に決まってるだろ
と言いたいのでは?
650デフォルトの名無しさん:04/11/06 01:44:05
排他のときには正露丸を歯に詰めるそうですが

なんか意味があるんですか。
651デフォルトの名無しさん:04/11/06 02:26:42
痛みが一時的に治まる。
が、痛みのない間にますます虫歯が酷くなるのでやめておいたほうがいい。
バファリンとかもだ。

とっとと歯医者に行こう。
652デフォルトの名無しさん:04/11/06 02:30:56
>650
ぱっと見て何を言ってるかわからんかったが
歯痛的論理和ねw
653デフォルトの名無しさん:04/11/07 09:49:05
DirectX7の日本語マニュアルはもう手に入らないのでしょうか?
マイクロソフトのサイトにも8までしかないようなんですが・・・
どこか公開しているサイト知っていたら教えてください。
654デフォルトの名無しさん:04/11/07 10:25:24
>どこか公開しているサイト知っていたら教えてください。
それはつまり無断公開しているサイトを教えろということなのか?
655デフォルトの名無しさん:04/11/07 11:01:56
そうですが・・・
DirectX7時代の本いくつか持っているのでCDの中身みたんですが英語版しかないのです。
656デフォルトの名無しさん:04/11/07 11:05:36
DirectXはまったくの初心者でこれから勉強しようと思っている者です。

ある装置を監視するために、現在はMedia Encoderでストリーミング配信しているのですが、
監視を自動化するためにビデオキャプチャしている動画をリアルタイムで簡単な画像認識をしたいです。

キャプチャのサンプルソフトをMedia Encoderと同時に起動すると、
デバイスが他のアプリで使われているというエラーが出るのですが
どのように回避すればよいでしょうか?
657デフォルトの名無しさん:04/11/07 11:27:19
>>655
それで十分じゃないか・・・。
658デフォルトの名無しさん:04/11/07 11:49:24
>>657
一応英語は少し読めるけど日本語もほしい・・・
ウプしてくれる猛者いたらお願いします。
659デフォルトの名無しさん:04/11/07 12:32:28
>>658
英語嫁、以上
660デフォルトの名無しさん:04/11/07 12:51:15
読みにくかったり間違った日本語訳で誤解してしまうよりは英語のまま読んだ方が理解が早いはず
661デフォルトの名無しさん:04/11/07 12:54:51
わかりました。時間かかるけど英語の勉強だと思ってがんばります。
662デフォルトの名無しさん:04/11/07 12:57:04
日本語版は翻訳ミスが多いからなぁ・・・
663デフォルトの名無しさん:04/11/07 12:58:21
日本語になってないような日本語になってることが多いからなぁ
664デフォルトの名無しさん:04/11/08 06:39:31
directinputはマウスの座標じゃなくて移動量が取得できるんですね
GetCursorPos()でマウスの初期位置取得してから
初期位置にdirectinputで取得した移動量を加えて座標を求めることになるんでしょうか?
665345:04/11/08 16:35:34
gl_lpD3ddev->DrawPrimitiveUP(D3DPT_LINELIST, 2, hoge, sizeof(TLVERTX));

実行中にこの行で
.exe の 0x0044ee4c でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。 。

というエラーがでましたどうすればうまくいくのでしょうか?
666デフォルトの名無しさん:04/11/08 16:36:37
くだらない質問だとは思うのですが、ご教授ください。
winmm.libはどこにあるのでしょうか。
DirectX9.0SDKをつかってます。
667デフォルトの名無しさん:04/11/08 16:48:27
>>666
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib
668デフォルトの名無しさん:04/11/08 17:16:26
>>667
あっありました(泣
本当にありがとうございました。
669デフォルトの名無しさん:04/11/08 17:40:16
>>667
相手の環境わかるのか、すげー!!!
670デフォルトの名無しさん:04/11/08 19:21:33
>>669
つまんね
671デフォルトの名無しさん:04/11/08 20:34:43
>>665
マジで言ってるのかな。
gl_lpD3ddevがNULLなんだよ。
672デフォルトの名無しさん:04/11/08 21:11:11
>>671
ほんとです
どうすればエラーでなくなりますか?
673デフォルトの名無しさん:04/11/08 21:12:18
インスタンスがある状態にしろ。
674デフォルトの名無しさん:04/11/08 23:10:29
DirectX で Midi を演奏させれば、負荷が少なくなるのですか?
675デフォルトの名無しさん:04/11/08 23:36:07
>>673
やってみます
676デフォルトの名無しさん:04/11/08 23:44:48
というか理解してソース書いたか?
サンプル部分的にコピって動きませんってレベルな気がするのだが
677デフォルトの名無しさん:04/11/08 23:47:37
DirectIntputでマウスの位置座標を求める方法を教えてください
直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すそうなので
正確なマウス座標は求められないのでしょうか?
初期値としてGetCursorPos()で求めた座標に
GetMouseState()で求めた移動量を足していくことで座標を計算したのですが
うまいことできなかったので困っています
678デフォルトの名無しさん:04/11/08 23:49:08
>>676
少し手を加えてみましたけど…
679デフォルトの名無しさん:04/11/09 00:22:27
>>678
そこがまじぃんだよwきっとw
680デフォルトの名無しさん:04/11/09 00:43:57
>>677
Win32APIだけで瞬時に解決する問題で、
わざわざDirectInputを混ぜる理由は?
681デフォルトの名無しさん:04/11/09 00:55:20
>>680
DirectInputをどうしても使ってみたいんです
682デフォルトの名無しさん:04/11/09 01:30:36
>681
ワラタ
てかズッコケタ
683デフォルトの名無しさん:04/11/09 01:56:38
>>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();
685デフォルトの名無しさん:04/11/09 02:19:56
>>683
エラーとかは出ないのですけど
絶対モードじゃないです
実際のマウスの位置と>>677で求めた座標の位置がずれてるのでなんでかなと思っていろいろ調べてたら
直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すと書いてあったので
GetMouseState()が実行されてない間のマウスカーソルの移動量は計算されないから
その分だけずれるのかなとかおもったりしてます

もう一度ソース見直してみます
レスありがとうございます
686デフォルトの名無しさん:04/11/09 05:24:22
>684
デバッガはどの行をさしているんだ?
あとGetIndexBufferとGetVertexBufferで得たpIBとpVBがNULLでないことは確認できてるのか?
あとGetIndexBuffer、GetVertexBuffer、Lock、Unlock、Releaseの戻り値のチェックは?
687デフォルトの名無しさん:04/11/09 07:29:28
>>686
解決しました。
なんと、常時メッシュと当たってない時も上記の処理をしていた為、
面のインデックスを受け取ってなくて落ちてました。
メッシュと交差した時だけ上記の処理を行うようにしたら
きちんと取れてました。ごめんなさい。
688デフォルトの名無しさん:04/11/09 09:36:07
>687
てことは多分faceIndexに不正な値が入ってたんだろ?
エラーチェックのコードを入れてたほうがいいぞ
689デフォルトの名無しさん:04/11/09 11:14:10
実機用のTRIANGLESTRIPのバーテックスバッファがあるんですが、
DrowPrimitiveで表示させる場合ってやはり
ニ、三個くらいのプリミティブ毎にレンダリングするしかないんでしょうか?

実際パフォーマンスの問題と、実機用のソースの変更が必要になるため
避けたいなあと思っているのですが…
普通はどうするものなんでしょうか?

よかったらアドバイスお願いします。
690デフォルトの名無しさん:04/11/09 11:19:01
>>689
言ってる意味がわからん。
その「実機」ってのも何を指してるのかサッパリ。
691デフォルトの名無しさん:04/11/09 11:20:06
実機って何だ?
692689:04/11/09 11:47:21
実際のゲーム機です。
ゲーム機用のモデルをPCで表示させたいんす。
ハードによってはプリミティブの境目がわかる判別タグとか使って、
TRIANGLESTRIPのバッファを一回のレンダリング命令で表示できたりするんですが、
DirectXではそんなタグ使えないし、タグをとっぱらってただのTRIANGLESTRIPの
バッファとして使ってます。

で、だからただのTRIANGLESTRIPのバッファなんですが、
例によってTRIANGLESTRIPのバッファって細切れなので、
ニ、三個くらいのプリミティブ毎にレンダリングになってしまい、重いと。
693691:04/11/09 11:56:09
>>692
X箱でやったことあるが、縮退三角形を挿入して
DrawPrimitiveの回数を減らすとかじゃ駄目なの?
694デフォルトの名無しさん:04/11/09 12:10:58
TRIANGLESTRIPのバッファが細切れってどういうこと?
メモリ上に不連続にデータが並んでるの?
うまいことストライドで処理できないかな。
695691:04/11/09 12:18:20
>>692
変換行列・マテリアル・ステート等が同じで、
ストリップが細切れになってるだけの状況ならば、
無理やり繋げて描いた方がなんぼかマシだと思う。
インデックスバッファ未使用だと効率は良くないが・・・

>>694
> 境目がわかる判別タグ
から察するに、短いストリップが沢山あるということだと思う。
俺の勘違いかな?

ああ、もう出かける時間なので、あとは>>694よろしく
696689:04/11/09 12:18:46
どうもありがとうございます。縮退三角形の手法を勉強してみます。
697デフォルトの名無しさん:04/11/09 12:41:16
うおっ、よろしくされたよ。

なるほどね、タグ方式だからストライドが一定にならないわけか。
細切れストリップを繋ぎ直しするにも、頂点バッファがビデオメモリにあるなら
パフォーマンス激オチじゃないかな。
実際のところ、全部一括でDrawPrimitiveと、細切れDrawPrimitiveではどれくらい
パフォーマンスが違うの?
698デフォルトの名無しさん:04/11/09 12:50:16
何故自分で試そうとしない?
699デフォルトの名無しさん:04/11/09 12:56:38
試すよ。興味あるし。でも今すぐは無理だから聞いてみたんだよね。
700689:04/11/09 13:28:49
>短いストリップが沢山あるということだと思う。
そのとおりです、すいません。言葉足らずm(__)m

>どれくらいパフォーマンスが違うの?
全部一括って = 繋ぎ直し = 縮退三角形の方法ですよね?
繋ぎ直してやってみます、すまそ。
うーんどっちだろ。
実機よりもPCのが環境良いのに、細切れだと描画速度が実機の30%以下なので…
今は繋ぎ直しの方が魅力的に感じます。
701デフォルトの名無しさん:04/11/09 15:08:45
>700
漏れもかなりコマ切れのSTRIP扱ったことがあるけど、全然違う
なんで、こんなに重いかなと思ってデータみたらコマギレ…

もちろん縮退三角形で繋いだらツルツル動きました
702デフォルトの名無しさん:04/11/09 15:19:31
>700
前は繋ぎなおしのライブラリがnVideaにあった気がするけど今もあるのかな?
繋ぎなおしは非常に重いのでデータ読み込みの時にはしないほうがいいと思う
コンバータ作って、データ自体を変えたほうが幸せになれる
703689:04/11/09 15:50:44
おぉーありがとうございます。
データ自体変えてしまおうか迷ってて、きつかったらコンバータ作ろうと
思っていました。参考にさせていただきます。
704デフォルトの名無しさん:04/11/09 17:31:56
DirectX9はC++Builder6でも使えますか?
705デフォルトの名無しさん:04/11/09 19:16:08
706デフォルトの名無しさん:04/11/09 20:06:44
DirectDrawを使ってゲームを作っているのですが、
SetDisplayModeでフルスクリーンモードへ切り替えたときに、
画面がちゃんと表示されたかどうかを検出することって出来ますか?
(WM_PAINTは画面が表示される前に来るようです)

たとえば起動ロゴを表示する際、
完全に画面が切り替わった後で処理を始めたいと考えています。
現在は2秒ほど待つ処理を入れています。
707デフォルトの名無しさん:04/11/09 21:47:13
ここ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`)
708デフォルトの名無しさん:04/11/09 22:16:03
>>707
フリーのコンパイラ使うなら
Visual C++ Toolkit 2003
使ったほうがいいかもしれん。

あと、サンプル見てないからわからんけどソフトウェアエミュレーションで起動してるね・・・
CreateDeviceを検索してみ。
D3DDEVTYPE_HALに設定してないのかな??
・・・関係ないかもしれんな・・・
709デフォルトの名無しさん:04/11/09 22:30:00
バカばっかり
710707:04/11/09 22:52:12
>>708
Visual C++ Toolkit 2003ですか。
考えておきます...

ソフトウェアエミュレーション...?
多分、大丈夫かな…
よくじっくり見たら普通に動いてるのはD3DDEVTYPE_HALなんですが
重い動作してるのはREFでした('A`)
F2押してオプションっぽいところでHALに変えようとしたらREFしか...
始めから動作がスムーズなのは始めからHALになってるしオプションでREFにも変更できるんですが('A`)
なんか謎です…
October 2004よりも実はSummer 2004の方が良いってことは…ないか…。。
CreateDeviceを検索…サンプルのcppの中検索したらその文字ありましたが
普通に起動するやつと重いやつはそこは同じでした...
711デフォルトの名無しさん:04/11/09 22:54:44
ヴぃでおカードを最新にすれ
712707:04/11/09 22:59:11
あぁ。たしかに、オンボーでまだやってますたorz

有難う。
713デフォルトの名無しさん:04/11/10 01:38:47
オンボードは厳しいぜ
714デフォルトの名無しさん:04/11/10 02:02:36
てか、なぜにオンボード・・・
715デフォルトの名無しさん:04/11/10 03:22:27
当たらし目のサンプル類はハードウェアアクセラレートなくてもソフトウェアで処理できる場合はそっちで
なんとか立ち上がるようになってる。

速くならないのは使ってるPCがサポートしてないハードウェア機能を前提に作ってるからだね。

そろそろオンボードもピクセルシェーダまで対応しつつあるけど、まだ前提には作れんよなぁ。
716デフォルトの名無しさん:04/11/10 04:13:28
というかDirectXの勉強するつもりなら
安いのでいいから買おうよ
717デフォルトの名無しさん:04/11/10 13:55:05
DirectX9を始めて間もない者なのですが、
二次元配列を使用して円弧を作成しろという課題が出てしまったのですが、
いかんせん初心者な者でどう手をつけてよいのかわかりません。
どなたかご教授宜しくお願いします。
ちなみに、始点と終点と中心(半径r)を決めて始点と終点を結んだ扇形を作りたいです。
このとき中心から始点、中心から終点の線は表示しないで始点と終点のみを結びます。
あと、今DirectX グラフィックのチュ−トリアル4を参考に勉強させていただいてます。
宜しくお願いします。
718デフォルトの名無しさん:04/11/10 13:58:09
宿題スレにGo
719デフォルトの名無しさん:04/11/10 13:58:57
円弧をモデリングしてx-fileとして表示して終了。よかったね。
720デフォルトの名無しさん:04/11/10 14:06:56
扇形の頂点座標計算はできるのか?
バーテックスバッファを作って座標を順番にバッファにつっこんで、
DrawPrimitive。分かれば簡単だが、分かってないと途方に暮れるだろうな。
721デフォルトの名無しさん:04/11/10 14:14:15
>>710 ありがとうございます。

>>720 扇形の頂点座標計算は良くわからないのですが、
   教えていただけないでしょうか?
722デフォルトの名無しさん:04/11/10 14:45:21
>717
開始角じゃなくて始点なの?
指定する始点、終点、中心点、半径rに関して、(始点-中心点)と(終点-中心点)かならず半径rである保障はあるの?
723デフォルトの名無しさん:04/11/10 15:11:21
なんか線、正五角形、円、円弧と来てるね
724デフォルトの名無しさん:04/11/10 15:11:48
>>721
DirectX以前の問題だな。sinとcosを使った円の式はわかるか?
725デフォルトの名無しさん:04/11/10 15:18:59
そもそも2Dなのか3Dなのかもわからない
二次元配列を使うって書いてあるから2Dなのかとは思うが
726721:04/11/10 15:21:23
>>722
必ずしも半径rでなくてなはならいって事は無いです.

>>724
すいません数学が苦手なもので、ちょっとわかりません。
727デフォルトの名無しさん:04/11/10 15:41:01
>>726
>すいません数学が苦手なもので
(;´Д`)それじゃどうしようもないじゃないか
数Iの教科書から出直しましょう
728デフォルトの名無しさん:04/11/10 15:58:30
>726
>必ずしも半径rでなくてなはならいって事は無いです.
???
てことは↓もOK?
ttp://venus.aez.jp/uploda/dat/upload11609.jpg
729721:04/11/10 16:04:42
>>725
2Dです。
>>727
高校の教科書を引っ張り出して思い出しました。
申し訳ないです。
>>728
すいません逆です。半径rは必ずです。
730デフォルトの名無しさん:04/11/10 16:21:48
>729
>すいません逆です。半径rは必ずです。
いや、だから半径が必須だから、描画する曲線はかならずしも始点、終点を通る必要はないってことでしょ?
 始点をA、中心点をO、半径をrとすると
 ベクトルOAを正規化したベクトルをVとして
 本当の始点 = V * r + O
同様に本当の終点を先に求める必要があるってことだよね?
731721:04/11/10 16:27:18
>>730
はいそうです。
732デフォルトの名無しさん:04/11/10 16:44:12
ホントに宿題なんだろうか。宿題を解くための知識が全然無いじゃないか。
733721:04/11/10 16:54:35
申し訳ないです。もう一度出直してきます。
アドバイス下さった方ありがとうございますm(__)m
734デフォルトの名無しさん:04/11/10 16:56:32
sin/cosも分からないで円弧を描こうとしてたのか。。。
いやまあ、x^2 + y^2 = r^2からでも計算できるけどさ。
最近の学生ってこんなんばっかり????
735デフォルトの名無しさん:04/11/10 16:58:36
んなわけねぇだろ
721がどうしようもなく無勉強なだけ
736デフォルトの名無しさん:04/11/10 16:59:59
>731
じゃあ最初からそう書いてくれ
はっきりいってDirectX以前の問題
スレ違い
この課題をするにはあまりにも力が足りなさすぎる
だいたい突然この課題が出たわけじゃないだろ?
この課題につながるものをこれまでの授業でやってたはず
ついていけてなかったらこれを機に復習するなり先生に聞くなりしろ
個人的にはこれくらいできないなら、必須単位じゃないなら落として、もう受けるな
必須なら学校やめてしまえ、と思う
737デフォルトの名無しさん:04/11/10 19:05:16
友達にでも聞けばすむ問題のような気が・・・
OSがMEなんだけど
9bはもうダウンロードできない?
739デフォルトの名無しさん:04/11/11 03:34:58
>738
DLはできるのでは?
インスコはしらんけど
740デフォルトの名無しさん:04/11/12 11:42:00
ダウンロードできるかどうかまで
OSに決められてしまうのか…

さすがME
741デフォルトの名無しさん:04/11/13 13:58:02
すいません質問なのですが、DirectPlayのサンプルチュートリアルを開いて
デバックで実行しようとしたのですが
error LNK1104: コンパイラは、ファイル 'dplay.lib' を開くことができません。
とエラーが出て実行できません。

環境は DiextX9.0 Visual Studio.NET 2003   OS: XP
ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。
いろいろ調べてみたのですができないので教えていただけないでしょうか
742デフォルトの名無しさん:04/11/13 16:49:26
>>741
>>ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。
これをどういう意味で言ってるのか知らんが
設定をちゃんとしていないとか
調べが足りんとしか言えない

他のライブラリは問題ないのか?
743デフォルトの名無しさん:04/11/13 16:51:04
DirectX と関係あるの
744デフォルトの名無しさん:04/11/14 22:25:27
自作のコンバーターで作ったデーターをDX9・HLSLシェーダー2.0で表示しています。
データー内のサーフェス(マテリアル)ごとにできる限り最適なシェーダーを組み合わせたいのですが
このままだとシェーダー数が簡単に1000個を超えてしまいそうで、メンテ不可能です。
どなたか良い方法を知りませんか??
ヘルプを読むとID3DXEffectCompilerでのリテラル指定をしての最適化が怪しいと思うのですが
ID3DXEffectCompiler自体がまったく理解できませんTT
745デフォルトの名無しさん:04/11/14 23:18:17
D3DXLoadMeshHierarchyFromX について詳しい解説はないのかっ!
.Xファイルなんて使いたくないっつーの。どういう構造してんだこれ。
746デフォルトの名無しさん:04/11/14 23:18:29
>744
大杉
本当に必要なシェーダに絞り込むべきじゃないか?

もしコマンドラインでコンパイルしているなら/Dオプションでマクロが設定できる
マクロとifdefを上手く使えば一つのシェーダのソースから複数のシェーダを生成できる
違うシェーダといっても部分的には他のシェーダと同じってのも多いはずだから
そういったのをまとめて、違う部分をifdefを使ってわける
最終的には1000個でも管理するソースは100個くらいですむかもしれない
その場合makeとかバッチファイルとか併用したほうがよさげだが

あとはあんまりやりたくないがif乱用

まぁでも本当に必要なシェーダに絞り込むのが現実的ぽ
747デフォルトの名無しさん:04/11/14 23:19:26
>745
電波の缶詰で前に見た気がする
のぞいてみれ
748デフォルトの名無しさん:04/11/14 23:23:16
>>747
あー、あれね。うん、見た。
一通りググって出たサイトは見た。
でもSDKのSkinningMeshを使い回してるだけで、情報量としてはたいして多くないんだよね。
やっぱSkinningMeshを解読するしかないのか。
749744:04/11/15 02:12:11
>746
大変参考になります。
746さんの方法だとエフェクトとして使えるのでしょうか?
もしやFXCで複数のアセンブラソースを出力して、1つのエフェクトファイルにインクルード?
辛いけどやってみますTT
ifは使ってみたのですが、コンパイルすると分岐コードとして吐き出されず最悪の状態になりました。
たとえばボーンが0個とそれ以外(1〜4個)で1度だけ分岐させても、全て4個分のコードとして吐き出されました。
750デフォルトの名無しさん:04/11/15 03:18:42
>>749
動的コンパイル時にD3DXMACROで分ける。
それとif文がうまくいかないのは
分嵯に使ってるフラグがリテラルじゃないからじゃないか?
751744:04/11/15 09:36:37
>750
これまた参考になります。
やはり自分はEffectのヘルプの読み込みが不足しているみたいですね、
もっと読んで頑張ってみます。
752デフォルトの名無しさん:04/11/15 13:10:04
BMPbottunを押すと
そのBMPが拡大されるプログラムを作りたいんでダレカ優しい人教えてください
自分は拡大されたBMPが貼ってある新しいウィンドを開く方法でやっていmすが

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

753デフォルトの名無しさん:04/11/15 17:20:18
directx8でAOEのような高低差のある2Dマップの作り方教えてください
754デフォルトの名無しさん:04/11/15 17:20:22
初心者に最適は書籍あるいはwebページを教えてください
755デフォルトの名無しさん:04/11/15 17:41:08
自前でXファイルローダを作っています。
マテリアル部分の話なのですが、Specular、Emissive、Powerはそのまま読み込めました。

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

これだとなんだか、思った以上に明るくなってしまう気がします。
(といっても元の発色が不明瞭なのでなんとも言えないのですが)
かといってそれぞれを2で割ってみても暗すぎますし…どうするのが正しいのでしょうか。
756デフォルトの名無しさん:04/11/15 19:29:08
なんでdiffuseとambientだけ、デフォルトのテンプレが無いんだろうな
757デフォルトの名無しさん:04/11/15 20:07:39
>754
本屋にいって立ち読みしてコレいいかもって思った本がいいよ
いや、マヂで
解説がわかりやすいとか読みやすいとか個人差があるから、
自分の目でたしかめるのが一番いい
で最初は解説本をベースにしてやっていくと専門用語がでてきたりするから、
ネットではそういった専門用語をキーに詳しく調べていく
多分経験上これがいちばん効率がいい
758デフォルトの名無しさん:04/11/15 22:24:13
I/Oの本は三冊買うまで役にたたない事に気づきませんんですた
759755:04/11/15 22:28:00
>>756
そうなんですよ、なんだってこんな仕様に…。
昔はマテリアルのメンバにDiffuseとAmbientが無かったんですかね。
760デフォルトの名無しさん:04/11/15 23:02:15
マテリアルの色は、単色一つとスペキュラパワーで十分だろがボゲェ!!
By DirectX設計者

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

( ゚Д゚)ハッ!!
763デフォルトの名無しさん:04/11/15 23:20:56
RM時代から化石と化したフォーマットなど使わず、独自形式でやれ。
764デフォルトの名無しさん:04/11/16 00:48:01
>>763
そうしたいのですが、この形式で何かをするとかではなくて
この形式を読めなければいけないというジョブでして。

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

原因と解決法を教えてください
766デフォルトの名無しさん:04/11/16 08:51:45
どういうプログラムを組んでいるのかすら説明せず、ソースの提示すらしない。
他人はエスパーだという妄想でもいだいているんだろうか?
767デフォルトの名無しさん:04/11/16 09:02:01
>>766
ソースはサイズが大きいので提示できないです
DirectX8で線を描くプログラムで
頂点を設定してD3DPT_LINELISTで線を引くという単純なものなんですけど
ラインで繋がれる頂点の色はすべて同じなのにラインが3等分されたようなグラデーションがつくんです
3等分された両端が頂点色で真ん中だけが他の色になるんです
768デフォルトの名無しさん:04/11/16 09:31:47
ソースサイズが大きいのならそれは単純ではない。
まずはそれだけのための最小限のプログラムを作って試すこと。
769デフォルトの名無しさん:04/11/16 09:54:15
>>765
どこをどう考えてもオマエのプログラムミス。
FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
どうせその程度。
自分のプログラムを100回疑ってからDirectXとドライバを疑え。
770デフォルトの名無しさん:04/11/16 11:26:27
大抵、間違ってないっと思ってたところが勘違いであってると思い込んでる場合があるからな。
771デフォルトの名無しさん:04/11/16 16:34:58
傾いた地面に沿って物体を傾けたいのですが、どうしたらよいでしょうか?
地面の法線ベクトルはおそらく正しく求まっていると思うのですが、
これを使ってHPBの値を求めたいです。。
Bはそのままでいいと思うのですが、HPは一意に求まるんでしょか…
あたまがごっちゃになってきました。なるべく簡単な方法があればお願いします。
なにかDXでそれ用の関数とかあれば一番よいのですが。
772デフォルトの名無しさん:04/11/16 16:51:44
>>768
最小限のプログラムを作って試したところ
ビットマップと線を重ならないように表示させたのですが
なぜか線の色とビットマップの色がブレンドされてるんですけど
おかしいですよね?
>>769
>FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
これはどうやって調べればいいんですか?
>>770
そうですねたぶんそうだと思うんですがなかなかどこが間違ってるのか見つからないです
773デフォルトの名無しさん:04/11/16 17:06:32
>>772
>>FVF指定と構造体が一致してないとか、頂点バッファの大きさが不適切とか、
>これはどうやって調べればいいんですか?

どうしてこんな質問が出るんだ??????????
自分で作ったプログラムじゃないのか?
774デフォルトの名無しさん:04/11/16 17:16:21
>>773
プログラムの解説ページのプログラムをいじってるので
へんないじり方はしてないのであってるとはおもうんですが
775デフォルトの名無しさん:04/11/16 17:17:37
最小限にしたんだろ
ならソース見せてみろよ
776デフォルトの名無しさん:04/11/16 17:19:53
>>774
D3DFVF_なんとかいうとこを検索しろ。
その近くに、構造体宣言があるはず。
それらに矛盾がないか、構造体の宣言順番に問題がないか。
777デフォルトの名無しさん:04/11/16 17:22:57
>>775
600行近くありますけど見てもらえますか?
>>776
見てみます
778デフォルトの名無しさん:04/11/16 17:25:13
理解はしてないのに
へんないじり方してないからあってる

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

重なってないのになんで色がブレンドされるのかわかりません
780777:04/11/16 17:58:34
パスワードは”1116"です
781デフォルトの名無しさん:04/11/16 18:04:34
なんだ、SetTexture(0, 0)してないだけじゃねえか。
782デフォルトの名無しさん:04/11/16 18:12:01
SetTexture(0, NULL)かな

色の違いがさっぱりわからんですが
783782:04/11/16 18:13:47
更新してなかったorz

しかし600行ってほとんどコメントなのね
784777:04/11/16 18:19:59
>>781
>>782
>>783
おかげさまで不具合がなくなりました
ほんとうにありがとうございました
785デフォルトの名無しさん:04/11/16 18:21:31
ていうか
gl_lpD3ddev->SetVertexShader(FVF_TLVERTEX);
ってなんなんだよw
gl_lpD3ddev->SetFVF(FVF_TLVERTEX);
の意?
786785:04/11/16 18:31:03
あぁ、これでもいけるのか、無知すまそ。
787777:04/11/16 18:31:37
>>785
プログラム解説のHPから拝借したので詳しくわかりませんw

調べてみたところ

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

HRESULT SetVertexShader(DWORD Handle);

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

だそうです
788785:04/11/16 18:42:42
>>777
DirectX8 か、はやとちりした… orz
ちなみにDirectX9の場合は SetFVF(FVF_TLVERTEX)にする必要があるよ。
789デフォルトの名無しさん:04/11/16 19:12:38
質問ですけど
2Dの描画って頂点バッファつくってテクスチャ貼って表示するのが主流なんですか?
スプライトで表示するのって少数派?
790デフォルトの名無しさん:04/11/16 19:37:03
>789
スプライトに相当するものはもうないので、
それしか方法はない
D3DXSPRITE(だっけ?)のことを言ってるんなら
内部では結局頂点にテクスチャはってる
最初は練習の意味もかねて簡易スプライトクラスみたいのを作るといいと思う
最初は指定矩形に表示して、あとで回転とか移動とか拡大縮小とか、
マルチテクスチャとかシェーダとか、少しずつ機能を増やしていけば勉強になる
そのあとずっと使えるし
791デフォルトの名無しさん:04/11/16 19:37:37
>>789
大抵の場合古き良きDirectDrawを使う
792デフォルトの名無しさん:04/11/16 20:15:27
>>790>>791 thx
とりあえずDrawPrimitiveに移行してみます
挫折したらSDLでもやってみるか…
793デフォルトの名無しさん:04/11/16 21:46:59
>>791
スプライトは仕様がコロコロ変わりそうで実際変わってるので
DirectDrawを使うのが当分いい具合。
794デフォルトの名無しさん:04/11/16 22:42:51
そういえばDirectShowのところにIDirectDrawというのがあるんですけど
これを使うんですか?

それとも古いバージョンのDirectXを指してるんですか?
795デフォルトの名無しさん:04/11/16 22:59:59
古い方。
796デフォルトの名無しさん:04/11/16 23:03:59
>794
最新のSDKにもちゃんとddraw.h入ってるから使えるだろ
797デフォルトの名無しさん:04/11/16 23:48:50
(゚Д゚ ) ダイレクト ドロー・・・。
ノヽノヽ
  くく

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

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

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

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

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

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

あと
>それをやったけど
こういった他人に通じない抽象的すぎる言葉は極力避けなさい
具体的に書かないとわかりません
804デフォルトの名無しさん:04/11/17 23:27:42
アホのお約束

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


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

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

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

(自分で振っといて「それ」の対象を理解できないチョン)
805デフォルトの名無しさん:04/11/17 23:30:10
DirectXも全然関係ないし、チョンなだけ
806デフォルトの名無しさん:04/11/17 23:32:55
「DOSモード」と「リアルモード」は違うんですよ








みたいな感じ
807デフォルトの名無しさん:04/11/17 23:49:09
DXSDKをインストールして初めてのコンパイルでエラーした時
「ヘッダとライブラリへのパスをとーしてねーんだよ!!氏ね!!カス!!」
と表示されるウイルスきぼん
808デフォルトの名無しさん:04/11/17 23:54:46
やけに親切なウィルスだなw
809デフォルトの名無しさん:04/11/18 00:06:26
プログラムはC言語を今日から始めます
って人でもPC使ってて
>>ファイルを開けません。'd3d9.h': No such file or directory
こんな如何にもDirectX関係のファイルですって名前のファイルが
ありませんとか言われたら

インストールか設定に問題があることぐらい察しがつくと思うのだが
810デフォルトの名無しさん:04/11/18 00:07:07
いや無理だと思う
811デフォルトの名無しさん:04/11/18 01:12:31
警告やエラーが英語だと無条件で読まない奴がいるからな
全然難しい英語じゃないのに
812デフォルトの名無しさん:04/11/18 01:55:53
文でなくて図と認識すんだな。
813デフォルトの名無しさん:04/11/18 04:42:12
おまえらは初心者じゃないみたいだし、初心者の質問にも答える気がないなら
そろそろスレを移動する時期だ。
814デフォルトの名無しさん:04/11/18 09:07:48
>813
質問には>800で答えてる
815デフォルトの名無しさん:04/11/18 10:37:01
>>813
ここはDirectXの初心者質問スレであって
>>798のようなVC++初心者質問スレではない
816デフォルトの名無しさん:04/11/18 18:50:06
メッシュを読み込んで表示するまでは出来たんですが、
メッシュを回転して表示するにはどうすればいいんでしょうか??
817デフォルトの名無しさん:04/11/18 19:13:51
行列作ってセット
818デフォルトの名無しさん:04/11/19 11:57:28
>>816
ワールドトランスフォーム行列に回転行列をかける。
つまり、

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

とする。
819デフォルトの名無しさん:04/11/19 12:14:14
「行列のできるプログラマ」
820デフォルトの名無しさん:04/11/19 23:25:46
Direct3Dの行列は転置してるのが気に入らない。
なんであんな仕様に?
821デフォルトの名無しさん:04/11/19 23:33:27
左手座標系が気に入らない
822デフォルトの名無しさん:04/11/19 23:45:29
PS2は左足座標系だ。
823デフォルトの名無しさん:04/11/20 00:35:18
華麗に822をスルー
824デフォルトの名無しさん:04/11/20 01:36:14
#if 0
    >>822-823
#endif
825デフォルトの名無しさん:04/11/20 04:19:16
文字表示の方法がわからないのですが・・・
D3DXCreateFontで作った後、
DrawTextを用いればよいのでしょうか?
826デフォルトの名無しさん:04/11/20 04:27:14
>>820
頂点シェーダかSSEでマトリクスxベクトル書いてみれば分かる
827デフォルトの名無しさん:04/11/20 10:38:55
DirectX8で1フレームごとに画面を全部書き換えたほうがいいのか
変更のある部分だけ書き換えた方がいいのか
どっちがいいのでしょうか?
画面内でたくさんのキャラクターが動き回るようなことを想定しています
828デフォルトの名無しさん:04/11/20 10:55:30
>827
どうせZバッファクリアしなきゃいけないから漏れなら全部消す
多分速度的に問題が発生したら、そんなところよりも他で稼げるところがあるはず
どうしても60fpsキープする必要があって、ほんのあとちょっとで60fpsがキープできるのに
ってことになったら試してみる
829デフォルトの名無しさん:04/11/20 11:14:05
どのみちたくさんのキャラクターが動き回るなら
変更のある部分だけなんて
やってられなくなると思うが
830デフォルトの名無しさん:04/11/20 12:05:00
カメラが1度傾いただけでも全画面更新なのにアホな質問だな。
こんな想像力もないんじゃもうプログラマなんて辞めた方がいい。
どの道、この先何をやっても駄目。
831デフォルトの名無しさん:04/11/20 12:36:24
視点移動するとは書いてないけどな
832デフォルトの名無しさん:04/11/20 12:44:18
視点移動が行われない可能性を想像できなかったんだろ
833デフォルトの名無しさん:04/11/20 12:46:24
D3DXSPRITE(だっけ)みたいのでも使って2Dやってるんじゃないかな
834デフォルトの名無しさん:04/11/20 13:00:35
つまるところ、シェーダって何なのですか。

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

というのですが
835デフォルトの名無しさん:04/11/20 13:09:56
他人にいちいち聞かないで、実際に使ってみること。
836デフォルトの名無しさん:04/11/20 13:41:42
>834
最近は初心者本でもシェーダまで取り扱ってるから
読みながらやっていったほうが早い
C++なんかに比べれば難しいものでもないし

ただし、ちゃんと対応したハードウェア上でやってくれ
最低でもげふぉ5200かな
837デフォルトの名無しさん:04/11/20 13:47:02
>>836
あれはゲフォと読むのかジーフォースと読むのか
どっちなのか迷ったがゲフォの方がヒット件数があまりにも多いのでゲフォでいいのかとか
思ったがやっぱりジーフォースって読むような気がするんだよね。

っていうか、セミナーとか言ってみたひとに聞きたいんだけど
外人ってGeForceのことなんて読んでた?
838デフォルトの名無しさん:04/11/20 13:48:18
外人は差別用語。
839デフォルトの名無しさん:04/11/20 13:52:05
>>838
じゃあ、外国の人
つーか、そんなんどうでもいいよ。
俺はジャップでも甘んじて受けるぞ。
840デフォルトの名無しさん:04/11/20 14:06:53
概念を知りたいんじゃないの

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

何のどういうプロセスを踏んで何を描画するのか
そういう作動方式と言うかそこまで伝わってないのが現状
841デフォルトの名無しさん:04/11/20 14:22:43
じゅふぉせ
842デフォルトの名無しさん:04/11/20 15:20:04
>>834
シェーダってのは、各頂点・ピクセルで行われる計算
(頂点単位での法線とライトの内積計算とか、
ピクセル単位でのテクスチャと頂点カラーのブレンドとか)を
専用の言語で自分でプログラムすることだと思う。
これに対してハードウェア備え付けの計算機能を、固定機能…って言うかな。

元々はバンプマップとかのシェーディング(陰影づけ)のための
ものだったけど、今では陰影づけと関係ないこと
(頂点ブレンドとか輪郭抽出とか)にも使われるので、
"シェーダ"という単語の意味からは離れてる気がしないでもない。
(OpenGLでは頂点プログラム・フラグメントプログラムっていってた気がする。)
843デフォルトの名無しさん:04/11/20 15:22:56
>840
だって素人さんに説明するの難しいんだよなー

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

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

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

ちょっと素人さん用に強引な説明だが、まぁそんな感じ
844デフォルトの名無しさん:04/11/20 15:34:07
>>843
ほうほう。
シェーダについて少し調べた後なら、その説明はわかりやすいかも。
それにしても、プログラマブルシェーダはおもしろそうですな。
けど、バージョンごとで書き分け必要でめんどくさそうですな。
845デフォルトの名無しさん:04/11/20 15:45:42
>844
こういうのは下位互換が前提だからね
バージョン1.0のシェーダはバージョン2,0に対応したハードでも動く
逆はもちろん無理
これからは使用シェーダのバージョンで最低動作環境が決まってくるのかな
バージョン1.0のピクセルシェーダはもう書きたくない
行数少なすぎ
846デフォルトの名無しさん:04/11/20 15:52:43
素人にもわかるようにカタカナを使わずに説明してくれ。
847843:04/11/20 16:02:59
>846
そう思ってカタカナというか専門用語は極力はずしたつもりなんだが…

これ以上は漏れには無理

ttp://www.microsoft.com/japan/msdn/directx/welcome/dsmsdn/directx01152001.asp
これよりはわかりやすいと思うが
848デフォルトの名無しさん:04/11/20 16:05:35
>>845
あぁ、やっぱり1.0はつらいのか・・・かなり少なそうな気がしてたから分割するのかな?とか思ったよ。
>使用シェーダのバージョンで最低動作環境が決まってくるのかな
動作環境高くなりそうだねぇ・・・
849デフォルトの名無しさん:04/11/20 16:25:20
>>845
上位互換と下位互換を混同するな。
850デフォルトの名無しさん:04/11/20 16:35:37
>>847
いやただのネタです。
すみません。
851デフォルトの名無しさん:04/11/20 16:39:54
852デフォルトの名無しさん:04/11/20 17:05:00
PS2でPSのソフトが動く(厳密にはちょっと違うけども)のが上位互換
これで覚えろ
DirectXやピクセルシェーダーも同じく

下位互換はレアなのだよ
853デフォルトの名無しさん:04/11/20 18:35:14
バージョンがどうとかよりHLSLが使えるかどうかのほうがでかいとおもうね。
854デフォルトの名無しさん:04/11/20 19:20:45
>>853
HLSL使えても
バージョン無視で何でもアセンブル通ると思ってる?

マイクロソフトの開発チームにバリバリ頑張って貰わないとなぁ
855デフォルトの名無しさん:04/11/20 19:37:37
>>854
とりあえず1.1でやってるけど一通りのことはできるからね。
バンプ、環境、影、スキン、αブレンドなどやその他もろもろとかそれだけかよって感じだけど
これだって他のシェーダ同士の組み合わせとかモデリングツールからもってきたり
デザイナに足りないところを設定してもらったりしても結構面倒な作業だよ。
あと、バージョンが増えてもライトがいくつ使えるかってところだけで
他にはなんもないよ。(俺にとっては)
856デフォルトの名無しさん:04/11/20 20:38:24
PS1.3では1ライトで限界だったな。
俺の中ではPS1.xは無かったことになってるよ。
こんなもんに対応する為に悩むなんて時間の無駄。
857デフォルトの名無しさん:04/11/21 03:30:12
スキニング変形を加えた後のモデルに対し、「正確な」当たり判定を
する必要があるのですが、これをスマートに実装する方法はあるのでしょうか。

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

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

いっそ最初から、通常描画も全てソフトウェアスキニングにしてしまおうか迷っています。
なんとかハード側がスキニングしてくれた後の頂点座標データにアクセスできないでしょうか。
858デフォルトの名無しさん:04/11/21 06:24:45
>>857
それって要約すると
描画でスキニングして、なおかつ当たりが発生したら
変換前の頂点を自前でスキニングさせて、その座標で当たり取ってるって事だろ。

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

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

それと、当たりの”正確な”って意味にもよるが
普通は当たり用の別な形を用意するんじゃない。
例えば人物の二の腕、腕、拳とカプセル体を仕込んでおいでスキンニングと同じ変形をかければ、
そのカプセル体との当たり判定で大体正確な当たりになると思うけど…
処理の理由でモデルと同じポリゴンじゃなきゃ駄目ってなら、素直に当たり取るしかない。
ただ全判定なんてアホな事は当然してないよね?
オクトツリーなりで空間分割してって当然だよね。
859857:04/11/21 08:05:42
>>858
二重についてですが、今は描画時のスキニングをHLSLで任せているんです。
あくまで描画の頻度に比べてですが、当たり判定の頻度が少ないので、こういう処理にしていました。

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

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

D3DXは使って無いんです。それでもUpdateSkinnedMeshは試し、変換後のバッファを
取得してみましたが、これだと自前と大差無いどころか、融通が効かないのと初期化分駄目でした。
オクトツリーというか、モデルなのでBoundingBoxは作成しています。
860デフォルトの名無しさん:04/11/21 11:03:25
> 二重にスキニング計算してるって…
> これを分ってても分ってなくとも致命的な発想の欠陥だよ(プログラマ向いてないよ)

オレも知りたい
ここまで言い切ってるとナンカ気になる
861デフォルトの名無しさん:04/11/21 11:33:43
最近 >>830 とか >>858 とか、頭が極端なやつが多いな
862デフォルトの名無しさん:04/11/21 12:03:49
3点を通る円を作りたいのですが、
どのようにをプログラムを作ったらよいかどなたか教えてください。
・分かってる点、始点(X1,Y1)中点(X2、Y2)終点(X3,Y3)です。
円弧は円のみではなく始点から始まって終点まで描画する円弧も作成できるようにしたいです。
・(X-X0)^2+(Y-Y0)^2=r^2の式を使って連立方程式を立て中心(X0,Y0)と半径rを求めたいです。
863デフォルトの名無しさん:04/11/21 12:06:53
>>862
円はそれだと始点=終点で2点しか出来ないから無理
864862:04/11/21 12:16:12
>>863
 じゃあどうしたらよいのでしょうか?
865デフォルトの名無しさん:04/11/21 12:19:21
drawCircle()drawArc()と分ける。
866デフォルトの名無しさん:04/11/21 12:19:36
すごい宿題っぽい質問だ
867862:04/11/21 12:23:40
分けるとは?
868デフォルトの名無しさん:04/11/21 12:30:29
日本語すら分からないとはいったい何人なんだか。
ほらよ。
http://dictionary.goo.ne.jp/search.php?MT=%CA%AC%A4%B1%A4%EB&jn.x=37&jn.y=12&jn=%B9%F1%B8%EC&kind=ej&mode=0
869デフォルトの名無しさん:04/11/21 12:30:46
とりあえずスレ違い、むしろ板違い
数学の問題

つーか数Bレベルだよw
870862:04/11/21 12:38:43
drawCircle()drawArc()ってのがわからないんですが…。
871デフォルトの名無しさん:04/11/21 12:51:23
それは頭が悪いから。
872デフォルトの名無しさん:04/11/21 12:51:41
873862:04/11/21 12:56:18
>>872
ありがとうございます。
874デフォルトの名無しさん:04/11/21 14:07:07
ゲームなどのBGMの再生に DirectX Audio って使ってますか?
それともmidi関連のマルチメディアAPIなどを使っているのでしょうか。

DirectXAudio を、サンプルを見ながら何とか使ってみてはいるのですが
まず再生までの手続きが複雑で気が滅入ります…w
1曲のロード時間も長く、また描画にかなりマシンパワーをとられて
しまっているので、曲を再生すると相当な負荷がかかってしまいます。
この際、音質の良し悪しはあまり重要視していませんので、
この辺を軽くする設定はありますか?
875デフォルトの名無しさん:04/11/21 14:24:21
出力ポートをソフトシンセ以外のところに切り替えるだけで軽くなる。
どこに切り替えるかはユーザに選ばせればいい。
876デフォルトの名無しさん:04/11/21 15:25:25
>>875
なるほど、このへんですかね…
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdx8_c/hh/directx8_c/_dx_using_directmusic_ports_dxaudio.asp
そうすると、Performance に対して特にポートの設定を
していないときは、デフォルトのポートはソフトシンセに
設定される、ということなのでしょうか (環境によって
違うのですかね)。

ともあれもう少し調べてみることにします。
情報ありがとうございます
877デフォルトの名無しさん:04/11/21 19:31:38
ドライバの動作状況、
例えば演算器やシェーダのマネジメント状況ってDirectXで採れますか。
878デフォルトの名無しさん:04/11/22 02:34:04
頂点シェーダというのは
描画の際に必須なんでしょうか?
サンプルを自分のプログラムに組み込むと
失敗している関数がないのに何も表示されません
(サンプルの頂点シェーダを使っても同じです)
879デフォルトの名無しさん:04/11/22 07:26:47
>878
そのプログラムでシェーダをロードしている場所があれば使用しているシェーダが読み込めるようにしてください
不具合が出ても自力で解決できないようなものは組み込むべきではないと思います
880857:04/11/22 07:31:23
>>858氏はもう見てないんだろうか
結構切実なんで、どういうのが念頭にあったのか皮肉抜きで教えて欲しいのですが
もう他では時間稼げそうにないなり…
881デフォルトの名無しさん:04/11/22 08:01:37
>>858はきっとスキニングに使用する行列で球等の簡単な判定オブジェクトを変換して、それで判定しろって事じゃないですかね。
前半のアドバイスの意味はわからんけど。
ただ、正確な判定が欲しいなら必要な時のみソフトウェアで頂点変換するのが速いかと。
882857:04/11/22 08:37:34
>>881
今時面レベルでの当たり判定というのは珍しくなさそうですが、
やはり「ソフトウェアで頂点変換」の部分はどこもあるんですかねぇ…

しょうがないので気が重いですが最後の手段、プログラム側で作ってた
判定オブジェクトを手動にしてもう少し頑張ってみます…お付き合いありがとうございました
883デフォルトの名無しさん:04/11/22 09:53:39
884デフォルトの名無しさん:04/11/22 13:23:29
LightWaveのレイアウトで、ピボットを使わずに
物体を移動させる時の事を想像して欲しいのですが、
パースビューでは(視点の位置に関わらず)、
マウスを左ボタンドラグで「上・下」に動かすと
物体が「奥・手前(Y座標は固定)」に動くし、
「左・右」に動かせば「左・右」に動きますよね。

マウスの動きを入れた2次元ベクトル(スクリーン座標)を
どうやって変換したらそのような動きを再現できるでしょうか。
イメージとしてはモニターの平面を、ワールド空間のxz平面に倒すような感じで
投影(?)射影(?)すればよいと思うのですが、
どのように座標変換したらよいか教えてください。
885デフォルトの名無しさん:04/11/22 14:25:06
LightWaveのことは知らないけど、つまりマウスを左右に動かせば
カメラから見た左右に動くということ?

じゃカメラの向きのベクトルとアップベクトルがあればカメラから見た横方向のベクトルは作れるので
マウスの左右の移動量と横方向のベクトルを使って移動ベクトルを作ればいいだけでは?
886デフォルトの名無しさん:04/11/22 15:25:36
UVって何スカ?紫外線スカ?
887デフォルトの名無しさん:04/11/22 15:34:59
カメラの位置から注視点へのベクトルと垂直なベクトルを用意するだけでは?
888デフォルトの名無しさん:04/11/22 15:52:59
>LightWaveのことは知らないけど、つまりマウスを左右に動かせば
>カメラから見た左右に動くということ?

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

とりあえずマウスのスクリーン座標をD3DXVec3Unprojectで
逆変換してベクトルを作ってみたんですが、これでは当然、
カメラ(視線)がワールド空間上でXZ平面に対し平行に近い場合、
マウスを上下に動かしても、物体はカメラから見た奥・手前方向にはよく動きませんでした。
(横方向には動きますが。)
889デフォルトの名無しさん:04/11/22 15:58:48
ものすごく煽りたい衝動に駆られたがグッと押さえた。
俺は一つ大人になったと思う。
890デフォルトの名無しさん:04/11/22 16:13:55
>>887
それだと視線が水平に近い時、奥や手前に進んでくれなそうな気が。。。

>>889
むしろヒントになるような事なら煽って欲しいんですけど。
891デフォルトの名無しさん:04/11/22 16:40:14
簡単にいえばY方向への移動量をZに逃がしたいって話じゃないの?
z+=y;y=0.0fでよさそうでない? 試してないけど。
892884:04/11/22 17:09:27
>>891
すいません、何の座標系での話しでしょうか?
視点は一定ではないので、
必ずしも画面奥がワールド空間でのZ方向とは限らないのですが、
そういうことではないですか?
893デフォルトの名無しさん:04/11/22 17:39:43
>892
とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って
横はカメラから視点までベクトルと(0, 1, 0)のベクトルの外積で求まるベクトル使ってしのいだら?

一番簡単な方法だし
894884:04/11/22 17:46:15
>とりあえずやり方がわかんないなら、縦はカメラから視点までベクトル使って

それだと視線がワールド座標のXZ平面に大して垂直に近づくほど
動かせなくなっていくと思うのですが、、、
895デフォルトの名無しさん:04/11/22 17:58:07
>894
XZ平面に垂直だろうが、水平だろうがカメラに向かって奥か手前に動くと思うんだけど?
y成分を0にしたりしないよ
896884:04/11/22 18:03:41
説明が下手でした。
どんな視点、視線の時も、左ドラグでワールド座標のXZ平面に平行に動くようにしたい、
(Yの位置は現在のままで。)ということです。
897デフォルトの名無しさん:04/11/22 18:06:32
っていうかそのライトヴェーブの動きの簡易説明を画像で頼む
898884:04/11/22 18:51:56
なんか凄くあたりまえな画像ですが用意しました。
要はこんな単純な事が言いたかったのです。説明下手でした。
マウスを画面で上下左右に動かした時、矢印の方向に動きます。
(実際は合成で斜めにも自由に動きますが。)

http://gamdev.org/up/img/1949.jpg
http://gamdev.org/up/img/1948.jpg
899デフォルトの名無しさん:04/11/22 19:05:39
カメラから視点までベクトルのy成分を0にしてを正規化して特定の値を掛けて
常に一定の移動量を保てばいいだけかな?
900899:04/11/22 19:08:17
ちなみに本当に垂直にしたらだめなので、ほぼ垂直以上にならないように気をつけること
アップベクトルをきちんとしてないとジンバルロックが起きるから垂直にはできない
もしアップベクトルをきちんとしているなら垂直のときにはアップベクトルが使える
901デフォルトの名無しさん:04/11/22 19:18:26
やっぱりというかというか
別に難しいことじゃないじゃん
902デフォルトの名無しさん:04/11/22 19:24:57
>901
初心者スレだからこれくらいはいいんじゃないの?
宿題はカンベンだけど
903デフォルトの名無しさん:04/11/22 19:57:48
884は理解できたのだろうか・・・。
気になって夜しか眠れない
904884:04/11/22 20:05:34
どうもです。たぶん理解できました。
これから試してみてまた報告に来ます。
ひとまずありがとうございました。
905デフォルトの名無しさん:04/11/22 20:06:28
>903
>気になって夜しか眠れない
漏れ以外にもこのネタ使う香具師がいるのかw
一瞬、あれこんなレスしたっけ?と思ってしまったw
906デフォルトの名無しさん:04/11/22 20:23:32
木になって昼間も動けない。
907デフォルトの名無しさん:04/11/22 23:13:56
なんでベクトルの話が出てくるのがわからん。
マウスが縦横に動いたら、視点をオブジェの周りで縦横に旋回させるだけでは?

908デフォルトの名無しさん:04/11/22 23:19:27
>904
>884のこと?
君がいってるのはカメラの操作で
>884が言ってるのはオブジェクトの移動だよ
909デフォルトの名無しさん:04/11/23 00:33:59
>>908
なるほど、では言い直そう。

なんでベクトルの話が出てくるのがわからん。
マウスが縦横に動いたら、オブジェをZYに移動させるだけでは?
910デフォルトの名無しさん:04/11/23 00:36:30
あーむかつく。
こういうの出来ない奴って座標変換がまったくわかってねぇんだよな。
現役プリ☆グラマの俺様が指導してやる

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

っと、まあ、挙げればきりがないがこんなところか?
911デフォルトの名無しさん:04/11/23 00:50:14
>>910















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

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

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

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

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

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

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

とかなってるんだよね。(あ、これは例ね。)
あ、ちなみにこの図はワールド座標上に階層構造の物体が4つあって
そのうち1つの物体にカメラがくっついてる状態ね。
914デフォルトの名無しさん:04/11/23 01:12:20
これ、わかるかねぇ。
ためしにある点をローカルDの座標上からローカルFの座標上にもってくるためには

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

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

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

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

って動かせばおおよそなんでもできそうだよね。
じゃあ、プリグ☆ラマンはもうねるからじゃあねw
え?長文がよめねぇだとぉ?死ね死ね死んじまえw
915デフォルトの名無しさん:04/11/23 02:02:36
基本的な事を何得意げに語ってるんだ
わかりにくいし
916デフォルトの名無しさん:04/11/23 02:18:12
>>915
でもわかって無い奴多いだろ。
これができなきゃ売り物になるような3Dゲームなんか作れないのに。
それどころか初級シェーダもかけられない。

>>884みたいなのができないなんて座標変換がわかって無い証拠だろ。
やれz軸がどうだとかy軸がどうだとか関係ねぇんだよ。
座標変換がわかってねぇんだよ。
微妙な計算なんてひとっつもでてこないよ。
なのに全然的外れなレスがあるし。ちょっと質問に答える側もレベル低くなってねぇか?
917デフォルトの名無しさん:04/11/23 02:23:59
まぁ高校数学
というか三角関数わかれば分かるはずなんだけどな
918デフォルトの名無しさん:04/11/23 02:34:56
皆さんこんばんは。
早速質問なのですが、よくオンラインのMMORPG等のインターフェースにある、
マウスでドラッグすると動く内部の小ウィンドウ(ステータスとかスキルとか表示してる・・・)って
どんな風に実装されているんでしょうか・・・。教えてください。

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

C/C++はそこそこなんですけど、DirectXはまだサンプルの理解やちょっとした派生程度のレベルなので
その辺の処理は詳しくお願いいたします。
919デフォルトの名無しさん:04/11/23 03:16:58
>>918
良く知らないけどそれってWin32APIのウィンドウっぽい?
ならツールウィンドウじゃねぇの?
WS_EX_TOOLWINDOW
で出来る奴。
VC6の奴だったらツールバーのおかしな奴だっけ?
(こっちはフォーカスを失ってもバーが青いまま。バグだろw)
920デフォルトの名無しさん:04/11/23 03:49:16
そんなもん自分で考えられないヤツが
C/C++そこそこ
なんて話を漏れは信じないぞ
921デフォルトの名無しさん:04/11/23 03:59:57
>>920
C/C++はそこそこでWin32はアレなんだろ。
>>918
それは自分も聞きたいですねぇ。
APIのウィンドウとか標準のコントロール貼り付けるとかでもなくて、
多分カスタムドロー使ってるだけとかでもなくて、
描画からウィンドウ管理から全部自分でやってるんですよね。。。
とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、
けど3D画面に2Dを合成するやり方が分からない。
923デフォルトの名無しさん:04/11/23 04:19:50
>>922
>描画からウィンドウ管理から全部自分でやってるんですよね。。。
さらに難易度下がるんだけどw
Win32のご機嫌とるよりよっぽど楽だよ。
924デフォルトの名無しさん:04/11/23 05:09:49
取っ掛かりがわかんないんですよね
とりあえず2D画像のパーツを組み合わせて窓枠を作り、それを表示させてみたい、
けど3D画面に2Dを合成するやり方が分からない。
なので、まずここからどんな感じの方法があるのか教えて欲しいのですが。
窓枠を表示する方法・・・
925デフォルトの名無しさん:04/11/23 06:35:50
どうも922は自演くさいなw

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

DirectXを使った市販ゲームで、ゲーム中のメニューに
コモンコントロールを使っているのはほとんど無い(SLG辺りで少しあったかな)。
Spyで覗いてみると良いよ。
926デフォルトの名無しさん:04/11/23 07:44:05
ポリゴンにテクスチャ貼るのって(3D変換しないとはいえ)物凄く面倒そうなんですが
そうするのがメジャーなんですかね?

裏画面で2D画像から読み込んだウィンドウのパーツを配置・組み合わせたりして
ウィンドウの外観を2Dで完成させてから、それを
表画面にアルファ付きで転送、みたいなのってDXではできないんですか?
927デフォルトの名無しさん:04/11/23 08:16:21
>>916
ここの回答者も>884もその程度の事は分かってるだろ。
わざわざ座標変換の話を持ち出すまでもない。
今のところレベルが低いのはお前だけだ。

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

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

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

>出来る。

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

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

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

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

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

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

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

ってことですか?よく分からなくなってきました。
とりあえず変換済みポリゴンを表示するところから始めてみよう…
931デフォルトの名無しさん:04/11/23 10:45:55
お礼も言えなきゃ、DirectXのバージョンも書かない様な奴に
おまえら良く付き合いますね
932922:04/11/23 10:57:18
>お礼も言えなきゃ

いやだってまだ話し終わってないし…
バージョンは9.0bであります。
バージョン関係ないような話だと思ったものでごめんなさい。
ちなみに私は918の方とは別人です。
933デフォルトの名無しさん:04/11/23 11:04:28
>>924
>けど3D画面に2Dを合成するやり方が分からない。
もう、このへんでこいつ相手にしたら負けかなって思ったw
934デフォルトの名無しさん:04/11/23 11:13:24
お礼はいらないが、結果報告はして欲しいな。

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

回答者はそれを考慮して答える。
935デフォルトの名無しさん:04/11/23 11:13:53
最低限チュートリアルを全て終わらせてから出直せ。
936934:04/11/23 11:26:14
テンプレに明記してあったのね・・・

【 質問する香具師 】
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
937922:04/11/23 12:02:37
D3Dのチュートリアルはやりましたが、
今回の質問内容が分かるような章はなかったような…
c++でコモンコントロールを真似て
処理や動作をクラス化したりというのは何とかできそうなので、
引っかかっているのはそれをどうやってDXで描画するかという部分です。
938デフォルトの名無しさん:04/11/23 12:05:26
D3DFVF_XYZRHW
939デフォルトの名無しさん:04/11/23 12:09:22
>>937
チュートリアルにもろにそれぞれの座標の設定の仕方が載っているのに、
> 今回の質問内容が分かるような章はなかったような…
それはやったとは言わない。
もう一度きっちりやり直せ。
940デフォルトの名無しさん:04/11/23 12:11:07
DirectXのヘルプを
一通り目を通しても別に大した時間かからないし、
こんなところでくだらない質問することもなくなるから
一度読んじゃったほうがいいよ。
もちろん細かいところは省きながら。
941デフォルトの名無しさん:04/11/23 12:25:47
ヘルプ読んで理解出来るような奴なら、
こんなスレには来な・・・ うわっ何をすあwせdrftgyふじこl
942922:04/11/23 12:58:35
一度質問内容を整理補足したいのですが、

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

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

・というか皆さんはどんな風に作ってるんでしょうか?
943デフォルトの名無しさん:04/11/23 12:58:51
>>引っかかっているのはそれをどうやってDXで描画するかという部分です。
それを勉強してわからなかったことを質問するんだろ?
944デフォルトの名無しさん:04/11/23 13:18:20
>>942
>というか皆さんはどんな風に作ってるんでしょうか?
俺だったらモデリングツールで作ったモデルロードして終わりw
ボタンとかくっつけるの楽でしょ?アニメーションもくっつけられるし。

つーかゲームで出すモデルってのはデザイナが頻繁に変更かけるから
プログラムを実行させないとみられないもの(プログラム内で頂点を設定する等)は
できるだけつくっちゃ駄目。
945デフォルトの名無しさん:04/11/23 13:32:52
>>944
ボタンやコントロールの位置・テクスチャが動的に変わる場合には
どう対応するんだ?
946デフォルトの名無しさん:04/11/23 13:39:50
>>945
そのときどきで方法は変わるけど別に
設定ファイルを作ってそれを読み込んで終わり。
モデルファイルに直接データを埋め込んだこともある。

ボタンやコントロールの位置が変わるのは頭使えばなんとかなるでしょ?
パターンが少ないなら全部用意しちゃってもいいし、
法則があるならちょっと設定ファイルをつけてやるぐらいで対応できるでしょ?
悩むもんじゃない。
テクスチャが動的に変わるなんてゲームじゃしょっちゅうあることだからすでに対応済み。
947デフォルトの名無しさん:04/11/23 13:58:43
動的変更に関しては、エディタなりビューアが無いと
設定ファイルの動作を見れないというわけか。
まあ、その時はその時だな。
948デフォルトの名無しさん:04/11/23 14:43:25
なんでそんなにポリゴンを必要以上に忌み嫌うのかがわからない
四隅の座標指定してBitBltで貼るのと
四隅の頂点指定してDrawPrimitiveするのとなにがそんなに違うんだ
用途によって適した方を使い分ければいいだけ
949デフォルトの名無しさん:04/11/23 14:47:15
違いを意識しなくてもいい関数を一つ作ればいいだけなんだけどね。
最初から用意されていれば、内部で何をやっているかすら考えずに使うくせに、
用意されていないと動作の違いについてグチグチグチグチ言い続ける。
そんな奴が何故プログラムを組むのかわけ分からん。
950デフォルトの名無しさん:04/11/23 14:58:50
どうでもいいから

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

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

この2つがやってること同じとしか思えない漏れに誰か解説してくれ。
(後者は1パス余計なところ以外で)
951デフォルトの名無しさん:04/11/23 15:05:37
後者はDirectDraw的な操作でなんとかならないかって事だろ。
毎度ポリゴン作るのが嫌だと仰っておられる。.

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

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

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

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

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

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

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

とりあえずコード組んでみます。ありがとうございました。
953デフォルトの名無しさん:04/11/23 15:22:42
>>951
そんな事書くくらいならお前が一発で納得させて質問者を黙らせるようなレスすりゃ済む話。
954デフォルトの名無しさん:04/11/23 15:27:12
黙れ!小僧!


黙らせるようなレスだよ
955デフォルトの名無しさん:04/11/23 15:29:18
ところで、次スレは必要なのか?
956デフォルトの名無しさん:04/11/23 15:36:36
>>942
隊長!正直このスレのせいで、伝統の鬱だ氏のうスレが瀕死です
957デフォルトの名無しさん:04/11/23 15:37:12
失敬!
>>942じゃなくて>>955
958HDSL ◆aoV/Y6e0aY :04/11/23 15:48:14
>DirectXについて、にいさま達がマターリと
>技術情報交換&雑談するためのスレッド。
>初心者用相談室では扱わないような少し高度な話題も受け持つ。
鬱だ(rは趣旨としては情報交換がメインだからね
質問スレがあったほうがどっちも荒れないでいいと思う

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

>975よろしく
960デフォルトの名無しさん:04/11/23 16:00:19
鬱だ(ry もたまにはageてやるか
961デフォルトの名無しさん:04/11/23 16:09:37
2ヶ月前に立った鬱だスレがまだ50レス未満ってのは
昔を思い出すと確かに寂しいな
962デフォルトの名無しさん:04/11/23 16:38:54
>>947
テクスチャアニメーションにしても
UVアニメーションにしてもモデリングソフトでサポートしてるからそんなことはない。
963デフォルトの名無しさん:04/11/23 17:19:19
>>918
>DirectXはまだサンプルの理解やちょっとした派生程度のレベル
>>952
>当方はDirectX 9.0cと、VC++6です。
って言ってるが、サンプルって
ワザワザ自分の環境用にプロジェクトなりフレームワークなり作り直してる?
それともコード眺めてってレベル?

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

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

何か考え方か上方ベクトルの認識が間違ってますでしょうか?
965デフォルトの名無しさん:04/11/23 20:39:21
鉄棒で半回転すれば上下逆さまになるのは当たり前。
普通に振り向けよ。
966デフォルトの名無しさん:04/11/23 20:42:01
>>965
いえ、なんというか
その上下逆さまになった状態をカメラに写したいので
上方ベクトルも回転させているのですが
逆さまに写ってくれないのです
967デフォルトの名無しさん:04/11/23 20:58:12
もしかしてD3DXMatrixLookAt系でそれをやろうとしているとか?
もしそうなら、致命的な勘違いをしているので、
この手の関数に頼らず自分で計算しろ。
968デフォルトの名無しさん:04/11/23 23:04:27
>967
別に間違えていない
間違えてるなら具体的に何が間違えてるかちゃんと書け
ろくな状況説明のない質問厨と同じレベル

>966
上方ベクトルの出し方がおかしいんじゃないか?
そこを見直したほうがいいと思う
969デフォルトの名無しさん:04/11/23 23:22:02
こういうスレは、コーディングスタイルや
恩師からどう教わったかでケンカが始まるもの。


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

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

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

ログのベタハリで、スイマセン
972918:04/11/23 23:59:09
>>963
もちろん、新規にプロジェクト作成して、一文一文を噛み砕きつつ…です。
わかんない処理は時にはググったり。


ところで>>952の方法1を試してみたんですが、
ウィンドウ(WS_EX_APPWINDOW)とその子ウィンドウ(WS_EX_TOOLWINDOW)の2つがあるとき、
子ウィンドウを親ウィンドウの領域内に納めたいのですが、
そういうコードなどは用意されていないんでしょうか。
親からの座標データを下に計算・・・なんですかねぇ。
973デフォルトの名無しさん:04/11/24 00:08:52
WS_CHILDWINDOW
974966:04/11/24 00:09:22
>>967
ビュー行列はD3DXMatrixLookAtLHで作っていますが
上方ベクトルが変わると正しく動かないんでしょうか?

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

余計な部分を省いたこの部分のみのプログラムにしても状況が変わらず
なので、何か勘違いしてる所があるのかなと思ったのですが
975デフォルトの名無しさん:04/11/24 00:13:58
回転行列を掛ける対象が違うんだが。
何故部分的に使用して問題を引き起こそうとするのか。
976デフォルトの名無しさん:04/11/24 00:25:55
>>974
視線ベクトルと上方ベクトルが一致する瞬間があるんじゃないか?
ちょっと簡単にソース書いてくれ。
977966:04/11/24 00:28:34
>>975
書き方が悪かったです
上方ベクトル"にも"かけてるということです
もちろんカメラ座標にもかけています
978918:04/11/24 00:39:53
>>973
子属性と定義してやればよかったんですね。ありがとうございました。
979デフォルトの名無しさん:04/11/24 00:41:00
まずは上ベクトルの値がどうなってるか把握しる
定期的にOutputDebugStringを使って上ベクトルの値を監視してみたら?


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

これをD3DXMatrixLookAtLHの直後にでもつっこんでデバッガでみれ
980966:04/11/24 00:41:29
>>976
Angleは回転の角度
DefUpVec(0,1,0)上方ベクトル
DefPosVec(0,0,-1)カメラ位置
TargetVecは常に(0,0,0)

D3DXMatrixRotationX(&RotateMat,Angle);

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

D3DXMatrixLookAtLH(&ViewMat,&PosVec,&TargetVec,&UpVec);
D3DDevice->SetTransform(D3DTS_VIEW,&ViewMat);
こんな感じです
981デフォルトの名無しさん:04/11/24 00:44:51
やっぱり根本的に勘違いしてるし。
982デフォルトの名無しさん:04/11/24 03:04:59
>980のコピペでカメラをまわしたらこうなった
ttp://up.satoweb.net/img100/880.gif
そこはそのままでも得たい結果はえられるっぽい
>981根本的に間違ってるのに
この結果がでたことを説明してくれ
983デフォルトの名無しさん:04/11/24 04:46:59
>>981
うざい。具体的なヒントなり解決法を書かないなら何もか書かないでくれていい。
上手くいかないのは勘違いしてるから上手くいってないんだから当たり前だ。
質問が流れて質問も解答もピントがずれてくる。双方にとって不幸。
984デフォルトの名無しさん:04/11/24 11:06:02
うーん、すごい。いや驚いた。それはさておき。

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

MFC+DirectXでプログラム覚えたヤツって融通が利かないのか?
985デフォルトの名無しさん:04/11/24 11:13:01
>984
どのレスに対するレスなのかレス番を示してくれないとわからないんだが
986デフォルトの名無しさん:04/11/24 15:51:51
>>985
スマソ。918あたりへのレスだった。
ステータスウィンドウをWindowsのウィンドウで描画しようとするあたりが
毒されてるなあと思ったんだよ。
ステータスウィンドウなんて、Orthoで自前で書いちゃえばいいじゃん、と
思ったワケ。で、もしかするとPerspectiveで描画したあとOrthoで描画って
いう発想に至れないんじゃないのかなって勘ぐったのさ。
987デフォルトの名無しさん:04/11/24 16:55:07
質問なんですが、cppファイル内で
#include <ddraw.h>
DDPIXELFORMAT pixel; //インクルードした行の真下
このように書いたんですけど、
'DDPIXELFORMAT':識別名を宣言するのに、型が指定されていません。
等のDDPIXELFORMATがあたかも宣言されてないという感じのエラー
がたっぷり(大袈裟)出ました。他にも同ファイル内で引数に使っている型(サーフェイス等DirectDraw関連)なども認識できないようです。
ddraw.hがインクルードされてないような振る舞い。
エラー発生場所をコメントにしたらコンパイルできました。
考えられる原因は何なんでしょうか。。。
988デフォルトの名無しさん:04/11/24 17:01:13
windows.h はincludeしてるのか?
989デフォルトの名無しさん:04/11/24 20:24:50
>>988
もちろんで。
990デフォルトの名無しさん:04/11/24 20:26:48
>987
パスが通っていないとか?
991デフォルトの名無しさん:04/11/24 20:38:09
>>975
スレ立てヨロ
992デフォルトの名無しさん:04/11/24 20:38:30
>>987
バージョン定数の定義は?
993デフォルトの名無しさん:04/11/24 20:44:40
ディレクトリは
1. c:\DX90SDK\Include(インクルードファイル)
2. c:\DX90SDK\Lib(ライブラリファイル)
で1にddraw.h、2にddraw.lib入ってます。
リンクしているファイルは
dsound.lib, dinput8.lib, dxerr9.lib, d3dx9.lib, d3d9.lib,
d3dxof.lib, dxguid.lib, winmm.lib, d3dx9dt.lib, ddraw.lib,
comctl32.lib, odbc32.lib, odbccp32.lib
で全てです。(不要なものも入ってますが)
他にリンク、インクルードするファイルは有るんでしょうか。。。
994デフォルトの名無しさん:04/11/24 20:56:45
いつも思うんだがパスを通せない人がDirectXを使いこなせるんだろうか
995987(=989,993):04/11/24 20:58:57
もしかしてDirect3Dが有ったらDirectDraw使えないという
オチですか。
でも、DIRECTDRAW_VERSIONとDIRECT3D_VERSION
二つ別々にあるから大丈夫なのではないでしょうか。(小声で...)
996デフォルトの名無しさん:04/11/24 21:02:54
んなわけ無い。
997987:04/11/24 21:07:54
コンパイルさえもできないのですか?
Direct3Dが元にあってそこからDirectDrawに改良を
試みたんですが。。。
御迷惑掛けました。一からやり直します。
>>988 >>990 >>992 >>995
ありがとうございました。
998デフォルトの名無しさん:04/11/24 21:13:41
ttp://up.satoweb.net/img100/886.lzh
>997
これをコンパイルしてみろ
DDの初期化だけのヤツ
リンクの設定もいらんから
パスが通っていたらビルドできるはず
うちではできた
999デフォルトの名無しさん:04/11/24 21:14:08
立てるぞ?
10001000=999=998:04/11/24 21:16:23
立てたぞ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。