Managed DirectX vol.2at TECH
Managed DirectX vol.2 - 暇つぶし2ch454:デフォルトの名無しさん
07/01/11 19:04:00
C#とManaged Direct3Dを使って、動的にメッシュを生成するようなプログラムを組んでいます。
複数物体があるのですが、1物体に1メッシュを割り当てるとめちゃくちゃ遅くなるので、複数物体に1メッシュを割り当てて、
物体の描き分けは属性IDを使用して行おうと思っています。

たとえば物体Aに面が100個あり、物体Bに50個面があるような状態で、インデックスバッファのはじめ100面分が物体A、次の50面分が物体Bのインデックスデータになっているとします。

属性IDは1面に対しDWORDで32bitとのことだったので、以下のようなコードを書きました。
GraphicsStream gs = mesh.LockAttributeBuffer(LockFlags.None);
for (int i = 0; i < 100; i++)
{
gs.Write((int)0);
}
for (int i = 0; i < 50; i++) {
gs.Write((int)1);
}
mesh.UnlockAttributeBuffer();

これで動くはずなのですが、1つ目のループの中で、i=37でエラーが出てしまいます。
37*4がだいたい150なので、実はDWORDじゃなくてBYTEなのか、と思い、
gs.Write((byte)1)のようにしてみたのですが、
mesh.OptimizeInPlace実行後にAttributeTableを見てみると、0x01010101のような属性IDが書き込まれていたりして、やっぱりDWORDじゃん、ということになっています。

どうも、LockAttributeBufferで帰ってくる領域のサイズが1/4に縮小されてしまっている(??)ような気がするのですが、どうしたらうまく動くのでしょうか。

455:454
07/01/11 19:11:38
すみません,sageてしまいました。
あと、mesh.UnlockAttributeBuffer();の後にmesh.OptimizeInPlace(MeshFlags.OptimizeAttributeSort, (int[])null);をしていました。
実際、レンダリングの際に
mesh.DrawSubset(0);
とmesh.DrawSubset(1);では全部のポリゴンが表示されず、
mesh.DrawSubset(16843009);で大体のポリゴンが表示されるようになります。(0x01010101=16843009)
かといって、4バイト*面数だけ書き込もうとするとエラーになるし…謎です。

456:454
07/01/12 13:47:25
解決しました。
やっぱり、LockAttributeBufferしてGraphicsStreamに描くやり方だとなぜかAttributeBufferの領域の1/4にしか書き込めずダメなようです。
その代わり以下のようにしたら動きました。
Int32[] attrBuf = mesh.LockAttributeBufferArray(LockFlags.None);
for (int i=0;i<100;i++) {
attrBuf[i] = 0;
}
for (int i=100;i<150;i++) {
attrBuf[i] = 1;
}
mesh.UnlockAttributeBuffer(attrBuf);
どうもこの方法がよいようです。
ストリームで書き込む意味もないので、こちらでやっていこうと思います。

457:デフォルトの名無しさん
07/02/14 18:10:31
MDXで、

