- 1 名前:デフォルトの名無しさん [2007/10/29(月) 06:05:00 ]
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 DirectX使いが優しくコメントを返しますが、 お礼はDirectXの布教と初心者の救済をお願いします。 DirectX Home Page www.microsoft.com/japan/windows/directx/ 前スレ pc11.2ch.net/test/read.cgi/tech/1173535400
- 348 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:27:29 ]
- >>346
ヘタレでスマン。どうしても歪んでしまう。 ttp://richa850.hp.infoseek.co.jp/programming/dx8_01.html 歪みは上記のURLを参考にさせていただきました。
- 349 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:30:45 ]
- ひょっとしてテクスチャのサイズは元のデータと同じにならない事を知らないおちか
- 350 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:31:01 ]
- >>347
日本語間違えてる(^^; 1個だけ32*32のPNGを作り、D3DXCreateTextureFromFileで1個だけ読み込み、 こいつを1文字ずつLockRectで書き換えて画面にαブレンドで表示する事に成功しました。
- 351 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:34:04 ]
- >>349
いや、800*600が1024*1024に拡大されてるのは知ってる。 だから困ってたんだけど、3Dモードと2Dモードで使い方を変えて、 3Dモードでの時の歪みはCGに怒られながら勘弁してもらう事にしたヘタレ。スマソ
- 352 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:43:22 ]
- 800x600の画像を1024x1024の左上に展開して描画すればドットバイドットになるわけだが・・・
- 353 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:49:07 ]
- >>352
その方法も試したんですが、微妙に歪むところと暗くなるところがあり、 自分的には気にならないのですが、CGから見たら違う物だと言われて…。 >>348の方法なら大丈夫なんですが、 テクスチャにするとどうしても微妙に違うらしくて、 CGにうとい自分だったら気にしないのですが、 プログラマ1人とCG5人だと発言力が(^^;
- 354 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:51:59 ]
- いったいどんな組み方してんだよと小一世紀・・・
- 355 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:54:14 ]
- 3D部分も自力で組んでるんですが、色々と言われて落ち込んでます。
自分の実力だとLWと全く同じ結果に出来るはずもなく……orz 人生あきらめが肝心なので、ダメプログラマの烙印を押されても粘ります。 今までスレ汚し、スマンかった。
- 356 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 16:55:59 ]
- >>354
雑誌のサンプルを実行しても、どうしても歪んでしまうんですよ。 ビミョーにですが。 逆にテクスチャで歪まないサンプルがあったら教えてもらえると嬉しいですm(__)m
- 357 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:02:50 ]
- いちいちロックして描画なんて阿呆なことするくらいなら
素直にDirectDraw使おうよ。
- 358 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 17:25:13 ]
- Direct3Dを全くわからない俺が思うに、
・バックサーフェイス->OK ・テクスチャ->NG ・微妙に歪むところと暗くなるところがあり からして 色はシェーディング、拡散光、スペキュラ辺りに関連していることを 言っている気がする。 歪みは遠近法(平行投影とか透視投影)かと。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:17:32 ]
- シェーダー切るの忘れているだけのような気がするけど・・・
↓俺の汎用スプライトコードからの抜粋 Device->SetTexture(0, texture); Device->SetVertexShader(D3DFVF_TXVertex3); Device->SetStreamSource(0, m_VertexBuffer, sizeof(TXVertex3)); Device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); Device->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); Device->SetRenderState(D3DRS_FOGENABLE, FALSE); Device->SetRenderState(D3DRS_SPECULARENABLE, FALSE); Device->SetRenderState(D3DRS_CLIPPING, FALSE); Device->SetRenderState(D3DRS_LIGHTING, FALSE); Device->SetRenderState(D3DRS_VERTEXBLEND, D3DVBF_DISABLE); Device->SetRenderState(D3DRS_CLIPPLANEENABLE, FALSE); Device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); Device->SetRenderState(D3DRS_TEXTUREFACTOR, Color);
- 360 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:18:36 ]
- Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); Device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR); Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); Device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR); Device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE); Device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE); Device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); Device->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP); Device->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP); Device->SetTextureStageState(0, D3DTSS_ADDRESSW, D3DTADDRESS_CLAMP); Device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_POINT); Device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_POINT); Device->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_NONE); Device->SetTextureStageState(0, D3DTSS_MIPMAPLODBIAS, 0); Device->SetTextureStageState(0, D3DTSS_MAXMIPLEVEL, 0); Device->SetTextureStageState(0, D3DTSS_MAXANISOTROPY, 1);
- 361 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:31:58 ]
- まともに組めば絶対に歪まないはずだから頑張れよ。
とりあえずウィンドウ一個出してそこにテクスチャ表示するサンプルなら 30分で書けるでしょ。それうpすりゃいいじゃん。
- 362 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 20:33:02 ]
- ありがとう>ALL
1ドットの歪みが出るのが直らないのですが暗いのはシェーダのせいでした。 背景が3Dのせいで、その上に重ねるキャラが1ドットどうしても歪んでしまいます。 もう一度、切り分けをして単純化してプログラムを組んでみます。 それと、D3DXCreateTextureでD3DFMT_A8R8G8B8指定した空のテクスチャでも ちゃんとαブレンドが効きました。ありがとう御座いました。
- 363 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:03:14 ]
- 商用ソフト作ってる人間がこの程度のことを自己解決できないなんて
- 364 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 21:20:38 ]
- え?俺は同人かと思ってレスしてたんだが・・・・
- 365 名前:デフォルトの名無しさん mailto:saage [2008/05/09(金) 22:15:10 ]
- 初めて一週間でして……。
昔、PC-DOS時代にDOOM系のFPSゲームを作った事があったので、 3Dダンジョン部分はすぐ出来たのですが、2D表示にはまってた次第です(^^; ピクセルのズレも切り分けでき、どうにかCGに怒られずに済みそうです。 一時はCreateDIBでやって、ブレゼンハム3Dで作った方が…と考えたところ、 皆さんのおかげでD3DXにとどまれました。 レンダリングステート関連って、知ってないと分からないことばかりで、 WIN-APIを覚えた時を思い出しました。覚えることが多くて大変です(@@
- 366 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 22:54:13 ]
- ちなみにドットズレの原因は背景3D表示のViewFromの問題で、
精密に計算して、3D表示の方もすこしずらしたら起きなくなりました。 >>358さんの遠近法で当たってました。 皆様、ありがとう御座いました。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 23:15:57 ]
- >>363
商用でこんなとこで質問してるなら軽蔑するわw
- 368 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 23:42:38 ]
- あれ・・・?
てっきりテクスチャを2Dで描画してるのかと思ったら3D空間に1枚絵を描いてたのか
- 369 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 04:30:06 ]
- >>367
同人より実力のないプロでゴメンm(_)m >>368 そのとおりです〜。
- 370 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 08:47:43 ]
- プロ崩れの同人もいるわけだし仕方ないんじゃね?
- 371 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:26:25 ]
- 3Dダンジョン、フルサイズ背景表示、ラスタキャラ表示、手前にメッシュ表示、
そして文字表示エンジンが完成しました〜。 Intelチップで不具合が出たのですがステートを直したらどうにかなりました。 一週間でどうにか出来たのはひとえに皆様のおかげです。ありがとうm(__)m
- 372 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:29:11 ]
- これで月曜日の納品に間に合います。
なにげにサンプルメッシュを作るのに時間がかかってしまいました。 LWの解説サイト様、ありがとう御座いました。m(__)m あとはゆっくり寝てバグだしをします。 おやすみなさい〜zzz
- 373 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:37:14 ]
- だからここに日記を書くなよ…
- 374 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 11:43:32 ]
- ボーンの処理どうやった?
- 375 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 12:08:25 ]
- 初心者隔離スレだからいいんじゃねぇの?
本スレ汚されるよりな。
- 376 名前:デフォルトの名無しさん mailto:age [2008/05/11(日) 00:20:17 ]
- テクスチャは256x256以下で2^nサイズの正方形にすると良いって暗黙の了解があるが
やっぱり今時のハードでも256x256以下の方が良いのかな? というか今時ので512x512で表示が乱れるとかぼやけるとかってやつある?
- 377 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 00:30:12 ]
- >>376
>というか今時ので512x512で表示が乱れるとかぼやけるとかってやつある? ハードウェアの問題と 自身のプログラミングの問題を混同してるうと思う… 512x512のテクスチャでも、貴方のコードがおかしければ 表示が乱れるとかぼやける事は十分あるかと
- 378 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 03:11:29 ]
- >テクスチャは256x256以下で2^nサイズの正方形にすると良いって暗黙の了解
何年前の話だ・・・ぶーどぅーとかの時代だろ。 テクスチャのサイズ、正方形、2^nの制限などは全てCAPSで取れるので それを起動時に見て作るテクスチャや作り方などを判断すればいい。 ぼやけるかどうかはプログラムの問題でハードの問題ではない。
- 379 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:08:46 ]
- 広大なMAPを作るとして、みなさんはラップアラウンド問題はどうしてますか?
1画面分移動したら0に戻すとかで対応ですか? そもそも、広大なMAPは作らない方針ですか?
- 380 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:41:55 ]
- 4bitで -2147483648〜2147483647 だから
DbD単位で数値持ってても左右で100万画面分以上あるから悩んだことないな どんだけ広大なマップを作る予定なのさ 世界一周でも足りる気がするが… それより俺は3Dゲーの広大なマップでfloatの制度をどう解決してるかが知りたい
- 381 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:42:33 ]
- すまん4byteだw
- 382 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 20:14:03 ]
- >>380
ああ、ごめん、おれもfloat制限の事、ききたかったんだ。すまそ。
- 383 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:14:22 ]
- 位置に関するオフセットだけ別にもって描画に使うギリギリまで原点基準の座標で計算するようにする。
ビューの行列生成に対して逆移動を適用して描画における計算上だけ整合性をとって、 通常の計算は精度の高いローカルのまま計算をする。
- 384 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:27:16 ]
- メッシュを拡大(ScalingMatrixかけて)して描画すると
真黒になるのは何故なんだぜ?
- 385 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:27:35 ]
- 法線
- 386 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:29:56 ]
- >>383
そうやっても、原点から遠ざかっていくとだんだんずれてこないか? たとえば時速10000キロで飛行機を原点から遠ざかるように飛ばし続けて その後ろをカメラが追従するようにするとそのうちブルブル振動し始める >>384 法線を正規化するレンダーステートかなんかがあった気がする 調べるのはめんどい
- 387 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:42:19 ]
- D3DRS_NORMALIZENORMALS
- 388 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 01:31:55 ]
- DirectX9にて、テクスチャを描画すると画像がぼやけてしまい困っています。
各座標-0.5fやSetSamplerStateでPOINT/NONE(一応バイキュービックなども試しました)を指定など、調べて出てくること・考えられることは試してきたので、 最初のぼやけっぷりと比べればある程度見れるような状態にはなってきているのですが、それでもまだぼやけています。 今は、とりあえず倍の解像度のテクスチャを使って凌いでいます。(これなら、ぼけないように見えます) 高精細の画像を用意することなく、画像のそのままをDirectXで描画するにはどうすればいいのでしょうか? ご教授をよろしくお願いします。
- 389 名前:388 mailto:sage [2008/05/14(水) 01:34:37 ]
- 書き忘れました。
使っている画像はPNG(透過)、解像度は640x480です。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 02:08:41 ]
- トランスフォーム済み頂点かい?
- 391 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 02:09:10 ]
- フルスクリーンでアスペクト違いとかだったら殺すぞ?
- 392 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 02:11:43 ]
- FAQ過ぎるんだが確認事項が多すぎて一々レスしてくのめんどくせ。
再現コードうpして頂戴。
- 393 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 02:39:35 ]
- FAQすぎるけど、ここってそういうスレだろうw
>>388 D3DXCreateTextureFromFileでテクスチャ作ってるだろ? この関数では2のn乗のサイズのテクスチャしか作れない。 D3DXCreateTextureFromFileExを使えば解決。 引数は自分で考えるかググってくれ。
- 394 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 06:09:43 ]
- 頂いたご意見を検証しましたところ、読み込みの時点で2の乗数のサイズになってしまっていたようです。
D3DX_DEFAULT_NONPOW2を指定したところ、綺麗に描画することができました。 >>390様、>>391様、>>392様、>>393様、どうもありがとうございました。 半年間続いた気持ち悪さも抜けました。これで気持ちよく眠れます。 本当にありがとうございました。
- 395 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:29:58 ]
- その後、>>394は半年のあいだ目覚めることが無かったという
めでたしめでたし
- 396 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 15:57:25 ]
- >>395
どっかいけ 二度とくんな
- 397 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 12:46:59 ]
- >>396
おまえもくんな
- 398 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 12:48:21 ]
- >>394
NONPOW2できないデバイスもあるかもしれないんだぜ D3DX_FILTER_NONE
- 399 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:56:30 ]
- D3DX_FILTER_NONE使った場合、実際は2のべき乗のテクスチャが作られても画像は拡大されない
つまり、DbD表示は可能だけどそのためにはUVを調整する必要があるんだな 俺もハマったなぁ…
- 400 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:41:35 ]
- info.width/dest.width
- 401 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:41:56 ]
- destじゃないdescだ
- 402 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 19:13:56 ]
- ヘルプ嫁よ
- 403 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 08:52:34 ]
- >>402
誰に言ってるんだ?
- 404 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 14:44:19 ]
- 自分に言い聞かせてるんだろ
- 405 名前:デフォルトの名無しさん [2008/05/18(日) 02:43:39 ]
- ユニビーム
- 406 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:34:00 ]
- >>405
おまえのお陰でアイアンマンが映画化されている事を知った しかも大ヒット
- 407 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:16:42 ]
- リパルサー
- 408 名前:デフォルトの名無しさん [2008/05/21(水) 03:01:54 ]
- ∧_∧ ♪
∧_(∧ω^ ) ∧ ^∧^ ) > ( ^∧^_∧>/ ♪ ( ^∧^__∧ ヽ( ^∧^_∧ ♪ < ( ^ω^ ) 過疎るな | < > (_/ /ヽヽ (_) (__)
- 409 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 08:24:43 ]
- これってDirectxで動いてんの?
www.nicovideo.jp/watch/sm989934
- 410 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 08:37:55 ]
- >>409
知らない映像も交じってるが知ってるプリレンダー映像に関してはCPU処理かな リアルタイム処理だったらDirectXでもできるだろうけど…
- 411 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:34:14 ]
- DirectXで作ったとしても
DirectXの知識1割ぐらいだな
- 412 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 15:16:02 ]
- てかDirectXだろうがPS3だろうがリアルタイムレンダリングできるわけないだろ
水はサンプリング粒子が多すぎる
- 413 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 16:39:04 ]
- 数年後には実現できていたりする
- 414 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:20:43 ]
- DX11はリアルタイムレイトレーシングを見据えているんだっけ?
それともあれはIntelのプレゼンか何かだったかな?
- 415 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:41:08 ]
- これ以上バージョンを出すな!
- 416 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:50:49 ]
- 高性能はおなか一杯だから
マイクロソフトは、軽快なOSを出してくれマジで
- 417 名前:デフォルトの名無しさん [2008/05/21(水) 21:20:03 ]
- 昨日からDX勉強してる超初心者なんですが、
画面に立方体のポリゴンを表示してみたんですが なんか全体的に絵が硬い感じがします。 もう少しやわらかくぼやけた感じに描画したいんですが どうすればよいですか?
- 418 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:38:46 ]
- 一番手軽なのはあくび
- 419 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:41:43 ]
- 生理現象を待つよりも目薬がおすすめ
- 420 名前:デフォルトの名無しさん [2008/05/21(水) 21:54:28 ]
- >>418
>>419 意地悪いわんでおしえてくれ〜 とりあえず調べてみたけどアンチエイリアスだけで何とかなる?
- 421 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:04:23 ]
- あんたの言うぼやけた感じってのがわかんねぇから意地悪したくなるんだけどなw
アンチェリかけただけで良いのか? DOF的なカメラフォーカスのぼやけが欲しいのか? HDRシーンのようなぬったりぎっとり画面が欲しいのか? アンチェリだけならデバイス作成のフラグ変えるだけなんだからまずは試してみれ (ビデオカードが対応していることが前提だが)
- 422 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 08:30:21 ]
- アンチェリかけてダメならHDRとグレア処理やって
ダメならDOFやってだめなら空気遠近法ってとこか 立方体を平らな板の上に載せてAOテクスチャでも張れば案外柔らかくなるんじゃね?
- 423 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 09:48:23 ]
- 単にライティングしてないってオチじゃね?
- 424 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:12:42 ]
- >>409
これはリアルタイムっぽいな www.nicovideo.jp/watch/sm2449118
- 425 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:28:03 ]
- >>420
スナップショットうp
- 426 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:36:36 ]
- XY平面上にポリゴン等のモデルオブジェクトを配置した状態で、カメラの視線はZ軸に平行にしています。
この状態でマウスドラッグでカメラの水平座標(X,Y)をOffsetするようにしています。 また、マウスホイールでカメラの鉛直座標(Z)をOffsetしています。 カメラ座標Zによってマウスドラッグ時のカメラの水平移動量を調節したいです。 具体的に言いますと、スクリーン座標(10,10)から(510,10)までマウスドラッグした場合に、 500ピクセル分のカメラ移動をするのですが、一律のOffsetでは当然カメラ高度が高ければ高いほどオブジェクトの 見かけの移動量が少なくなってしまいます。これを上手く調節して、500ピクセル分の移動であれば現在のカメラ画像の高さにおいて 見えているオブジェクトの500ピクセルに相当する分の座標でOffsetしたいのですが、その計算方法が分かりません。 DirectXで使っているPerspectiveCameraではFieldOfViewを設定していますが、カメラ焦点距離に当たるものが 見つけられませんでした。焦点距離と画角とZさえわかれば求まると思うのですが。 説明が下手で申し訳ありませんが、参考になるサイトかアドバイスがあれば宜しくお願いいたします。 環境: VisualC#2008、WPFアプリケーションのViewport3Dを利用しています。 スレ違いと言われるかもしれませんが、WPFスレではWPFのGUI関連のスレに見受けられまして、 カメラのOffset等こちらのスレで質問した方が良いのではないかと勝手に判断いたしました。
- 427 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:58:10 ]
- 焦点距離はFOVから算出するものだろ。
フィルムサイズによっても変わるものだし。
- 428 名前:426 mailto:sage [2008/05/22(木) 18:22:05 ]
- >>427
フィルムサイズとFOVが分かれば確かに焦点距離が求まるのですが、 フィルムサイズってどこで分かりますか?
- 429 名前:426 mailto:sage [2008/05/22(木) 18:26:21 ]
- あ、なんか分かったかも。
Viewport3Dコントロールがリサイズされれば当然オブジェクトの見た目も変わりますね。 ちなみにFOVって水平画角であってますか?そうであればフィルムサイズはViewport3Dコントロールの 水平方向のサイズから求まると思います。 鉛直画角ではないですよね?
- 430 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:27:47 ]
- 好きに決めろ。
「FOVがXならフィルムサイズnの時の焦点距離がYです」という言い方しか出来ない。 通常は35mmがメインっぽいけど別に決まってるものではなく仮定するものだと思うが。 さらに言うならマウスでドラッグしたスクリーン上の移動を見かけ上一致するように 3D空間でも移動を行なうのに焦点距離はまったく必要ない。
- 431 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:31:01 ]
- >>430
>さらに言うならマウスでドラッグしたスクリーン上の移動を見かけ上一致するように >3D空間でも移動を行なうのに焦点距離はまったく必要ない。 そのやり方についてヒントだけでも教えてもらえませんか?
- 432 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:51:28 ]
- スクリーン座標に変換する->マウスの位置へ移動する->ワールド座標に戻す。
スクリーンからワールドに戻すときにzはどうするんだって話になるが、 元々ワールドに存在するオブジェクトならそのままのzをもってきて計算すればいい。
- 433 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:14:53 ]
- Xファイルがなぜか1ファイルしかロードできない。
原因として考えられるのは何でしょうか。 変数もグローバルで[MAX_MESH]を付けているのに、 最後にロードした物しか見れません。 変数の上書きも考えて、いろいろグローバルにして{MAX_MESH]をつけてもダメでした。 ご教授、お願いしますm(__)m
- 434 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:15:44 ]
- // メッシュ関連
LPD3DXMESH pMeshApp[MAX_MESH]; LPD3DXBUFFER pMeshAdjacency[MAX_MESH]; LPDIRECT3DTEXTURE8* ppTexture[MAX_MESH]; D3DMATERIAL8* pMaterial[MAX_MESH]; DWORD meshSubsets[MAX_MESH];; D3DXVECTOR3 meshCenter[MAX_MESH]; float meshRadius[MAX_MESH]; float meshfx[MAX_MESH],meshfy[MAX_MESH],meshfz[MAX_MESH]; // 移動位置 float meshax[MAX_MESH],meshay[MAX_MESH],meshaz[MAX_MESH]; // 回転 float meshsx[MAX_MESH],meshsy[MAX_MESH],meshsz[MAX_MESH]; // スケーリング float nummesh[MAX_MESH];
- 435 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:19:01 ]
- /*---------------------------------------------
X-Fileの読み込み ---------------------------------------------*/ int LoadXFile(int n,float d,char* filename) { LPD3DXMESH pMesh; LPD3DXBUFFER pMatBuf = NULL; D3DXMATERIAL* pMat; DWORD n,i,c,e; nummesh[n]=d; if(FAILED(D3DXLoadMeshFromX(filename,D3DXMESH_MANAGED,pD3DDevice,&pMeshAdjacency[n],&pMatBuf,&c,&pMesh))) return FALSE; DeleteMeshObject(n); pMeshApp[n] = pMesh;
- 436 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:19:37 ]
-
//マテリアルとテクスチャの設定 pMat = (D3DXMATERIAL*)pMatBuf->GetBufferPointer(); for(i=0;i<c;i++){ ppTexture[n] = (LPDIRECT3DTEXTURE8 *)malloc( 4*c ); pMaterial[n] = (D3DMATERIAL8 *)malloc( 4*c ); } meshSubsets[n] = c; for(i=0;i<c;i++){ pMaterial[n][i] = pMat->MatD3D; pMaterial[n][i].Ambient = pMaterial[n][i].Diffuse; ppTexture[n][i] = NULL;
- 437 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:20:22 ]
- //テクスチャ読み込み
if(pMat->pTextureFilename) if(FAILED(D3DXCreateTextureFromFile(pD3DDevice,pMat->pTextureFilename,&ppTexture[n][i]))) return FALSE; } RELEASE(pMatBuf); LPDIRECT3DVERTEXBUFFER8 pVB; BYTE* pV; pMesh->GetVertexBuffer(&pVB); pVB->Lock(0,0,&pV,0); pVB->Unlock(); pVB->Release(); if(pMeshApp[n]->GetFVF() != (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)){ pMesh = NULL; pMeshApp[n]->CloneMeshFVF(pMeshApp[n]->GetOptions(),D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1,pD3DDevice,&pMesh); pMeshApp[n]->Release(); pMeshApp[n] = pMesh; D3DXComputeNormals(pMesh,NULL); } return TRUE; }
- 438 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:21:43 ]
- //------------------------------------------------------------------------
//メッシュ表示 //------------------------------------------------------------------------ void dispMesh( int n ) { // 表示位置を球体1へ移動 //メッシュの描画 D3DXMATRIX matWorld,matTrans; if(n==0)meshfx[n]=-400;meshfy[n]=20;meshfz[n]=200; if(n==1)meshfx[n]=-400;meshfy[n]=20;meshfz[n]=-200; meshaz[n]=90; for(DWORD i=0;i<meshSubsets[n];i++){ D3DXMatrixIdentity(&matWorld); D3DXMatrixScaling(&matWorld,meshsx[n],meshsy[n],meshsz[n]); D3DXMatrixRotationX(&matWorld,(meshax[n]*3.14f/180)); D3DXMatrixRotationY(&matWorld,(meshay[n]*3.14f/180)); D3DXMatrixRotationZ(&matWorld,(meshaz[n]*3.14f/180)); D3DXMatrixTranslation( &matTrans,meshfx[n],meshfy[n],meshfz[n]); matWorld*=matTrans; pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); pD3DDevice->SetMaterial(&materialApp); pD3DDevice->SetMaterial(&pMaterial[n][i]); pD3DDevice->SetTexture(0,ppTexture[n][i]); pMeshApp[n]->DrawSubset(i); } pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
- 439 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:22:27 ]
- // 表示位置を元に戻す(表示位置と視点位置は同じっぽい)
D3DXMatrixIdentity(&matWorld); pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); pD3DDevice->SetStreamSource(0,NULL,0); pD3DDevice->EndScene(); }
- 440 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:38:40 ]
- とりあえずメッシュを一つだけ管理するクラスを作ってそれらを複数持てば解決するんじゃないかな
- 441 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:44:25 ]
- バッファって普通はメインメモリに取られてるんですか?それともGPU?
- 442 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 20:15:37 ]
- やっぱりクラスにするしか内ですかね……。
C++はあんまりよく知らないのですよ。頑張ってみます。
- 443 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:45:12 ]
- 別にC++つかってクラスにする必要はない。
単におたくのソースが見づらくてよくわからんってだけだろう。 バッファがメインメモリかビデオメモリかは「自分で指定する」ものだ。 DirectXのリファレンスを暗唱できるまで読むがいい。
- 444 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:04:51 ]
- 本に載ってたソースなのですが、見づらいですか。
本も選びようですね。
- 445 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:18:42 ]
- とりあえず、LoadXFile内で
ローカルに宣言されてる LPD3DXMESH pMesh; の値をいくらグローバルに入れようとしても無駄だと思う
- 446 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:05:25 ]
- DirectX End-User Runtime Web Installerをインストールしたら、DXのバージョンが10になった
DX9.0Cにはもう戻せないのかな?
- 447 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 02:35:18 ]
- 10.0入ってるなら9.0c含んでるし
- 448 名前:433 mailto:sage [2008/05/24(土) 07:06:08 ]
- 自己解決しました。
pMaterial[n] = (D3DMATERIAL8 *)malloc( 4*c ); を pMaterial[n] = (D3DMATERIAL8 *)malloc( sizeof(D3DMATERIAL8)*c ); にしたらちゃんと複数体表示できました。 ありがとう御座いました。
|

|