【C++】 DirectX初心者質問スレ Part25 【C】at TECH
【C++】 DirectX初心者質問スレ Part25 【C】 - 暇つぶし2ch561:デフォルトの名無しさん
09/10/04 11:17:51
>>557
0xfeeefeeeってのは、deleteされたかなんかして無効になった変数を示す。
要はそのプログラムがバグってるんだよ。

562:デフォルトの名無しさん
09/10/04 12:00:45
>>557の試してみたけど、問題出ないなあ。
ファイルによるのか?

563:デフォルトの名無しさん
09/10/04 12:01:31
ってxファイルだけ流用か・・・

564:デフォルトの名無しさん
09/10/04 14:44:18
URLリンク(www.dotup.org)
URLリンク(www.dotup.org)

setviewportで左右それぞれに描画したいのですが原因が分からず右側しか描写されません
どなたかわかりますでしょうか?
お願いします

565:デフォルトの名無しさん
09/10/04 15:24:43
SetViewportで設定して描いたら、もういちどSetViewportして描けばいい

566:デフォルトの名無しさん
09/10/04 16:38:23
シェーダーのコンパイルのバージョンについて質問です。
「複数のジオメトリのインスタンスの効率的な描画」というページ
URLリンク(msdn.microsoft.com)(VS.85).aspx)において
ハードウェアインスタンシングというテクニックは
3_0 頂点シェーダー モデルをサポートするデバイスが必要ですと
書かれているのですが、Instancingというサンプルのfxファイルには
technique THW_Instancing
{
pass P0
{
VertexShader = compile vs_2_0 VS_HWInstancing();
PixelShader = compile ps_2_0 PS();
ZEnable = true;
AlphaBlendEnable = false;
}
}
となっており、つまりVS2_0でコンパイルしているようなのですが
これにはどのような意図があるのでしょうか?

567:558
09/10/04 16:42:21
>>560
ありがとうございます。納得しました。

568:デフォルトの名無しさん
09/10/04 16:57:02
>>566
シェーダー的には2.0でも動く。
対応された世代が3.0世代だから便宜上そうなってるだけ。

当然2.0対応ハードウェアでも動かないカードは沢山ある。

動くかどうかはCAPS次第。

569:デフォルトの名無しさん
09/10/04 17:53:58
ポリゴンの特定の点を動かすにはどうすればいいんですか?

ポリゴンの頂点の並びから読み出して
頂点データを書き換えるのかなあ・・・?

570:デフォルトの名無しさん
09/10/04 18:17:52
>>568
なるほど・・「シェーダのバージョンは2.0だけど複数ジオメトリはサポートしている」というカードを
動作対象にいれるための措置ということですね?

>動くかどうかはCAPS次第

D3DCAPS9のページ
(URLリンク(msdn.microsoft.com)(VS.85).aspx)
を見た限りでは分かりませんでした。
シェーダのバージョンに関わらずハードウェアインスタンシングをサポートするという
カードを識別する方法はあるのですか?

571:デフォルトの名無しさん
09/10/04 18:27:05
>>569
そう
例えばMSDNの
頂点バッファーの内容へのアクセス (Direct3D 9)
(URLリンク(msdn.microsoft.com)(VS.85).aspx)
に説明がある

572:デフォルトの名無しさん
09/10/04 18:29:56
>>571
あーやっぱりそうなんですか
わかりました

ありがとうございます

573:デフォルトの名無しさん
09/10/04 19:49:13
>>570
ヘルプには、vs_3_0からの新機能として
「頂点ストリームの頻度」が挙がっているけどな。

574:デフォルトの名無しさん
09/10/04 21:14:53
>>573
ATiはRadeonX1000系ではシェーダーモデル2.0止まりにしたけど
ドライバーでジオメトリインスタンスには対応したんだよ。

575:デフォルトの名無しさん
09/10/04 23:14:34
>>553

template<typename T> inline T square( T x ) { return x * x; }

void orientation_to_euler( const D3DXVECTOR3& dir, float& yaw, float& pitch )
{
____yaw = std::atan2( dir.x, dir.z );
____pitch = std::atan2( -dir.y, sqrt( square( dir.x ) + square( dir.z ) ) );
}
void orientation_to_euler( const D3DXVECTOR3& dir, const D3DXVECTOR3& up, float& yaw, float& pitch, float& roll )
{
____orientation_to_euler( dir, yaw, pitch );

____D3DXVECTOR3 v1, v2( 0, 1, 0 );
____D3DXVec3Cross( &v1, &dir, &v2 );
____D3DXVec3Normalize( &v1, &v1 );
____D3DXVec3Cross( &v2, &dir, &v1 );

____roll = std::atan2( -D3DXVec3Dot( &up, &v1 ), -D3DXVec3Dot( &up, &v2 ) );
}

google code search で見つけたやつをDirectX用に書き換えてみた
ヨーとピッチは正しいけどロールの値が怪しいときがある

576:519
09/10/04 23:39:02
519ですが,DX9以前のマルチモニタに関して,
海外をググってもなかなか情報が出てこない・・・
もし参考文献・URLだけでもありましたらお願いします.
スルーされたのに再度書き込み申し訳ないです.



577:デフォルトの名無しさん
09/10/04 23:47:34
何がしたいのかいまいちわからんけど。
窓4つつくってそれぞれに描画って話じゃなくて?

578:デフォルトの名無しさん
09/10/04 23:51:41
違うウィンドウに描画なんて楽勝でできるし
何を悩んでいるのか具体的によくわからないな

579:519
09/10/04 23:52:13
> 577
フルスクリーンで4画面やりたいのですが,
デバイスを2つ作る場合,同じWindowハンドルを渡さないといけないですよね?
かつ,別々のアダプタじゃないと駄目ですよね.
マルチヘッドでやる場合,違うWindowハンドルを渡さないと駄目ですよね?

カード2枚,それぞれで2画面を出すとき,どうしたらいいんでしょう…



580:デフォルトの名無しさん
09/10/05 00:00:08
>>579
できないんじゃない?
4画面やりたいならカード4枚必要なんじゃない?

581:デフォルトの名無しさん
09/10/05 00:02:55
フルスクリーンで4画面ってそもそも4出力対応のビデオカード必須だとおもうんだが・・・。

582:519
09/10/05 00:03:36
一部DualHeadを諦めてデバイスを4つ作成するバージョンでも試してみましたがダメでした…
ヘルプにある
・フルスクリーンのデバイスと同じフォーカス ウィンドウを持たす
・どのフルスクリーンデバイスとも異なるアダプタを表す。
・デバイス1作成⇒2作成⇒1をReset
に従って初期化はOKだったんですが最初に初期化したデバイスをPresentした瞬間デバイスがLostします.
どこかに良い情報ありますでしょうか.

583:519
09/10/05 00:07:08
> 580さん, 581さん
むりですか… orz
了解しました…
じゃぁ諦めてDualHeadのPCを2台にします…


584:519
09/10/05 00:08:57
大事な一行を忘れました ToT

ありがとうございます!! > 577,578,580,581


585:デフォルトの名無しさん
09/10/05 00:09:36
とりあえず
・デバイス1枚モニタ2枚
・デバイス2枚モニタ2枚
はいけんの?

マルチモニタ アプリケーションでは複数のデバイスをフルスクリーンモードにすることができるが、
それは、これらのデバイスがすべて異なるアダプタのデバイスであり、
同じ Direct3D オブジェクトによって作成され、しかも同じフォーカス ウィンドウを共有する場合に限られる。

586:デフォルトの名無しさん
09/10/05 00:10:28
質問です
光の当たり具合によるコントラストは何によって再現しているのでしょうか?
法線ベクトルと光との角度?

587:519
09/10/05 00:13:41
> 585
・デバイス1枚モニタ2枚 ⇒OK
・デバイス2枚モニタ2枚 ⇒×
でした.もし,後者の情報があれば解決できるかも…とは思っていますが.
後者のは一般的なようですが,あまりに一般的すぎてか,Webで情報を
見つけられませんでした.
同じフォーカスwindowのハンドルを与えているんだけど…
とりあえず2画面に渡るおっきいwindow作ってハンドル与えればいいんですよね?
そのあたりの情報がもしあれば紹介いただけると嬉しいです.

588:デフォルトの名無しさん
09/10/05 00:14:23
マウスを画面からはみ出さないようにしたいのですが
どうすればいいんでしょうか?

589:デフォルトの名無しさん
09/10/05 00:14:26
>>586
>法線ベクトルと光との角度?
わかってんじゃん

590:デフォルトの名無しさん
09/10/05 00:15:55
>>588
うぜーからやめろw

591:デフォルトの名無しさん
09/10/05 00:26:01
>>588
それやってるゲームたまにあるけど
マジで切れそうになるほどウザイよ。

592:デフォルトの名無しさん
09/10/05 00:28:02
え?そうなの?
いやあマウスの座標はとれるんだけど
画面外に出ちゃってボタンを押すと変なところ押しちゃうから
避けたかったんだけど・・・

しかたないからマウス使うのやめるか・・・

593:デフォルトの名無しさん
09/10/05 00:30:38
>>587
URLリンク(bbx.hp.infoseek.co.jp)
検索欄にマルチモニタとかぶち込んでみるとか・・・
なんかそれっぽいのやってる人いるっぽいけどな
DirectX8の話題っしょ?

594:デフォルトの名無しさん
09/10/05 00:34:42
XAudio2のストリーミング再生のことで質問があります
曲を鳴らすとき、新たにスレッドを作成して
URLリンク(msdn.microsoft.com)(VS.85).aspx
ここの方法をスレッド内で行うことでストリーミング再生をしているのですが、
曲を途中で止めた後にまた最初から鳴らす方法や、最後まで鳴らし終わった後にループして最初から鳴らす方法が分からずに困っています
何か良い方法をご存じないでしょうか

595:519
09/10/05 00:39:41
> 593
そうですそうです.9は8と同じ方法でできそうです.
検索で出てきました,