pD3DDev->SetRenderState(D3DRS_POINTSPRITEENABLE, TRUE);
pD3DDev->SetRenderState(D3DRS_POINTSCALEENABLE, TRUE);
pD3DDev->SetRenderState(D3DRS_POINTSIZE,
pD3DDev->SetRenderState(D3DRS_POINTSIZE_MIN,
pD3DDev->SetRenderState(D3DRS_POINTSCALE_A,
pD3DDev->SetRenderState(D3DRS_POINTSCALE_B,
pD3DDev->SetRenderState(D3DRS_POINTSCALE_C,

みたいな処理を行いたいのですが、どうすればいいでしょうか?
RenderStateManagerクラスにはプリミティブのサイズを設定するメンバが見つかりませんでした。

458:457
07/02/14 18:14:33
自分でもう少し調べてみて何となくわかりました。
TextureStateを使えばいいのかもしれません。
RenderStateしかみていなかったもので。

459:457
07/02/14 18:45:02
違ったみたいです。
やっぱり、わかりません

460:デフォルトの名無しさん
07/02/14 18:49:12
うーん
君一人しかいないよ。

461:デフォルトの名無しさん
07/04/16 22:43:58
manageddirectxで、フルスクリーンとウィンドウの切り替えをするとき、
プレゼントパラメータの再設定の際、
ウィンドウ→フルスクリーンはnewしないのに、
フルスクリーン→ウィンドウはnewするのは仕様?

ふととあるサイトを見たときに疑問に思ったもので。

462:デフォルトの名無しさん
07/06/24 09:02:00
おはようございます
2点質問お願いします

1:あるコントロールにDirectXで書きこんでるんですが、OnMouseMoveでInvalidateするとちらつきがおさまりません
  DirectXの書き込みはOnPaint()で行っています
  ちらつきを抑えるにはどうすればいいのでしょう?

protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);

・・・・・

this.Invalidate();
}

2:マルチディスプレイ環境でディスプレイ1からディスプレイ2に移動するとCPU使用率が100%にあがります
  普段は数%です
  ディスプレイ1にもどすと使用率は下がります
  何が原因でしょう?
  あがらないようにするにはどうすればいいですか?

以上お願いします


463:デフォルトの名無しさん
07/06/24 14:09:47
>>462
ちらつきは OnPaintBackground が毎回背景を消去してるから。
なんで OnPaint だけでなく OnPaintBackground もオーバーライドする。処理は何もかかない

マルチディスプレイは環境がないから知らないから他に任せる

464:デフォルトの名無しさん
07/06/24 14:43:09
462です

>>463
ありがとうございます
おかげさまで解決しました

CPU使用率が100%になるのは
ゲームループ(?)をつかってたときでした
(試行錯誤でいろいろやってたので)

ゲームループをやめると100%にはならないですけど、
ディスプレイを移動すると処理速度に違いがでるようです
ディスプレイの型もちがうのでその影響もあるのでしょうか?
実用上問題なさそうなのでこのまま放置しときますが

どうもありがとうございました

465:デフォルトの名無しさん
07/07/13 10:00:33
FontのDrawTextでSpriteを指定して文字列を書き込むと、文字が塗りつぶされて箱になっちゃいます
なぜ?どうすればいいんでしょう?

sprite.Begin(SpriteFlags.None);
sprite.Draw2D(tx, new PointF(0, 0), 0, new PointF(50, 50), Color.White);
font.DrawText(sprite, "test333てすと", new Point(0, 0), Color.Green);
sprite.End();


466:デフォルトの名無しさん
07/07/13 14:43:27
フォント使うときは SpriteFlags.AlphaBlend を指定しなければならない
ってヘルプに書いてあるだろ・・・

467:デフォルトの名無しさん
07/07/13 15:51:45
かけました(´・ω・`)ありがと

468:デフォルトの名無しさん
07/07/15 05:10:12
Joy to Keyみたいなの作ってみたいんだけど、どうやるのかサッパリわかりません・・・。
ジョイスティックの入力検知までは出来るって前提で、ご教授願えないでしょうか。

469:デフォルトの名無しさん
07/07/15 14:04:07
>>468
・タイマーか、ポーリングで処理できる
・ジョイスティックの入力を得られる
・アクティブウインドウにキー入力を送れる
どこがわからんの?

470:デフォルトの名無しさん
07/07/15 19:41:22
>>469
肝心なところが抜けてました。
すみません・・・。

>・アクティブウインドウにキー入力を送れる
ここがわからないです。

471:デフォルトの名無しさん
07/07/15 20:11:20
        ,.-─ ─-、─-、
      , イ)ィ -─ ─- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ググレカス [ gugurecus ]
   (西暦一世紀前半~没年不明)


472:デフォルトの名無しさん
07/07/15 20:12:04
つか、ManagedDirectX関係ねええええ

473:468
07/07/15 21:56:48
解決しました。

>>469,471
マリガトウ

474:デフォルトの名無しさん
07/07/28 12:45:36
SendInputみたいにしてジョイスティックの信号を送るのってどうやりゃいいの?

475:デフォルトの名無しさん
07/07/28 12:50:15
2週間かけてそれか。

476:デフォルトの名無しさん
07/07/28 13:01:54
2週間ってなんだよ…。って、上のやつか。

joy to keyじゃなくて、ジョイスティックの信号を送るんだよ。
マクロ組みたいけど出来ないんだよ。助けてくれよ。

477:名無しさん@そうだ選挙に行こう
07/07/29 00:45:16
ジョイスティック押下のAPIってあったけ?

低能な俺には、
DirectXか、WinAPIのAPIフックして、乗っ取るくらいしか思い浮かばん。

478:名無しさん@そうだ選挙に行こう
07/07/29 00:46:08
あ、あと、キーボード入力を送るんじゃダメなん?
PCのゲームで、ジョイスティックしか駄目なんてゲーム、見かけないんだけども

479:名無しさん@そうだ選挙に行こう
07/07/29 15:40:56
キーボードだとアナログ入力が出来ないからなぁ。
あと、ジョイスティックによってボタン配置がまちまちなんで
その辺を入れ替えて共有できるようになればいいかな~と
思ってたんだけど、無理っぽいかな。

APIフックは難しそうなんで、ちょっと敬遠してた…。
勉強してみるよ。ありが㌧

480:デフォルトの名無しさん
07/08/01 19:40:49
誘導されてきました。
Direct3D.deviceインスタンス作るときの引数で、
フォームインスタンス自体を引数に渡す場合と、フォームのハンドルを渡す場合の差ってなんでしょうか?



481:デフォルトの名無しさん
07/08/02 00:42:34
>>480
めんどいからReflectorで確認しただけだけど
Controlのインスタンスで渡した場合はイベントを登録して
サイズ変更時に自動でデバイスリセットするみたい。

ああそういえば、次のSDKからMDXの
サンプルとドキュメントが無くなるってでぃびっとうぇらーが言ってた。

482:デフォルトの名無しさん
07/08/02 01:13:01
SDKなんていらなくね?
ランタイムでMDXは使用できるし、VS2005に対応したサンプル少ないし、ドキュメントは独立したの落とせるし。

483:デフォルトの名無しさん
07/08/02 01:26:20
>>482
.NETに関しちゃそうかもね。どのみち公式ドキュメントとかゴミだったし。

しっかしこの頃の中の人はDirect3D10のマネージライブラリも
つくらねーよとかハッキリ言うようになりやがったなぁ。

これからの選択肢はWPFかXNA? ウンコ食わすぞド畜生が。
もうみんなTao使おうぜTao!

484:デフォルトの名無しさん
07/08/02 07:52:57
Tao Pai Pai

485:デフォルトの名無しさん
07/08/08 16:14:25
mdx のジョイスティック関連の情報ってないですかね
スティックの位置や速度は何処から何処までなんでしょう

486:デフォルトの名無しさん
07/08/09 04:41:02
答えが欲しいなら他人が読んで分かる文章を書きましょう。

487:デフォルトの名無しさん
07/08/15 18:49:42
誘導されてきました。
AudioVideoPlaybackを使用した動画再生の際、アルファチャンネルの設定は出来るでしょうか?
出来ない場合、どのクラスを使って実現するのが早いでしょうか?
使ってるのはDirectX9、使用言語はC#で、再生したいのはXDVIコーデックのaviです。


488:デフォルトの名無しさん
07/08/16 09:30:50
XNA(`皿´)ウゼー

489:デフォルトの名無しさん
07/10/16 04:56:27
C#の環境でプログラムを作ってるのですが、
Font.Drawtextで文字列を表示したところ、改行の一つ手前(つまり、行の最後の文字)
が消えるという現象が起きました。
具体的には、
flag: false
と表示されるはずが、
flag: fals
となる感じです。
おそらく改行コードが怪しいと思ったので、\n\rを\nに置換して表示したところ、
無事正常に表示されました。
しかし、\n\rはウィンドウズ標準の改行コードだったはずなので、この挙動はおかしいと思うのですが、
これはバグなのでしょうか?

490:デフォルトの名無しさん
07/10/16 06:23:06
\r\nじゃないのCR+LFって

491:489
07/10/16 07:55:32
>>490
すいません、\r\nの書き間違いでした。本文の趣旨は一応あってると思います。

492:デフォルトの名無しさん
07/10/28 20:25:35
GetCurrentKeyboardState()でカナキーの検出やると
1回押した後ずっと押しっぱなしになるんだけど
なにこれ?バグ?

493:デフォルトの名無しさん
07/10/28 20:37:49
すまん、解決した。
トグル式になってるのか・・・。

ゲームでこのキー使うのは無理っぽいなぁ、残念。

494:デフォルトの名無しさん
07/11/12 19:14:09
最近Managedを使い始めたんだが、てっきりリソースは自動で開放されると思ってたら、
いちいちDisposeかかないとダメとか、しかも自分で呼び出す必要があるとか、これならC++とかわらないじゃんorz。

495:デフォルトの名無しさん
07/11/14 09:27:39
.NETで自動開放されるリソースはメモリだけ

496:デフォルトの名無しさん
07/11/16 21:02:32
放置しとけばいつGCがデストラクタを呼んでくれるよ♪

497:デフォルトの名無しさん
08/02/23 09:42:00
managed DirectXのクライアント動作環境ってどうやったらわかるの?
クライアントのDirectXがインストールされていることを確認しても
動かない場合あるよね。
dxdiagで確認できるのはunmanagedだけなんでしょうか?

498:デフォルトの名無しさん
08/02/23 11:14:00
%windir%\Assemblyを見るとか

499:デフォルトの名無しさん
08/02/23 13:20:04
CLRがロードしようとする前にAssemblyのメソッドとかで
検索かけりゃいいんじゃねーの。

500:デフォルトの名無しさん
08/03/12 10:01:07
C#でmanaged directxとC++で普通のDirectXでは
速度にごっつい差があるんですかね?

501:デフォルトの名無しさん
08/03/12 10:14:10
どうせほとんどは描画に取られるんだからあんまり関係ない

502:デフォルトの名無しさん
08/03/12 13:15:47
最新のDirectX SDKをダウンロードしたんですけど
これはVB.NET 2003には対応してないんでしょうか?
エラーになります。

503:デフォルトの名無しさん
08/03/12 22:11:01
この度正式に非対応になりました。おめでとうございます。

504:デフォルトの名無しさん
08/03/12 22:16:35
そーすは?
WPFつかえってこと?

505:デフォルトの名無しさん
08/03/12 22:44:08
URLリンク(www.microsoft.com)

The March 2008 DirectX SDK includes support for Visual Studio 2008.
The DirectX SDK continues to maintain support for Visual Studio 2005,
but Visual Studio 2003 is no longer supported.

サポート外になったのは本当。
>>502が何のエラーか書いてくれないことには、これとの因果関係は不明だがな。

506:デフォルトの名無しさん
08/03/12 22:47:29
ねぼけてた
かんちがいした

507:デフォルトの名無しさん
08/03/30 03:21:14
vs2008は大分便利になったから、expressでも入れてみたら?
まぁ余計なアイコンも増えたけど。

.NETFramework1.1をどんどん縮小させる予定だから、1.1で動くソフトを作るvs.NETは排除したいんじゃない?

508:デフォルトの名無しさん
08/04/09 09:02:47
Direct3Dのフルスクリーンゲーム画面をキャプチャしたいんでうが
どのようなjコードでできますか?

どっかのサイトで「Deviceを作ってGetBackBuffer()でおk」っていうのを
見つけたんですが、フルスクリーンゲーム画面のDeviceを取得するとこ
からつまっています。

簡単なサンプルなどあげてもらえると助かります。

509:デフォルトの名無しさん
08/04/16 02:34:48
C#+MDX1.1で3Dプログラムを作成中なのですが、

RenderState.Lighting = false; にしているのに、
device.DrawUserPrimitives(PrimitiveType.LineList, iNumOfVert / 2, this._vertices); で描こうとするラインに色がつかず、
真っ黒に表示されます。
メッシュでもRenderState.Lighting = true; かのように表示されます。

しかしながら、プログラムを暫く起動させていると、思い出したように、意図したとおりに色がつく場合もあります。

同様の経験のある方、おられませんか?

510:デフォルトの名無しさん
08/04/16 06:27:37
>>508

URLリンク(vision.kuee.kyoto-u.ac.jp)

511:デフォルトの名無しさん
08/04/16 07:53:42
なんでStateBlock使っとらんのじゃこのサイト

512:デフォルトの名無しさん
08/04/16 11:41:34
>>510
これじゃ他のアプリケーションのキャプチャなんてできんだろ

513:デフォルトの名無しさん
08/04/16 15:22:50
SlimDXってどうよ

514:デフォルトの名無しさん
08/04/16 17:28:12
C#でDirectshowの質問て
ここでいいのでしょうか?

515:デフォルトの名無しさん
08/04/16 21:27:07
違います。

URLリンク(directshownet.sourceforge.net)

516:デフォルトの名無しさん
08/04/17 08:28:40
>>509 自己解決しました。
無駄に、大き目のメッシュを描かせると、なぜかライトが有効になりました。
DirectXのバグなのかな?

517:デフォルトの名無しさん
08/04/29 18:09:58
Microsoft.DirectX.AudioVideoPlaybackで対応しているAudioの形式は何でしょうか?
ogg再生できてびっくりしたのですが……

518:デフォルトの名無しさん
08/04/29 18:29:28
DirectShowで再生できる形式

519:デフォルトの名無しさん
08/04/29 18:35:46
つまり CODEC があれば何でも

520:デフォルトの名無しさん
08/04/29 20:28:59
>>518-519
ありがとうございます。
配布するときはコーデック入れてくれとか書いてたらいいんですね。

521:デフォルトの名無しさん
08/04/30 00:31:52
再配布可のコーデックを探してそれを入れてあげるのが親切

522:デフォルトの名無しさん
08/04/30 19:11:21
>>521
ありがとうございます。

再配布可能のコーデックがどれか分からないですね……。
適当に入れて再配布不可とかだったらまずいなあ。

523:デフォルトの名無しさん
08/05/01 15:18:49
付属ファイルにgpl.txtというのがあればOK

524:デフォルトの名無しさん
08/05/01 19:09:35
>>523
ありがとうございます。
gpl.txtが入ってるのを探してみます。

525:デフォルトの名無しさん
08/05/01 19:18:15
工エエェェ(´д`)ェェエエ工工

526:デフォルトの名無しさん
08/05/04 10:44:38
D3DのSprite.Drawメソッドを使って画像を描画しているのですが、
画像の回転はどうやってすればいいのでしょうか?

527:デフォルトの名無しさん
08/05/04 13:26:49
4点を三角関数使って計算する。
高校数学の代数幾何の知識が必要。
ちゃんと勉強しろよ。

528:デフォルトの名無しさん
08/05/04 14:27:58
>>527
ありがとうございます。
回転できました。

529:デフォルトの名無しさん
08/06/05 00:22:40
VC#2005 + Directx(MDX?)でxファイルをロードしたあと
インデックスバッファの情報を読み出そうしたのですが
さっぱりわかりませんorz

どのようにアクセスすればいいのでしょうか?

530:529
08/06/05 01:49:25
すみません、自力でなんとか読めました。



531:デフォルトの名無しさん
08/06/05 16:44:03
すいません。 殆どC#の継承の質問です。
サンプルの「ManagedInstancing - Hardware」を自分のC#のゲームでやりたいんですが。

sruct instanceData { ... }
instanceData[] idarray = new instanceData[numBoxes]; //構造体配列
class GameCharactor : instanceData { ... } //継承
List<GameCharactor> CharaList = new List<GameCharactor>(numBoxes); //最大がnumBoxes

と定義して、
CharaListにidarray[i]と紐付けした要素を入れたいと思いますが、

CharaList.Add(/* ?? ここに何と書けば良いか解りません ?? */);

・・・それ以前に根本的に、C#では他のやり方の方が良いでしょうか?
継承しないで、要素の添え字をメンバとして持たせるとか。

532:デフォルトの名無しさん
08/06/05 17:52:37
そもそも構造体は継承できない
ふらっとC#スレに行った方がいいよ

533:デフォルトの名無しさん
08/06/05 17:56:06
構造体で思い出した。

まいくろそふとさんvistaなんてくだらないOS作ってないでバグ直してよ。

xファイルの中に座標、法線、頂点カラー、UV全部あったら
プログラム内部で見るための構造体無いのに読み込むってどんだけ~

534:デフォルトの名無しさん
08/06/05 18:35:34
何がバグなんだ? 自分で構造体定義すりゃいいだけだろ。
勝手に情報欠落される方がかなわん。

535:デフォルトの名無しさん
08/06/05 18:38:07
>>534
バグだろ。
全部読み込まれたらデータの並びはわからん。


536:デフォルトの名無しさん
08/06/05 18:44:15
>>535
FVFでわーかーりーまーすー。
あぁ初心者ですかそうですか。

537:531
08/06/05 18:49:25
>532
端からトンチンカンだったようで、すいません。

 ムリにstruct型の配列に拘る説明を面倒くさがったってただけなので
そのまま、ふらっとに行こうかと思います。
継承しないんだったら質問するまでも無いかもしれませんが。


※もし、ふらっとから来て同じ書き込みを見たらこのスレではスルーしてください。

538:デフォルトの名無しさん
08/06/05 19:24:12
>>536
C#でできたっけ?

539:533
08/06/05 19:52:21
ちょっと私なりに調べてみました。

で、結論としては自分でどうこうしなくてもBaseMeshは持ってる情報をわかってるので
BaseMesh.cloneで欲しい情報だけ持ったクローンを作ってやればOKとのことでした。

でも、不親切な気もしましたね・・・

540:デフォルトの名無しさん
08/06/05 20:09:47
>>539
まぁ確かにこのへんはC++でDirect3D扱ってないと、
MDXのドキュメントだけじゃわかりにくとは思うよ。
批判するなら仕様ではなくおざなりな(そして改善される未来の無い)ドキュメント。
MDXやるならC++のドキュメントも併用した方がいいよ。

541:533
08/06/05 20:17:17
>>540
そのようですね。

私もしばらくPCの開発をやってなかったのでMDXを捨てて
XNAになってるのは驚きでした。



542:デフォルトの名無しさん
08/06/07 13:15:51
dxsdk_march2008.exeを落としてインストールしたんだけどdxutil.csとかがどこにあるかわからないーーーー

543:デフォルトの名無しさん
08/06/08 00:05:37
クククッ馬鹿めMDXのドキュメントとサンプルなぞ
とうの昔にSDKから除外されたわッ!

544:デフォルトの名無しさん
08/06/08 09:55:55
SlimDX

545:デフォルトの名無しさん
08/06/09 02:10:27
久々にこのスレ見た
始めはMDXに期待してたんすけど
結局今は VC++ でゴリゴリと頑張ってます。。。


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