・残りのセカンダリ以降のDirect3DDevice8オブジェクトは、
それぞれのデバイスウインドウにレンダリングする。
(D3DPRESENT_PARAMETERSのhDeviceWindowにセット)
デバイスウインドウはフォーカスウインドウの子ウインドウでなければならない。

の,子windowじゃないと,てのを試していませんでした.やってみます.
(この人は失敗しているようですが…)


596:519
09/10/05 01:48:42
ダメデシタ.
window作成時のパラメタに制限でもあるのかな…
子Windowの作り方がイマイチ分かっていない(とりあえずparentに設定するとかしてみました)
のが原因な気もしますが…
画面は両方解像度も変わるし全画面になるし,windowサイズも変更されますが,
すぐに全画面が解けてwindowが見えちゃう…
先日トライした時はデバイス2のクリア,Presentはできたのに,今回はそれすらもできませんですた

もうちょっとWindowsのプログラミングを勉強してまいります

597:デフォルトの名無しさん
09/10/05 01:54:42
全画面じゃなく、画面解像度いっぱいのウィンドウにしちゃえば?

598:デフォルトの名無しさん
09/10/05 02:22:49
>>519
というか、Dx9だと1つのデバイスで複数のディスプレイのウィンドウに書けるんだが。
それぞれでフルスクリーンにするんだぞ(しないと使えない)
これをグループ化されたフルスクリーンというわけだが。
試したんだな? 試したな?

Dx8以前はどうか知らない。

599:デフォルトの名無しさん
09/10/05 02:39:52
ロール、プレイン、ゲーム!
やったこと無い、ひ・と・も~♪

600:デフォルトの名無しさん
09/10/05 02:40:34
すいません誤爆しました

601:519
09/10/05 02:53:19
> 597
それでも要求は満たせるので,良いということは思いついたんですが,
知識欲求のためにwというか,できないはずはないという思いと,
できないのが悔しいので…
ありがとうございます.解決しなかったらウィンドウでやります!

> 598
CreateDeviceが1つで良いということですか汗それは知らなかったです…
ありがとうございます.試してみます.ちなみに試してなかった…ですorz.
全部のアダプタにCreateDeviceして,という情報に踊らされてた感じですか泣
それぞれでフルスクリーンにすると言うのがいまひとつ分からないですが…
D3DPRESENT_PARAMETERSのwindowedにFalseつけてCreateDevice
するものだと思っていました…
2枚目以降は手動でChangeDisplaySettingsExをするのでしょうか? 

そもそもWindowsプログラミングを始めたばかりなのですいません.


602:558
09/10/05 07:25:39
回答を頂いて色々やってみたのですが、どうにもα値でマスクをかけることができませんでした。
エフェクトをかけたい画像、エフェクトの画像の表示は確認できました。
シェーダでもやってみたのですが、描画はできたのですがマスクがかかった処理が出来ません。
考えうるミスがあるようでしたら教えてください。

ピクセルシェーダの中身は
float4 PS( float2 TexUV : TEXCOORD0 ) : COLOR
{

float4 EffectColor;
float4 TextureColor;

// テクスチャにサンプラーの設定を適用させた色を取得
EffectColor = tex2D(EffectSampler, TexUV);
TextureColor = tex2D(TextureSampler, TexUV);

// α値が0.0より大きい個所のみエフェクト適用
if (0.0 < (TextureColor.a * EffectColor.a))
{
TextureColor.r = TextureColor.r + EffectColor.r;
TextureColor.g = TextureColor.g + EffectColor.g;
TextureColor.b = TextureColor.b + EffectColor.b;
}

return TextureColor;
}
としています。

603:デフォルトの名無しさん
09/10/05 07:26:36
>>598
マルチディスプレイって、どちらかというとマルチヘッドの方が特殊な例で
本来は複数のビデオカードを接続して使うもんだよ。
その場合は、ビデオカードの数だけデバイスを作成するもの。

2画面程度ならマルチヘッドで対応できるが、4画面以上となると現状では
複数のビデオカードを使って複数のデバイスが必要。

519はマルチヘッドでは既に出来ている。

>>519
マルチデバイスは経験したことないので推測で言うけど、テクスチャ等の
リソースはデバイスごとに独立しているものだから、マルチデバイスだと
それぞれのデバイスでテクスチャの作成が必要なはず。
その辺のリソース管理はちゃんとやってる?

604:558
09/10/05 07:26:52
描画処理は
・エフェクトをかけたいテクスチャの描画
・テクニック設定
・Begin
・BeginPass
・シェーダへテクスチャを渡す
・SetTexture エフェクト画像のセット
・SetFVF
・DrawPrimitiveUP
・EndPass
・End
という順番で行っています。
申し訳ないですが、原因が特定できないのでエスパー的な回答を求めています。

605:デフォルトの名無しさん
09/10/05 08:36:50
>>604
technichの定義に必要なフラグを書け。

606:519
09/10/05 11:41:34
> 603
フォローありがとうございます.
仰る通りマルチヘッドは既にできました.が,4画面あるようなビデオカードでは
少々重いシーンをレンダリングしてるので,複数ボードにチャレンジしてる次第です.

とりあえずデバイス毎にテクスチャやメッシュの作成をしてますが,ひとまず動作確認のため
バックバッファのクリア→presentだけやってますが,それでも失敗しています.

とりあえずDX8のSDKに複数デバイスのスクリーンセーバのサンプルがあるとの情報を得たので
落してみつつ軽く違いを見てみたのですが今ひとつわからず…
まずはこのサンプルを動かしてみて,動くかやってみて,違いを良くみて,再度報告します.
(なんで最新のSDKにはマルチモニタのサンプルは無いんだTT)


607:デフォルトの名無しさん
09/10/05 12:55:30
>>606
というか、1つのデバイスで全部描画させて、
残りはバックバッファからGDIなんかで転送かけたほうが早くね?

608:デフォルトの名無しさん
09/10/05 13:58:53
アニメーションの描画に再起関数使ってるんだけど
もしかしてこれって遅くなる・・・?

609:デフォルトの名無しさん
09/10/05 14:00:06
マルチヘッド環境でデバイス2つ作成してマルチモニタを試してみたけど、
片方をResetするともう片方がLostしてしまうね。

ヘルプに
As a result, a multiple-monitor application can place several devices in full-screen mode, but only if all these devices are for different adapters, were created by the same Direct3D object, and share the same focus window.
という記述があるけど、all these devices are for different adaptersってのは
物理的に別のビデオカードでないと駄目ということなのかな?

>>606
デバイスを2つ作成する際に、異なるビデオカードになるように選択しても駄目かな?
AdapterOrdinalInGroupが0のアダプタを2つ選んでみて。

610:558
09/10/05 14:00:14
>>605
すみません、調べてみましたが質問の意味がよくわかりません。
もう少し詳しく教えてもらっていいですか?

611:519
09/10/05 14:04:57
> 607さん
なるほど,その手もありますね.ありがとうございます.
両方動かせるようになったら,是非速度比較してみます.
大半プロジェクタなんでどの方法でも60fps出れば良いんですが…
そのほうが簡単だしリソース節約できそうですね.

ちなみに他の手段として,マルチヘッドのプログラムを使って,
DualHead2Gox2なんかも考えてみました.正味4回レンダリングするだけでいいかな,
と思ったりもするのです.(金で解決という裏ワザかもしれませんが…)

どのみちマルチアダプタができると,それに越したことはないので,
(いまとりあえず2x2画面が目標ですが,できれば最終的には6画面出したいのですorz
全画面同じ環境,異なる視点でのレンダリングです.)
いきなりボード3枚ざしはドライバの問題とかソフトの問題とか山積みそうだったので
まずは2枚からやってみたいです.
やや(だいぶ?)特殊な状況ですいません.先に報告したサンプルで頑張ってみます.


612:558
09/10/05 14:12:39
>>610
質問じゃないや、回答だ

613:609
09/10/05 14:41:21
もう一度実行してみたら、普通に動いた>マルチデバイスでマルチモニタ

ドライバが腐ってるだけかなぁ。
マルチモニタの設定変えてると、おかしくなることが多いし。

614:609
09/10/05 14:46:17
原因判明。
どうもDebug Runtimeだとうまく動かないようだ。

615:519&606
09/10/05 14:57:16
> 609
>片方をResetするともう片方がLostしてしまうね。
まったくおんなじ現象です.
>デバイスを2つ作成する際に、異なるビデオカードになるように選択しても駄目かな?
AdapterOrdinalInGroupが0のアダプタを2つ選んでみて。
それもやってみました…

>どうもDebug Runtimeだとうまく動かないようだ。
っていうか,ええええええええ!!
Debugだとだめですと…ちょっといま時間ができたので即効ためしてきてみます.


616:デフォルトの名無しさん
09/10/05 14:59:48
>>594が分かる方、どなたかいらっしゃらないでしょうか?

617:デフォルトの名無しさん
09/10/05 15:02:53
>>610
お前は1から10まで説明されないと理解できないのか?
それは勉強してるとは言わない。話を聞いてるだけだ。
自分で調べろ。technique構文はHLSLで重要な意味を持つんだぞ。

618:デフォルトの名無しさん
09/10/05 15:04:17
>>594
再生しなおし→普通に再生しなおすだけ。
ループ→フラグをつけるだけ。

ヘルプちゃんと読んでるの?

619:558
09/10/05 15:31:13
>>617
ピクセルシェーダとバーテックスシェーダをラッピングしたようなメソッドのことですよね?
だから直接アセンブラで記述することもできる、と理解しています。

私がわからないのは、テクニックの定義にフラグを使用しているのかどうかがわからないのです。
エフェクトのロード時にデバッグ用のフラグや最適化無しのフラグを立てたり等は出来るそうなのですが
そのことを言っているのでしょうか?
それとも、テクニックに複数のパスを作り、それを分けるフラグのことでしょうか?

不勉強で申し訳ない……。

620:558
09/10/05 15:36:49
問題自体は解決できました。
修正した点は、
・BeginPass後にSetTextureを呼んでいたのをその前に置く
・そもそも、シェーダの処理はエフェクトをかけたテクスチャを出力しているので
 エフェクトの描画を行う必要が無かったので
 テクスチャの描画に変更
・シェーダの記述を変更

シェーダの記述は以下の通りです

float4 EffectColor;// : COLOR;
float4 TextureColor;// : COLOR;

// テクスチャにサンプラーの設定を適用させた色を取得
EffectColor = tex2D(EffectSampler, TexUV);
TextureColor = tex2D(TextureSampler, TexUV);

// α値が0.0より大きい個所のみエフェクト適用
if (0.0 < (TextureColor.a * EffectColor.a))
{
TextureColor.r = TextureColor.r * 0.5 + EffectColor.r * 0.5 * EffectColor.a;
TextureColor.g = TextureColor.g * 0.5 + EffectColor.g * 0.5 * EffectColor.a;
TextureColor.b = TextureColor.b * 0.5 + EffectColor.b * 0.5 * EffectColor.a;
}

621:デフォルトの名無しさん
09/10/05 16:27:16
>>618
XAudio2のボイスは、普通に停止させると自動的に現在の再生場所を保持するので、その状態で再びスタートさせても途中からの再生になるんです
つまり、停止ではなく一時停止の状態なんです
なので、再生が終了したりといった任意のタイミングで、一時停止ではなく停止をさせる、もしくは再生位置を最初に戻す方法を探しているのですが、
ググったりMSDNを探しても見つからないのです

622:デフォルトの名無しさん
09/10/05 17:40:04
>>621
pauseじゃなくてstopかければいいじゃん。

623:519&606&615
09/10/05 17:42:45
駄目ダッター泣 どうやら私が相当へぼいだけのようです?
ちなみにDebug→Releaseにしたら,フルスクリーンが解除されたりはしなくなりましたが,
PresentでまだINVALID_CALLになりまふ…2枚x2画面でやってもダメポです…
ResetかけてもINVALID_CALL…
Presentの3番目をNULLにしても親窓にしても子窓にしても駄目でした…
基本,マルチヘッドでググったら最初に出てくるサイトのプログラムを弄ってるんですが.
CreateWindowを2枚にして(位置はあまり関係ないですよね?),
Parentに主窓,デバイス2のd3dppの設定に子窓を設定,
ヘッド数を1に強制,デバイス2のCreateDeviceで主窓を設定,
デバイス2作成後,デバイス1をReset,んで,あとはSwapChainうんぬんを飛ばして
ClearしてPresentしてるだけなんですが…
(ちなみにSwapchainを取ろうとすると既にLOSTしていてInvalidcall)
613さんと何が違うんでしょう…

624:デフォルトの名無しさん
09/10/05 17:48:02
>>622
Pauseは無くStopしかないのですが、Stopを実行すると上記の一時停止の状態になるんです

625:519
09/10/05 17:48:21
そういえば書いていませんでした,VGAにはGF7900とGF7600使ってます.
Windowsの起動時に画面乱れるし…相性もあるのかな…

余談ですが,先に指摘されていましたが,どういう条件か忘れましたが,
2つのデバイスで1つの画面(画面1)に
描ける状況になりました.なのになんで画面2に書けないんだろう…汗

さらにDX8SDKが見つからなくて先のサンプルも試せなかったです…
まぁでも読んでみましたが明らかにおかしいところもわからなかったorz

626:デフォルトの名無しさん
09/10/05 17:53:20
>>624
確かにPauseはなかった。スマン。
だがStop時にSourceVoiceを止めて開放(Release)して、バッファも削除したらそれでいいんじゃないの?
別に迷うようなところじゃないと思うんだが。

627:デフォルトの名無しさん
09/10/05 18:14:46
>>620
そんなやり方じゃあ背景残したい場合にどうすんのよ。

628:デフォルトの名無しさん
09/10/05 18:29:21
>>626
えっと、Stop時にはソースボイスやバッファを削除して、再び再生するときにソースボイスやバッファを作り直すということでしょうか

なお、ストリーミング再生の部分は、スレッドを新たに作成し、その中でストリーミングの処理を行っているので、Stop時にそのスレッドを削除し、
再び再生するときにまたスレッドを作成するという方法を取ろうとしたのですが、ExitThread関数を実行した時点でエラーが出てしまい、どうにもうまくいきませんでした

629:558
09/10/05 18:33:41
>>627
背景って残すものなんですか?
毎回描画してるんですが……。

630:デフォルトの名無しさん
09/10/05 22:40:13
長方形のポリゴンを繋げてミサイルの煙を表現しようとしています。
基準点を置いてそこを中心に対の点を置く、それを結んで描画しています。
ビルボード処理みたいなのをかけて出来る限り面がこちらを向くようにしたいのですが詰まっています。
「カメラ→注視点」のベクトルと「カメラ→基準点」のベクトルをD3DXVec3Crossを使い外積を求め(全てのベクトルは正規化済み)、
基準点を中心に求めたベクトルと、、その対に置いていけば出来るんじゃないかなと思ってやってみましたが上手くいかず。
その他色々試していますが似たような結果しか得られていません。
どなたかアドバイスを頂けると嬉しいですorz



631:575
09/10/06 00:07:57
575で書いちゃったけど
オイラー角ってジンバルロックとかあるから
ロール角は求めないほうがいいね

632:デフォルトの名無しさん
09/10/06 00:10:26
8分木ってここで聞いていい話?

633:デフォルトの名無しさん
09/10/06 00:24:03
>>630
やったことねぇけどスクリーン座標にもってきてからつなげてみれば?w

634:デフォルトの名無しさん
09/10/06 00:24:51
>>632
ダメだ
そんなの紙に描いて自分でなんとかしろ

635:デフォルトの名無しさん
09/10/06 01:42:23
>>628
いや、スレッドはXAudio2が勝手に作るものだし……。
ExitThreadを明示的に呼び出すなんて論外。
ヘルプとサンプルをもう一度読み直せ!

>>629
お前はDrawPrimitive1発で終わるような画面描画しかせんのか?

636:628
09/10/06 03:02:43
>>635
ありゃ、そうだったんですか…
URLリンク(msdn.microsoft.com)(VS.85).aspx
ここで、ストリーミング再生には個別にスレッドを作る必要がある、みたいに書いてあったんでCreateThreadでスレッドを作成して、
その中でストリーミング処理を行っていました…
というか、そうしないと音楽再生中はひたすらwhile文で回すので、再生中は他のことが出来ないと思ったんですが
ちなみに、最後まで音を鳴らした後に、ループしてまた最初から鳴らす方法はこの方法でも解決しました
(ただ、指定した場所からループする、というようなことはまだ出来ないですが)

637:558
09/10/06 12:35:37
>>635
いわんとすることがよくわからないので、
問題が起こった時に635さんの回答を思い出して描画パイプラインをもう一度見直します。
ありがとうござました。

638:デフォルトの名無しさん
09/10/06 13:56:12
>>636
そんなの、意訳を読んで誤解してるだけ。原文はこう。
URLリンク(msdn.microsoft.com)(VS.85).aspx

Streaming audio data in XAudio2 is accomplished by creating a separate thread
for reading the audio data and using callbacks to control that thread.

creating a separate threadするのはXAudio2であってプログラマが用意する必要は無い。
組み込みでいくつかのコールバッククラスがあって、利用する際にはそれを継承したクラスを用意して使う。
その使い方が口酸っぱくかかれてると思うんだが?

639:デフォルトの名無しさん
09/10/06 13:59:49
>>637
確かに、背景という用語はちょっと誤解を招く表現だった。スマン。
先に描画したフレームバッファ上の画像データのことを言っている。
ポリゴン同士ならZバッファがあるから描画順が違ってても問題ないが、
αかけるならZバッファ使えなくなるだろ?
じゃあ半透過にするには背景(in_color)の色と混ぜないといけなくなる。

640:デフォルトの名無しさん
09/10/06 15:08:03
>>639
詳しい回答助かります!
確かに作成した画像の一部が被さるような描画を行うとおかしくなりますね。
今現在、ゲームのインターフェース部分でのみの使用なので
画像が被るような処理を行わないようになっています。

今後それ以外の用途が出た場合にプログラム側でZバッファで
描画する順番をソートするプログラムで回避しようと思います。
ありがとうございました。

641:デフォルトの名無しさん
09/10/06 21:11:51
>>638
なるほど、そうでしたか
URLリンク(msdn.microsoft.com)(VS.85).aspx
ここの方法だと、再生が終了するまでwhileで回し続けていたので、終了するまで他の動作が出来ない→スレッドを作成して、その中で処理する必要がある
と思ってましたが、回し続けなくても、メインループの中で、コールバックがあったときだけ次のバッファにデータを入れれば良かったんですね
メインループの中で処理できるのなら、途中でストップ→最初から再生、なども簡単に出来そうです

642:デフォルトの名無しさん
09/10/06 21:35:13
>>614
なにがメインループや。コールバックと言ってるじゃないか。
全然人の話聞いてないだろ。

643:デフォルトの名無しさん
09/10/06 21:47:02
>>642
あ、てっきりコールバックは、条件を満たしたときにそれを知らせるだけかと思ってました
OnBufferEnd内でストリーミング処理を行えばいいんですね

644:デフォルトの名無しさん
09/10/06 21:57:28
あー、違う、コールバックを継承したクラスを作成すると、それがスレッドみたいな扱いになるんですかね
だから、CreateEventとかしなくても問題ないと
すいませんちょっと頭の中整理してきます

645:デフォルトの名無しさん
09/10/06 22:12:10
ああダメだやっぱり混乱してる
CreateEventしなくていいわけないだろCreateThreadだ

646:デフォルトの名無しさん
09/10/06 23:16:44
DirectInputを使用している他のアプリに対して、ダミー入力を送りたいのですが
どうすればいいのか、よくわかっていません。

フックするなどのキーワードが出てきましたが
フックする方法も良く分かっていません。

何か参考になるものや方法をご存知の方いらっしゃいますか?


647:デフォルトの名無しさん
09/10/06 23:20:22
>>645
いや、イベントハンドルも基本的には要らないし。
いちいち付き合ってられんな。もうちょっと勉強してから書き込んでくれ。

648:デフォルトの名無しさん
09/10/06 23:21:18
DirectInputを使う必要あるの?

649:デフォルトの名無しさん
09/10/06 23:38:33
>>648

どういうことだろう。

他のアプリがDirectInputから情報を見てるから
そこにダミーの情報を送ってやれば良いと
考えているのですが。


650:519
09/10/07 06:11:07
どうしても駄目ですね…マルチデバイスでマルチモニタができません…

>> 609さん
DualHeadのVGAでも,マルチデバイス出来ましたか?
もし可能なら,参考になりそうな情報か,ソースを一部分でもいいので
頂けるとありがたいです…


651:デフォルトの名無しさん
09/10/07 11:51:56
動的な頂点バッファって、普通に考えて頂点バッファが2倍必要ですか?

1つ目:デバイス用
2つ目:アプリでいじくる用

デバイスから頂点を読むと遅くなるので
コピーを渡す必要があり、結果、動的バッファで速度を重視するなら
頂点量が2倍になるという考え方は普通ですよね?


652:651
09/10/07 12:47:00
>>651
いや・・・静的なバッファでもManagedを指定すれば
結局背後で自動的にメモリが確保されたりするし
かといって静的なバッファをDEFAULTするにも自分で
バックアップを用意しないといけないから結局2倍必要であり、
静・動関わらず、頂点データの領域はは2倍必要という事か・・


653:デフォルトの名無しさん
09/10/07 14:02:34
頂点バッファを読み込まなければならないようなプログラムを組むんだったら、
シェーダで何とかすることを考えた方が有用だろう。

654:609
09/10/07 18:48:40
>>650
エラー処理も終了時の後始末もないような酷いコードで良ければ。
URLリンク(www.dotup.org)
ダウンロードパスは609

動作確認はGF9600GTのデスクトップ機と、945GSEのネットブック。
どちらもDualHeadの環境。

そして今試したら、DebugRuntimeでも動いてしまった。
この前駄目だったときから変えたのは、ネットブック用にHWT&Lの判定を
追加したくらいなんだけど。

655:デフォルトの名無しさん
09/10/07 20:59:58
>>651
リアルタイムですべての頂点を不定形に動かしまくるなら話は別だが、
普通は頂点バッファの一部だけが変わればいいので、
すべての状態を表した1個の頂点バッファを用意して、
毎フレームIndexBufferを作り直している。
IndexBufferもWriteOnlyで1回確保して毎フレーム書き込んでるだけ。
これで何も問題ない。

656:デフォルトの名無しさん
09/10/07 21:58:54
>>655
確かにその場で書き込めばメモリ確保しておく必要ないし
IndexBufferを変えるのは考えていませんでした。

657:650
09/10/07 22:19:52
>> 609
ありがとうございますっ!!感謝感激です.
だうそできました!!そしてコードを読んでみました.
やはりWindowハンドルの与え方まわりが違いそうです.
子窓にしなくてもできてるんですね・・・へるぷの馬鹿…
今日から出張中につき一週間ほどテストできないのが口惜しいんですが,
ありがとうございます!
Debugでも動くなら何よりです.参考に頑張ってみます!


658:デフォルトの名無しさん
09/10/08 04:43:30
>>630
カメラがどこを向いているかは関係ない。
カメラの位置とビルボードの位置の問題だから。
カメラの位置とビルボードの位置を結ぶベクトルを正規化したベクトルFから適当なupベクトルとの外積を使って直行基底を求める。
直行基底をなす、3つの単位ベクトルで回転行列を作る。
このとき、逆回転行列を求めたいので最初から転置しておく。
これで、ビルボードをカメラ方向に向ける回転行列が完成。



659:デフォルトの名無しさん
09/10/09 10:18:15
xAudioを使いたいのですが、xWMAフォーマットを使っておけば
データ容量も小さくストリーミング再生も問題ないし、配布についても問題無しですか?

660:デフォルトの名無しさん
09/10/09 11:03:16
>>659
XAudioはXBox360専用。XAudio2がPCでも使えるほうな。
DirectX Audioというなら問題ないんだが。

Direct Show でWMVの再生ができることは確認したが、
音声はogg+vorbisを使えるようにしてしまってるからWMAは試したことないな。
他のやつ答えてやってくれ。

WMAの採用は基本的には問題ないが、OS単体で再生が保証されてるわけじゃないから
コーデックの別途インストールが必要になるケースが出るぞ。

661:デフォルトの名無しさん
09/10/09 12:08:07
>>660
XAudio2を使うのならxWMAの再生は保障されるんじゃないか?

662:デフォルトの名無しさん
09/10/09 12:57:32
>>661
MSDNちょっと読んでみたが、xWMAはWMAのサブセットで、
「XAudio2 と XACT3 の両方において、ソフトウェアで xWMA をデコードできるようになりました」って書いてあるね。

じゃあ大丈夫なのかも。
事実上別形式と思っておいたほうが安全そうだね。

663:デフォルトの名無しさん
09/10/09 14:03:01
>>662
そうだね。
WMAは普通はASFコンテナだけど、
xWMAはRIFFコンテナに突っ込んであるから、普通のプレーヤーで再生できなかったりするし(要はDirectShow経由で再生できない)。

>>659
あーそういや、指定位置に着たら指定位置に飛ぶようなループは設定できなかったっりしなかったっけ?
そういう曲使わないなら問題ないと思うけど。

664:デフォルトの名無しさん
09/10/09 14:41:52
>>663
そういうのはバッファをSourceVoiceで与えるときにフラグで指定できるけど、
正直めんどくさい……(まだ自分では対応させてない)

665:デフォルトの名無しさん
09/10/09 17:52:41
別アプリでDirectXで描画している画面に、図形などを表示したいのですが
別アプリのサーフェイスの取得 または 描画のフック が実現できるような関数あれば教えてください。
(サンプルがあるサイトとかもあると助かります・・・)
うまく説明できないので実際あるやつだと
・DirectXを使うゲームを起動
・frapsやdxtoryなど(DirectXの)動画を録画するツールを起動
・ゲーム画面に fps(フレームレート)が表示される (←これと同じようなことをやりたい)

透明なウインドウを重ねただけだと、片方のウインドウしか動画に録画されないのです。

666:デフォルトの名無しさん
09/10/09 18:10:34
>別アプリでDirectXで描画している画面に書き込み
なんかこのスレみてたらこんな質問が何回も出てくるけど、
何でこんなめんどくさいことばかりこいつらはやりたがるんだ?

アプリからじかにハードウェアを叩けるのがDirectXのいいところなのに、
横から割り込めるようなチャチな作りだったら意味ないだろ。

667:デフォルトの名無しさん
09/10/09 18:24:16
キーボードとマウスの操作をゲーム画面に重ねて動画に保存したいからです。
なんでそんな動画を保存したいのか?って訊かれたら趣味・・かな。

668:デフォルトの名無しさん
09/10/09 19:31:51
XAudio2のことを解説してる書籍ってありますか?

669:デフォルトの名無しさん
09/10/09 22:27:16
待たせるなよ!

670:デフォルトの名無しさん
09/10/10 00:14:38
【MikuMikuDance】ミクを異世界各地で撮ってみた - Where the Hell is Miku? -URLリンク(www.nicovideo.jp)

671:665
09/10/10 00:23:05
>>670
すごい・・。やりたいことはこれに近いですね。もっとかなり簡易版ですが。
"API Hook"で少し調べてみます。ありがとー。

672:デフォルトの名無しさん
09/10/10 00:23:16
>>667
>キーボードとマウスの操作をゲーム画面に重ねて動画に保存したいからです。
ビジネスアプリでほしい場面はあるけど
それはそれでキャプった後で別でつけたほうが早いよ多分
だってどうせコメントだっていれなきゃいけないんでしょ?

673:デフォルトの名無しさん
09/10/10 00:56:52
>>670
キモッ

674:デフォルトの名無しさん
09/10/10 01:55:50
>>670
ちゃんと影が落ちてたりするし、手調整じゃなくて
オートでやってるなら凄い技術だね。
ただシェーダ主体になってくると、簡単にはいかないだろう。
World変換行列がどれかすら判断する術がない。

675:デフォルトの名無しさん
09/10/10 05:41:55
DirectXにてポリゴンとベクトルの当たり判定をとっているのですがうまくいきません
なにか関数の使い方等間違っていますか?
最適化などは後でやるのでとりあえず動くようにしたいです

676:デフォルトの名無しさん
09/10/10 05:44:52
第1引数:直線始点 第2引数:直線終点 第3引数:ポリゴンの座標1 第4引数:ポリゴンの座標2 第5引数:ポリゴンの座標3
BOOL Vec_Pol(D3DXVECTOR3 *v1, D3DXVECTOR3 *v2, D3DXVECTOR3 *p1, D3DXVECTOR3 *p2, D3DXVECTOR3 *p3){
//Planeを作る
D3DXPLANE pln;
D3DXPlaneFromPoints(&pln, p1, p2, p3);
//無限平面との衝突点を算出
D3DXVECTOR3 o;
if(NULL==D3DXPlaneIntersectLine(&o, &pln, v1, v2))return false;
//ポリゴンと点の内外判定
D3DXVECTOR3 vec1, vec2, cross, temp;
vec1 = *p1 - o;
vec2 = *p1 - *p2;
//外せきその1
D3DXVec3Cross(&temp, &vec1, &vec2);
vec1 = *p2 - o;
vec2 = *p2 - *p3;
//外せきその2
D3DXVec3Cross(&cross, &vec1, &vec2);
if(temp.x * cross.x < 0.0f)return false;
if(temp.y * cross.y < 0.0f)return false;
if(temp.z * cross.z < 0.0f)return false;
vec1 = *p3 - o;
vec2 = *p3 - *p1;
//外せきその3
D3DXVec3Cross(&cross, &vec1, &vec2);
if(temp.x * cross.x < 0.0f)return false;
if(temp.y * cross.y < 0.0f)return false;
if(temp.z * cross.z < 0.0f)return false;
return true;
}

677:デフォルトの名無しさん
09/10/10 06:28:00
XAudio2でwavファイルの音を鳴らすことって出来ないんですか?
サンプルで見たこともない形式のファイルを読み込んでるんだけど

678:デフォルトの名無しさん
09/10/10 07:08:31
どうして無視するんですか?

679:デフォルトの名無しさん
09/10/10 07:28:27
>>678
誰?お前?

680:デフォルトの名無しさん
09/10/10 09:40:39
>>677
普通に出来る

681:デフォルトの名無しさん
09/10/10 09:57:34
土曜の朝に質問して即レスが来ると思う神経を疑う

682:デフォルトの名無しさん
09/10/10 12:37:35
レイ→命中したポリゴンの3頂点を取得→法線ベクトルと命中点の座標取得
ってやってるんだけど
もしかしてレイによるポリゴン判定ってあまりやらない方がいいんですか?

683:デフォルトの名無しさん
09/10/10 12:51:20
>>682
2Dのシューティングで当たり判定がしばしば矩形になっているように、
当たり判定処理は描画してるポリゴンとは別に考えたほうが簡単になる。
3Dの場合ならいくつかの球体と考えればいいんじゃね?

684:デフォルトの名無しさん
09/10/10 13:27:32
>>682
どうしてもポリゴン単位でないとゲーム性に問題が出るつーならそうするが
そうれないなら速度的な問題を考慮して単純な形状で判定するのが基本。

685:682
09/10/10 13:34:20
地面判定に使って上でボールがはねるように
しようとしたんでこうなったんですが・・・

やっぱり速度的にまずいんですねえ・・・
どーすっかなあ・・・

686:デフォルトの名無しさん
09/10/10 13:49:06
>>658
ありがとうございます。
なんとか打開できました。

687:デフォルトの名無しさん
09/10/10 13:49:45
>>685
ボールなら問題ねぇだろw

688:682
09/10/10 13:54:20
というか地面との当たり判定ってどう言う方法が適しているんでしょ?

689:デフォルトの名無しさん
09/10/10 13:56:44
>>676
ちゃんと確認はしてないけど、

if(temp.x * cross.x < 0.0f)return false; 
if(temp.y * cross.y < 0.0f)return false; 
if(temp.z * cross.z < 0.0f)return false; 

これは内積にしないと駄目じゃない?
例えば[+0.1,+1,0]と[-0.1,+1,0]のケースがはじかれる。

690:デフォルトの名無しさん
09/10/10 14:29:54
>>688
二分法
移動量ぶんだけ進めて、めりこんでたら半分戻して、まだめりこんでたら半分戻して、
めりこまなくなったら半分進めて・・・

というのを、欲しい精度までやる

691:デフォルトの名無しさん
09/10/10 14:34:50
>>688
マップの構造と用途によるなぁ

箱庭を主人公が歩く程度だったら地形判定用簡易ポリゴンを用意して
レイと簡易ポリゴンでいいと思うよ

箱庭で物理シミュとかやるんだったら球(や必要な形状)とポリゴンの判定とか必要じゃね?
これは大変だな

広いフィールドなら格子状の高さマップから平面の方程式だな

後はすべての地形を幾何学形状にして根性で当たり判定?

俺が知ってるのはこんなもんかなぁ・・・

692:デフォルトの名無しさん
09/10/10 16:21:50
3D空間上でソートを行わず半透明のポリゴン(テクスチャ)を正しく描画することは出来るのでしょうか。
Zバッファを有効にした場合、手前にアルファ値0.0に近い値で描画しているものがあるとその奥に描画されても見えません。
無効にすると当然前後関係が無くなり描画順になってしまいます。
描画しているものは雲や煙、レーザーやその他エフェクトと数が多いです。
雲と煙に関しては白黒なので合成方法を変えてやれば何とかなりますが
様々な色が乗っているエフェクトはどうにも出来ませんでした。
描画方法が個々で違ったり数が多かったりしますが、何とかしてでもソートさせないと駄目なものなんですかね・・・。

693:デフォルトの名無しさん
09/10/10 16:48:49
>>692
逆に半透明なオブジェクトを描画するときにZバッファを切ればいいんじゃね?
というか、いつも描画順でソートした状態で描画してるから、そんなことで悩んだことないな。

694:デフォルトの名無しさん
09/10/10 16:55:54
つかコリジョン関連はコレ1つで全部OK!みたいなものはないから
ゲーム性やデータ構造とか欲しい精度とかにあわせて変更しつつ
さらにそのゲームにあわせた細かい調整が必須。

695:デフォルトの名無しさん
09/10/10 17:04:12
>>693
>いつも描画順でソートした状態で描画してるから
平たく言うと何のソートもしてないってことか

696:デフォルトの名無しさん
09/10/10 17:04:59
>>694
正しいかどうか知らんが
そういう抽象的なアドバイスって
何かの役に立つの?

697:デフォルトの名無しさん
09/10/10 17:06:52
ソート不要の半透明は
不完全なD3D11の技術デモで
俺SUGEEEE!!!してるぐらいだから無理じゃね?

698:デフォルトの名無しさん
09/10/10 17:24:05
>>695
逆だ逆。Zバッファをろくにつかってない。
それで済ませてしまってる。

699:デフォルトの名無しさん
09/10/10 17:25:14
昔懐かしいPowerVRはソート不要で半透明できた気がする

700:692
09/10/10 17:26:09
皆さんありがとうございます。
やはりシンプルには出来ないようですね。
とりあえず描画順をソートする対象を減らすことから対応してみます。


701:デフォルトの名無しさん
09/10/10 17:32:43
Zソートなら問題なし!
PSはそうやってました

702:デフォルトの名無しさん
09/10/10 18:36:08
例えがあれだけど、ドラゴンボールのキャラの周りに出る「気」みたいなのはポリゴン単位でソートしないとまずいのかな

703:デフォルトの名無しさん
09/10/10 19:44:25
>>702
モノによるけどあんなのキャラ描画した上にかぶせるだけじゃね?

704:デフォルトの名無しさん
09/10/11 01:13:47
質問です
2D板ポリゴンを作成してテクスチャを一枚貼り付けることはできたのですが、
マルチテクスチャにしようとするとStage0だけ反映されてStage1以降が反映されません
・テクスチャはグローバル変数にLPDIRECT3DTEXTURE9を2つ作ってそこにファイルから読み込みました
・Stage設定とテクスチャのセットはポリゴンの頂点を決めた後に行っています
・ステージ0の設定は加算合成、色1テクスチャ、色2ディフューズ
・ステージ1の設定はα合成、色1テクスチャ、色2カレント にしてます

順序がおかしいのか、必要な手順が抜けてるのだと思いますが、分かる方お願いします
もしくは簡単なマルチテクスチャのサンプルコードあったら教えてください

705:デフォルトの名無しさん
09/10/11 01:22:31
>>704
シェーダー使え。
というか、シェーダー使って例の本読みながらプログラム書いてたら、基本的な部分で迷うことはほとんど無くなったな。

706:デフォルトの名無しさん
09/10/11 01:36:44
現在文字の表示にGetGlyphOutline等を使ってテクスチャに書き込んで表示してるのですが
これだと文字が太すぎてデバッグ用途に不便なのでデスクトップの文字みたいな
細い文字を使用したいのですがどうすればいいのでしょうか

707:デフォルトの名無しさん
09/10/11 02:18:17
>>705
例の本ってなんですか?

708:デフォルトの名無しさん
09/10/11 02:26:25
>>707
お前馬鹿じゃねーの
例の本って言ったら例の本のことだろーが

709:デフォルトの名無しさん
09/10/11 02:33:56
>>706
フォント変えればいいじゃないか

710:デフォルトの名無しさん
09/10/11 02:55:21
>>707
出ると思った。
会社にあるから書籍名調べるのが面倒だったんだが。

これのことね。
URLリンク(www.amazon.co.jp)

この本があれば、あとはMSDNとSDKのサンプルでほとんど事足りるな。

711:704
09/10/11 05:13:29
>705
すいません、意味がよくわかりません
シェーダを使わないとマルチテクスチャは使えないんでしょうか?
2D板ポリゴン(三角形×2)の上に、2枚目のテクスチャを貼り付けたいだけなんですが

712:デフォルトの名無しさん
09/10/11 05:29:12
俺はDirectX9シェーダプログラミングのほうがいいと思うけどな
今切れ氏の本
>>711
その方法もこの本に書いてある

あとシェーダで書けばテクスチャステージとかレンダーステートとか
そういう面倒な設定をしなくても、普通にテクスチャ2つサンプリングして
サンプリングした色を足すなり乗算するなり簡単に出来る

713:デフォルトの名無しさん
09/10/11 07:30:26
>>704
言葉じゃなくて、その部分のコードを正確にそのまま書かないと
何が悪いか分からん。

固定機能でも8枚までテクスチャは貼れる。

714:デフォルトの名無しさん
09/10/11 10:32:06
>>711
>>712が書いてるけどシェーダで組めるようになれば色々楽。
まぁそれまでが大変かもしれないけど、何れ覚えないといけないことなので早いに越したことはない。

715:デフォルトの名無しさん
09/10/11 11:33:55
>>711
ソースも出さずに分かりませんは良くないと思うけど
あまりにかわいそうなので情報だけ

URLリンク(marupeke296.com)

716:デフォルトの名無しさん
09/10/11 11:42:04
まぁWindows7がそこそこ成功してDirectX11の時代になったら
固定機能パイプラインが無くなるからなぁ・・・。

Vista以降をターゲットでいいならDirectX11は古いビデオカードでも使えるしな。

717:デフォルトの名無しさん
09/10/11 12:16:28
くだらない質問なんだけどシェーダーって一回読み込んだら何回でも使えるんだよな?
LPD3DXEFFECTをクラスに組み込んでオブジェクト数に応じた数をそろえるのって無駄だよな?

718:デフォルトの名無しさん
09/10/11 12:16:53
>>716
無くなったら過去の大量のゲーム類が動かなくなるんだが、
無くなると言うソースはどこにあるんだ?

719:デフォルトの名無しさん
09/10/11 12:21:34
>>718
いやとりあえず動くんじゃね?
だってあの機能ってエミュだろ?

720:デフォルトの名無しさん
09/10/11 12:21:53
>>717
そう無駄。
COMは参照カウンタ付きなんだから
普通にそれぞれ参照を持たせるのが吉。

>>718
Win7でD9D9以前が動けばモーマンタイだろ。
実際どうだかは知らんが。

721:デフォルトの名無しさん
09/10/11 12:25:22
>>718
実際、そういう環境の差異で動かなくなってしまう場合は多い
昔、Cドライブにデータを保存してたアプリなんてセキュリティが厳しくなったせいで
まったく動かなくなってしまったの多いしな

722:デフォルトの名無しさん
09/10/11 12:35:06
固定昨日のエミュレーションなんてげふぉ3の時代からやってる

723:デフォルトの名無しさん
09/10/11 13:19:06
>>722
>げふぉ3
これなんか差異がなかったっけ?

724:デフォルトの名無しさん
09/10/11 14:07:51
>>718
DirectX10から固定機能パイプラインはないぞ。

単にWindowsVsitaやWindows7上でも
過去のDirectX自体は動くから過去のゲームはそのまま動く。

725:デフォルトの名無しさん
09/10/11 15:16:41
2枚テクスチャがあったとして
それがオブジェクトの違う部分に貼ってあるとします

でシェーダーを実装して表示してみたら
なんでかテクスチャの位置が入れ替わっているのですが
これは何でなんでしょうか?
ただ単にSetTextureの部分がおかしいのでしょうか?

726:デフォルトの名無しさん
09/10/11 15:18:51
>>725
1枚貼って様子見て、ついで2枚目を貼るという普通の開発手順を踏んでるよな? な?
そしたらそんな疑問は出ないはずなんだが。

727:デフォルトの名無しさん
09/10/11 15:41:34
すいません参考にしたサンプルから間違ってたようです

でもトゥーンシェーダー組み込もうとしただけなのになんでこんな・・・

728:デフォルトの名無しさん
09/10/11 15:59:46
>>727
おい……板ポリに対してトゥーンシェーダーかけるなんて……冗談だよな……?
冗談と言ってくれ……。

729:デフォルトの名無しさん
09/10/11 16:28:45
マビノギに謝れ!

730:デフォルトの名無しさん
09/10/11 16:37:43
法線マップ用意すればもしかしたらちょっとは絵になるかもしんねー

731:デフォルトの名無しさん
09/10/11 16:59:39
板ポリならアニメ調の絵はって終わりだろ。
どこにトゥーンシェーダー介する余地があるんだ。

732:デフォルトの名無しさん
09/10/11 17:00:04
>>728
そのくらいつくってんだからわかるわw
車の形だよ
したらば上が青でタイヤが黒なのに逆になってんだよ

今調査中

733:デフォルトの名無しさん
09/10/11 17:07:13
>>731
なにいってるの?
バンプなら板ポリでもお日様の位置で陰が微妙に変わるだろ?
変なこというな

734:デフォルトの名無しさん
09/10/11 17:28:49
オンラインゲームを始める前にいろいろと調べてたのですが、
少しわからないことがあるので相談お願いします。

現在グラフィックカードHD4850の512MBをしています。
OSが、VISTAの64BITなのですが、ダイレクトXを導入することにより
グラフィック(ベンチマーク)は向上するのでしょうか?

735:デフォルトの名無しさん
09/10/11 17:30:19
ここはプログラミングの質問をするスレですよ

736:デフォルトの名無しさん
09/10/11 17:33:50
>>735 スレ違いすみませんでした。

737:デフォルトの名無しさん
09/10/11 17:46:44
>>733
ただの板ポリにバンプマップするのかよw

738:デフォルトの名無しさん
09/10/11 18:25:00
>>737
例え板ポリといえど、法線や深度など
必要な情報がそろっていれば、十分意味はある。
単にそれらを頂点で持つか、テクスチャとして持つかの
違いでしかない。
アンタの考え方は一昔前のもの。

739:デフォルトの名無しさん
09/10/11 18:43:48
>>737
デザイナの勝手だろ
奴等がそう作ればそう表示されるようになってるだけだ
ていうかちょっと使い方に驚くけど結構板ポリバンプ使うぞ奴等

740:デフォルトの名無しさん
09/10/11 18:59:44
そもそもの話が板ポリにトゥーンだった気が。

741:デフォルトの名無しさん
09/10/11 19:13:42
>>740
それもデザイナの勝手

742:デフォルトの名無しさん
09/10/11 19:17:38
そもそも板ポリって質問と関係あるのか?

743:デフォルトの名無しさん
09/10/11 19:20:54
てゆか
>>711>>725を同一人物なの?
おれは違うと思ったんだけど

744:デフォルトの名無しさん
09/10/11 19:22:43
違うだろ
車のオブジェクトって言ってるし

745:デフォルトの名無しさん
09/10/11 19:24:20
>>743
馬鹿は頭に血が上ってるから自分と違う意見は全部同一人物なのさ

746:デフォルトの名無しさん
09/10/11 20:54:55
float4x4 matWVP;

float4 VertexShader(float4 f4Position : POSITION) : POSITION
{
return mul( f4Position, matWVP );//3D変換
}
float4 PixelShader() : COLOR
{
return float4(1,1,0,1); //黄色単色
}
technique tecMinimum
{
pass P0
{
VertexShader = compile vs_2_0 VertexShader();
PixelShader = compile ps_2_0 PixelShader();
}
}

っていうシェーダーなんですがD3DXCreateEffectFromFileによる読み込みの
段階で弾かれるんです、どこを直すべきなのかご教授願えませんか?

747:デフォルトの名無しさん
09/10/11 20:56:30
エラーメッセージの提示もなしで何をご教授なのだろうか

748:デフォルトの名無しさん
09/10/11 20:58:54
いやあ
if( FAILED( D3DXCreateEffectFromFile(pDevice, _T("aaa.fx"), NULL, NULL,
0, NULL, &g_pEffect, NULL)))
{
MessageBox( NULL, "シェーダーファイル読み込み失敗", "", MB_OK);
return E_FAIL;
}
とやってみるとダイアログが出るので読み込んでいないとしか・・・
こういうのってなにか足りないと読み込まないもんなんじゃないんですか?

749:デフォルトの名無しさん
09/10/11 20:59:06
(和訳)エラーメッセージはなんてでてるの?

750:デフォルトの名無しさん
09/10/11 21:06:44
>>748
printfか何かで出力されてるはず

751:デフォルトの名無しさん
09/10/11 21:11:36
HRESULTから文字列を取得できませんかそうですか

752:デフォルトの名無しさん
09/10/11 21:11:50
そもそも返り値ちゃんと見ろって話だろう。
HRESUT型でわざわざ返してくれるんだから。

753:デフォルトの名無しさん
09/10/11 21:13:47
>>746
とりあえず、関数名のPixelShader、VertexShaderは
予約語とかぶるから、別な名前にしたら?

つーかD3DXCreateEffectFromFileの最後の引数をNULLにすんな。

754:デフォルトの名無しさん
09/10/11 21:14:01
とりあえず
D3DXCreateEffectFromFileの戻り値を調べるとか
シェーダー内でコンパイルエラーが出てるなら
怪しいところ
いったん全部コメントアウトしてどこで死んでるのか絞り込むとか
特別な知識がなくてもそれくらはできそうなものだけど

755:デフォルトの名無しさん
09/10/11 21:20:32
初心者スレでフルボッコかよwwwwwwwwww

756:デフォルトの名無しさん
09/10/11 21:21:32
戻り値・・・は-2147467259?

757:デフォルトの名無しさん
09/10/11 21:23:55
>>753
それだ!
VS PSにしたら動きました

馬鹿正直に英語にするんじゃなかった・・・

758:デフォルトの名無しさん
09/10/11 21:24:39
HRESULT: 0x80004005 (2147500037)
Name: E_FAIL
Description: An undetermined error occurred
Severity code: Failed
Facility Code: FACILITY_NULL (0)
Error Code: 0x4005 (16389)

だそうだ

759:デフォルトの名無しさん
09/10/11 21:27:47
会社でやったら恥かしくて失禁してるレベル

760:デフォルトの名無しさん
09/10/11 21:31:34
fxcに食わせれば直ぐにわかる内容ではあったな。

761:デフォルトの名無しさん
09/10/11 21:33:28
初心者スレだからしかたねえさ

762:デフォルトの名無しさん
09/10/11 21:33:49
ID3DXBuffer *compilation_errors = NULL;
HRESULT hr = D3DXCreateEffectFromFile(d3ddevice, filename, NULL, NULL, 0, NULL, &effect, &compilation_errors);
if(compilation_errors)
{
MessageBoxA(NULL, static_cast<char*>(compilation_errors->GetBufferPointer()), "", MB_OK);
compilation_errors->Release();
}



763:デフォルトの名無しさん
09/10/11 21:35:23
VC++ならOutputDebugStringAのほうがいいけどね

764:デフォルトの名無しさん
09/10/11 21:39:14
XAudioのXAPOを使っていて、xapobase.libだけがリンクが通らないんだけど、
自分のアプリと関係する全部のライブラリをDLL版のランタイムを使うように直すしかないものでしょうか?


765:デフォルトの名無しさん
09/10/13 15:29:34
>>764
VSのディレクトリ参照でDirectXのディレクトリ参照を最優先にした段階で全体をビルドしてる?
DirectInput関係だったかでPlatformSDK側と干渉することがあるよ。

766:デフォルトの名無しさん
09/10/14 22:01:52
DXUTのサンプル、CutomUIで質問があります
IMEを使いたくてこのサンプルを弄ってるのですが、
以下のようにソースを改変しました
URLリンク(www1.axfc.net)
(変更したソース、実行ファイルが入ってます)

大まかにはF8キーが押されたときに
一旦終了処理を行い、再度スクリーンモードの全画面、窓を切り替えて
立ち上げなおすという処理を加えました。
これが問題なく動作する環境もあるのですが、
一部でフルスクリーンのとき限定でIMEに全角文字を打ち込むと??と表示されてしまいます
終了の処理等に問題あったらアドバイスいただければと思います。

767:デフォルトの名無しさん
09/10/14 22:38:40
詳しく見てないが、Comic Sansのフォントって日本語じゃないから、日本語部分をそのフォントで表示したら化けるの必須じゃね





768:デフォルトの名無しさん
09/10/14 22:45:28
説明不足してました、すみません
最初にフルスクリーンで起動すると、問題なく日本語全角入力することができます。

ウィンドウモードで起動し、フルスクリーンに切り替えた場合、
フルスクリーンで起動し、再度フルスクリーンで再起動させた場合
に入力がおかしくなってしまいます。

Comic Sansのフォントはサンプルがそれを使ってたのでそのまま使っていますが
全角で入力した部分だけゴシックっぽい文字で表示されるようです。
またMS ゴシックなどに明示的に変えても症状はかわりませんでした。

769:デフォルトの名無しさん
09/10/14 23:35:00
つーかまず、改変前はちゃんと動いてるのかどうか。

770:766
09/10/15 02:07:32
改変前は問題なく動いています
ソースを見てもらうのと分りやすいのですが、
WinMainの中でDXUTを使ってる部分を終了させ、再度DXUTを初期化して立ち上げ直すという処理を行っていて
この立ち上げ直した際に、フルスクリーン限定でIMEに全角文字が入力できないという症状です。

771:デフォルトの名無しさん
09/10/15 10:20:22
>>770さんとは関係ないけど
大量のポリゴン出すとDXUTのUI系テクスチャがバグる事があるんですが、同じ人いますか?

772:デフォルトの名無しさん
09/10/15 10:31:06
>>771
本当にテクスチャがバグっているのか、
Zバッファやステンシルバッファが汚染されて正しくかけないのか、
あるいはそれ以外の原因なのかによって話が変わってくるな。

773:デフォルトの名無しさん
09/10/15 11:28:46
>>772
う~む・・確かに試した時にGOMプレイヤーだか何か起動していた気がするし
その関係かも知れません。
もう再現できないので分からない・・。
ご助言ありがとうございます。

774:デフォルトの名無しさん
09/10/16 10:15:48
今までプログラミングやってて、再現しにくいバグは全て読み込んだリソースがおかしいとかだったな

775:デフォルトの名無しさん
09/10/16 10:19:45
へぇ~、そりゃあ狭い範囲のプログラミングだな。

776:デフォルトの名無しさん
09/10/16 10:27:07
バグのでるようなコーディングしてるからでござるの巻

777:デフォルトの名無しさん
09/10/16 20:29:26
はいはい バグじゃなくて仕様です

778:デフォルトの名無しさん
09/10/17 02:58:57
なにもオブジェクトを置いてないときの
背景の色ってどこでかえんの?

青一色なんだけど・・・

779:デフォルトの名無しさん
09/10/17 04:12:07
IDirect3DDevice9::Clear

780:デフォルトの名無しさん
09/10/17 16:55:03
DirectInputを使って、XBoxコントローラの左右トリガーの値を独立して取得するにはどうすればいいですか?
XInputだと別々の値としてあるんですが、現状DirectInputだと一軸の+-としてしか取れなくて、
左右トリガーを同時に使うと相殺して0とかの値になってしまいます。

781:デフォルトの名無しさん
09/10/17 17:00:07
>>780
それはMSの嫌がらせ的仕様。
XBoxコントローラーのドライバをサードパーティー製に入れ替えれば取れないことも無い。

782:デフォルトの名無しさん
09/10/17 17:05:07
わりと有名なクソ仕様だよな。

783:781
09/10/17 17:14:45
結局配布する場合は、ドライバをインストールさせるわけにもいかないし、
XBoxコントローラを検出したら、XInput使えってことになるんですかね。

784:780
09/10/17 17:15:42
すみません。間違えました。783は781ではなく780です。

785:デフォルトの名無しさん
09/10/17 17:24:29
XInputはなぜかボタン数が10固定の制限があったりと
いろいろXBox360型のコントローラー以外認めないですよ仕様があって鬱陶しいな。

786:デフォルトの名無しさん
09/10/17 18:49:23
頂点バッファだけでD3DPOOL_DEFAULTで
インデックスバッファをD3DPOOL_MANAGED
あるいはその逆とか
複数ストリームに頂点バッファをモデルとインスタンスとに分けて
描画したりする時もモデルだけMANNGEDでインスタンスを
D3DUSAGE_DYNAMIC | D3DUSAGE_WRI-TEONLYのD3DPOOL_DEFAULT
にするのはありですか?


787:デフォルトの名無しさん
09/10/17 18:50:44
どちらの書き方がより一般的でしょうか?

//ソース1
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_MIXED_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_HARDWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
)
if (FAILED(D3D->CreateDevice(
  D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  &d3dpp, &Device))
) return false;

//ソース2
if (FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
&& FAILED(D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, HWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &Device))
){
  return false;
}

788:デフォルトの名無しさん
09/10/17 18:55:37
DirectXと関係ないです

789:デフォルトの名無しさん
09/10/17 18:59:21
>>787
少なくとも後者はどのモードで起動しているのか分からない。
デバッグを容易にするためにも前者のほうがいい。
ただ、前者もここまで行数が増えるならカッコでくくらないと視認性に欠ける。



790:デフォルトの名無しさん
09/10/17 19:00:08
見苦しいからフラグを配列にブチ込んでfor文で回せば?
4時間前からDirectXの勉強始めた人間なんでテキトー発言だけど。

791:デフォルトの名無しさん
09/10/17 19:01:27
>>787
別にC言語としちゃあ間違ってないが、オレならそもそもそういったダダ書きは嫌だな。
引数を変えたい部分だけを残して残りを固定化したラッパー関数をまず用意する。
で、順にチェックしていって失敗したらエラー処理してreturnするように書く。

void InitD3dDevice() {
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 if(MyD3DCreate(D3D, ...))
  return true;
 //全部失敗したのでエラー終了
}

792:デフォルトの名無しさん
09/10/17 19:30:49
DX11で作ろうぜ。どうせ趣味でやるなら楽なほうがいい。

793:デフォルトの名無しさん
09/10/17 19:34:45
俺ならまず処理内容と評価優先度を表すenumを作ったりする。
enum D3DDeviceConfig {
D3DDEVCNF_HAL_MIXED = 0,
D3DDEVCNF_HAL_HARDWARE,
D3DDEVCNF_HAL_SOFTWARE,
D3DDEVCNF_REF,
D3DDEVCNF_MAX, // ループカウント
};


794:786
09/10/17 19:41:12
現実逃避するな

795:デフォルトの名無しさん
09/10/17 20:39:09
で、結局DirectX11はいつ出るの?

796:デフォルトの名無しさん
09/10/17 20:48:31
>>795
もうとっくにDirectX SDKに入ってるよ。
ただベータ版と違って正式版はどうもVistaでは動かない模様。
ちゃんと確認はしてないけど。
少なくともSlimDX経由では動かなかった。

797:デフォルトの名無しさん
09/10/17 21:37:45
>>789
>>790
>>791
参考になります。
こういった記述の多い条件分岐だと、書く人によって結構変わるんですね。

ひとつわからないことがあるのですが、>>789のモードとはなんでしょうか?
視認性の事ばかり考えていて、デバッグに関しては考えていなかったのですが
「モード」というものがわかると前者の方がデバッグしやすくなるんですか?

798:デフォルトの名無しさん
09/10/17 22:06:33
間にDXTRACE_ERRとか挟んだことないの?
失敗したときに何故失敗したのか分からないと
困ると思うんだけど

799:デフォルトの名無しさん
09/10/17 22:54:57
モードはHALなのかなんなのか、つまりどの呼び出しが成功したかってことだろ

800:デフォルトの名無しさん
09/10/18 01:11:28
>>796
さぁ早くDirectX11の解説サイトを開くんだ。

801:デフォルトの名無しさん
09/10/18 01:13:46
Dx10の話題ってあんまり聞かないけど
おめーら使ってる?

802:デフォルトの名無しさん
09/10/18 01:25:08
DirectX11が出たから10は既に空気。
DirectX11で9以降に対応しているハードは動く。

803:デフォルトの名無しさん
09/10/18 02:16:45
俺はXPなんで10なんて使ったことあらへん。
つーかこのまま永遠にD3D9でいーよもう。
んで、ららびーが出たら完全ソフトレンダ化でD3D廃棄、
3D初心者総挫折っと。

804:デフォルトの名無しさん
09/10/18 02:31:18
むしろ、パイプラインがどんどん増えていってHLSLやらCompute Shaderやらで複雑化する一方の
今のDirectXの方が初心者総挫折だと思うけどな。
ソフトレンダ化でD3D廃棄なら、当然MSが代替SDKを出すだろうし。

805:デフォルトの名無しさん
09/10/18 02:51:23
というか、HLSLはきれいにまとまったchmヘルプやらはないのか!

806:デフォルトの名無しさん
09/10/18 03:12:17
DirectX3くらいのころ、Direct3DIMもRMも駄目だと息巻いて
ソフトウェア3Dレンダー作ってた奴って世界で一人くらい生き残ってないの

807:デフォルトの名無しさん
09/10/18 10:11:51
>>804
パイプラインは複雑化したけど、頂点シェーダーとピクセルシェーダーだけで描画は出来るから
別にアレもこれもやろうとしなければAPI自体はいたってシンプルになってるとおもうぞ。

>>805
August2009にグラフィックだけに特化したchm入ってたぜ。

>>806
ある程度の年代以上ならいくらでもいるだろうけど、今はみんなD3Dでシェーダー書いてるんじゃないかね。
若い奴らの方がそういうのまったく出来ないんじゃね。


808:デフォルトの名無しさん
09/10/18 10:47:44
つーか、ComputeShaderなんて必要?
GPUの仮想化が出来てるなら、
今までみたいに、何でもかんでもDX通さなきゃ駄目って
訳じゃなくなったんだろ。



809:デフォルトの名無しさん
09/10/18 10:50:19
まだビデオカードの性能に太刀打ちできる時代ならやろうとも思うが、
今となっては竹槍でB29と戦うようなものだからな。

810:デフォルトの名無しさん
09/10/18 11:56:54
ゲームの物理演算や乱立するGPGPU規格のまとめ役として必要だろ。
Win32APIにインターフェイスを用意したらDirectXとのデータの遣り取りが冗長になる。
GPGPUはCUDAやらBrookやら各社俺が俺が状態で一向に纏まらないし、
おかげでGPU物理演算が普及しないし。
Compute Shaderがあれば、BulletのGPUメーカーに依存しないGPUアクセラレーションの可能性が見えてくる。

811:デフォルトの名無しさん
09/10/18 12:31:10
あと5年ぐらいすれば淘汰されてどれ学べばいいかはっきりするんじゃね
それまではCUDAとCompute ShaderとOpenCLを平行してやるしかないだろ。
まぁBrook+は要らんとしても。

812:デフォルトの名無しさん
09/10/18 17:25:52
XFILEからのアニメーションデータの読み込みが時間がかかるんで
既に読み込んであるアニメーションデータをバイナリデータでテキストに
吐き出しておいて、実行時に読み出そうと思ってるのですが、そういうのって
可能でしょうか?

割りとこういう質問すると「独自形式やれよカス」とレスがつけられるんですが
俺の力じゃ無理だ。

813:デフォルトの名無しさん
09/10/18 17:37:46
可能だろうけどあんまり変わらないのでは?
モーションが一種類で同じ動きをするオブジェクトが複数あるって事?

814:デフォルトの名無しさん
09/10/18 17:44:58
それならバイナリデータのまま出力してそれを読み込まないと速度かわらなくね?

815:812
09/10/18 18:05:13
>>814
ああ、そっかXFILEってバイナリデータ書き出しがサポートされてましたね。
訳の分からない質問してごめんなさい。

XFILEのテキストモードでの書き出し見る限り階層構造とかロード時に内部で
動的にくみ上げてるものだと思いましたが、バイナリモードのXFILEでやりとりすれば
自分が質問したことは普通にやってくれちゃってるのかも。
(つまりDirectXで扱いやすいように展開された状態でバイナリデータ書き出しされていると)

という事はXFILEの書き出しや読み込み時にバイナリさえ指定してしまえばこれ以上早くアニメーションをロードするのは難しいって事ですかね。
うーん。

816:デフォルトの名無しさん
09/10/18 18:24:55
アニメーションデータは、全部必要なのかな?
補間される事、表示同期のコマ数と同じか?
最適化される部分が色々あると思う。

817:デフォルトの名無しさん
09/10/18 18:29:17
バイナリデータでテキストに吐き出しってなんじゃそりゃ

818:デフォルトの名無しさん
09/10/18 20:05:02
間違っても行列でサンプリングされたモーションデータなんて使うなよ。
モーションブレンドが阻害される上に、無駄にでかくなるだけだから。

819:デフォルトの名無しさん
09/10/18 20:42:50
>間違っても行列でサンプリングされたモーションデータなんて使うなよ。
>モーションブレンドが阻害される上に、無駄にでかくなるだけだから。

これってどういうこと?
大抵LightWaveから書き出してるけど、その際はファイルサイズを抑えるために行列(Matrix)で書き出してる。

行列データだから拡大や移動なんかの普段使われないデータも入ってるから
無駄って事でFAなんだろうか?

820:デフォルトの名無しさん
09/10/18 21:07:39
要素をキーフレームではき出せば、サンプリングしなくても途中は補完出来るだろ。

821:デフォルトの名無しさん
09/10/18 21:44:12
影の描画ってどうすんの?
光源からオブジェクトを貫通した光が次に命中する部分を
黒くするようにすれば良いんだろうけど
どうすればいいんだろ?

822:デフォルトの名無しさん
09/10/18 22:05:00
┌―――――┐  ┌―┐
|DirectX 影      |  |検索|
└―――――┘  └―┘

823:デフォルトの名無しさん
09/10/18 22:05:12
お前のケツを貫通させてくれたら
教えてやってもいい

824:デフォルトの名無しさん
09/10/18 22:06:48
オブジェクトのZ位置をステンシルバッファに書き込んで、
影が必要なオブジェクトをライトの方向に拡大してステンシルバッファにみに書き込み、
交差した位置のバッファを対象に、その位置を暗く塗りつぶす。

825:デフォルトの名無しさん
09/10/18 22:08:21
ただしオブジェクトは隙間がでないように、接合部分にポリゴンを追加しておく。

826:デフォルトの名無しさん
09/10/18 22:12:38
今時ステンシルは無いわ

827:デフォルトの名無しさん
09/10/18 22:13:34
>>824-825
半端な説明なら無い方がいいです

828:デフォルトの名無しさん
09/10/18 22:14:17
とりあえず氏ね

829:デフォルトの名無しさん
09/10/18 22:16:25
>>827
だれだよ
スプライト厨だろおめー

830:デフォルトの名無しさん
09/10/18 22:16:45


スレリンク(blog板:1-100番)

831:デフォルトの名無しさん
09/10/18 22:19:52
>>827
Teapotのサイト見ればいい

832:デフォルトの名無しさん
09/10/18 22:27:09
コードを貼ってもらえなきゃ実装できませんてか

833:デフォルトの名無しさん
09/10/18 22:31:04
これってあれだろ
「分からないなら書き込まないでください」
とかいって情報を引き出そうとする下等テックニック

ぐぐれカスと答えればおk

834:デフォルトの名無しさん
09/10/18 22:35:06
初心者スレ全否定ww

835:デフォルトの名無しさん
09/10/18 22:42:23
自分が何を分かってないかすら解ってない人間にものを教えるのは不可能
こういうアプローチで試して見ましたがうまくいきませんでした、なぜですか?
という質問ならいつでも歓迎

836:デフォルトの名無しさん
09/10/18 22:46:52
テクスチャ描画用の板ポリ複数枚を一つの頂点バッファとインデックスバッファでまとめて
DrawIndexedPrimitiveというのは普通だと思うのですが
その際、任意の板ポリを描画しないだとかのオンオフはどのようにしていますか?
私は動的なバッファの場合、ポジションを画面外にするか0にするかとかしか思いつかんです。
静的なバッファならどうにもならないような・・・。

837:デフォルトの名無しさん
09/10/18 22:54:07
まだ初心者の頃はオブジェクトと光源位置からベクトルだして
その方向にぶっつぶして黒くすることでやってたわ
ただ角度のある物体には出来なくて悩んだなあ

ところで二つのオブジェクトが近いとポリゴンが縞々に
なるって見えるんだがこれはなにが原因なの?
一応配置を何とかしてるけど出来るなら解決したい
どうすべきか?

838:デフォルトの名無しさん
09/10/18 22:58:49
>ところで二つのオブジェクトが近いとポリゴンが縞々に

誤差範囲内に入っているとしかたない。近くないようにデータを工夫する

839:デフォルトの名無しさん
09/10/18 23:00:09
>>835
物を教えるのは不可能と偉そうに言う前に
>>824に突っ込んでやれよ
Z位置をステンシルに書き込むって
シャドウマップとステンシルシャドウをごっちゃにしてるんですか?ってよ
お前ら本当につかえないカスだな

840:デフォルトの名無しさん
09/10/18 23:10:03
ググって勉強してきたのかえらいぞ

841:837
09/10/18 23:10:18
>>838
あーやっぱ無理か
調整で何とかすることにするわ

842:デフォルトの名無しさん
09/10/18 23:17:40
>>837
Zファイティング (Z-fighting) という現象
Zバッファの精度不足でZ値が丸められてしまい、
場所によって実際より手前になったり (Z値が切捨てられたり) 奥になったり (Z値が切上げられたり) して縞々になる
なるべく近クリップ面を遠くにして遠クリップ面を近くにすると、1個のZ値が担当する範囲が狭くなって精度が上がるので、
少しマシになるかもしれない (ならないかもしれない)

843:デフォルトの名無しさん
09/10/18 23:39:15
↓影ならGPGPUでレイトレやれと初心者に言う高飛車な回答者


844:デフォルトの名無しさん
09/10/18 23:46:56

null

845:デフォルトの名無しさん
09/10/18 23:49:12
ブラックライトでええねん

846:デフォルトの名無しさん
09/10/18 23:57:29
テクスチャに投影してプロジェクションシャドウとかでいんじゃねぇの

847:デフォルトの名無しさん
09/10/19 00:05:51
>>836
基本的に、ON/OFFは毎フレームIndexBufferを書き直すことで表現する。
そのためのIndexBufferだ。
また、描画順を入れ替えても問題ない場合なら、切り替えたいメッシュを前側なり後ろ側なり集めて
DrawIndexedPrimitiveの描画Primitive数を変更するという方法でもいい。

848:デフォルトの名無しさん
09/10/19 00:09:43
初心者だったら
シャドウマップかシャドウボリュームでぐぐって
自分で使いやすいほうを使えばいいと思うよ
どっちも一長一短だからどっちが良いとはいえないし

849:デフォルトの名無しさん
09/10/19 03:13:54
>>847
ありがとうございます。良く分かりました。

850:デフォルトの名無しさん
09/10/19 09:25:18
普通にシャドウマップしか選択肢ないだろ
他の方法はソフトシャドウが出来なかったりしてだめすぎる
シャドウマップなら指数シャドウマップとかバリアンスシャドウマップとか
あとPCFもあるし

ていうか最近のゲームでシャドウマップ以外はほとんど使われてないだろ

851:デフォルトの名無しさん
09/10/20 01:36:26
いまはGPUパワーでごり押しできるからシャドウマップが主流ではあるけど
DirectX11が主流になればシャドウボリュームが盛り変えすかも知れない
テッセレータとジオメトリシェーダで影の負荷を大分減らせそうな気がしてるんだが


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch