トップページ⇒tech
1001コメント294KB

Direct3D

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Direct Xはあるみたいですが、こちらはD3D専門という事で。
とりあえずDX8以降は初期化が簡単になったり関数が変わったり
結構大幅に変わりましたがその辺も踏まえて語ってみましょう。

要はDirect3Dを用いて、3Dプログラムまたは3Dの表現技術を学術的に語ってください。
ちなみにDirect3Drm歓迎です。

ゲーム開発板の勢いがイマイチなのでこちらに建ててみました。
0232デフォルトの名無しさんNGNG
>>231
だからさ、230の意味解る?
そのローカルの座標系に変換するのにワールドの逆行列を使うって意味を。

つーかさ3D上の当たり判定なんて、姿勢で難度なんて変わらない。
ローカルでもワールドでも、どんな姿勢だろうが一緒。
その辺を簡単だからなんて理由で、計算増やす意味無い処理してるのが理解不能。

>「まわる足場にキャラが飛びのる」場面を処理するにはワールド座標上で処理を行うのは
>非常に困難だと思われます。
全然困難じゃないだろ。
よーく解ったよ。とんだ低レベルな奴が言ってるのが。



0233デフォルトの名無しさんNGNG
>しかし、ワールド座標上で処理をしてしまったときは足場を先に動かすかキャラを先に動かすかで
>問題が出るのではないでしょうか?

こいつさ、プログラムした事ないな。
1フレームで動く移動量で足場とキャラを変化させてから当たり判定だろ。
どっちが先とか関係無いだろ。

移動、判定、描画は全てのオブジェクトでその処理時に行なうのが常識。
なんだよ?
どちらを先に動かすって?
理解不能。
0234デフォルトの名無しさんNGNG
>>232
>そのローカルの座標系に変換するのにワールドの逆行列を使うって意味を。
それってローカル座標上に直してるじゃん。
ワールド座標上じゃないだろ。
0235デフォルトの名無しさんNGNG
>>233
>移動、判定、描画は全てのオブジェクトでその処理時に行なうのが常識。
内部の処理と描画処理はわけるだろ?
片方のオブジェクトの処理を終えたあとでも他のオブジェクトがそいつに
ぶつからないとは限らないぞ。
0236デフォルトの名無しさんNGNG
>>234
だから、そのローカルに直す無意味を解らないのかと言う意味だろ。
ワールドの逆行列をかけるって事は、ワールドでも同じコストで判定できるはずだろって意味。

>>235
これも解らないのか?
移動を全て終えてから、全ての当たり判定、それで全ての描画って意味を。
この処理で、当たり判定時にオブジェクトが動く事はありえないって意味を。
0237デフォルトの名無しさんNGNG
>>236
当たり判定後の補正はいつかけるの?
0238デフォルトの名無しさんNGNG
>>237
当たり判定後
0239デフォルトの名無しさんNGNG
>>238
処理の順番、判定の順番、補正の順番によって結果が変わることがあるよね?
0240デフォルトの名無しさんNGNG
>>239
それを考えて、プログラムするんじゃん。
結果が変わるのなら、それは処理の方法や概念じゃなくプログラム自体が駄目なんだろ。
0241デフォルトの名無しさんNGNG
>>240
>どちらを先に動かすって?
>理解不能。
理解可能?
0242デフォルトの名無しさんNGNG
なんか久しぶりにスレが進んだな。
もう1つマジネタ。
D3Dでテクスチャを設定するとき、頂点情報にテクスチャ座標を含めるから、
別々のテクスチャを貼る場合、同じ座標の頂点であっても、
別に頂点を設定しなくてはならない。
例
A――――B――――C
|    |    |
|    |    |
|    |    |
D――――E――――F

四角形ABED に、TEX1を貼る。
四角形BCEF に、TEX2を貼る。
この場合、EとBは、同じ頂点を使用できると思ったら、
テクスチャ座標が異なる場合は、別々にXYZも設けなければならない。
これが変
0243デフォルトの名無しさんNGNG
>>242
>これが変
辺じゃない!
頂点だ・・・。

・・・なんつって。
0244ぬびでぃあNGNG
そんなのにいちいち付き合ってたらスペックいくらあっても足りねーよ
0245デフォルトの名無しさんNGNG
ここってDirectXの素人じゃなくて3Dの素人が多いね。
0246デフォルトの名無しさんNGNG
>>242
ふつうに共有頂点の場合Textureを分けるのでは無く、UVを分ける。
言ってる意味解る?
一枚のTextureに、その2枚分のTexture情報をいれてUVで切り分けるんだよ。

なんの為のUV指定なのやら…
ほんとに3Dのド素人…
0247デフォルトの名無しさんNGNG
>>246
オマエガナー
0248デフォルトの名無しさんNGNG
なんか凄いのがいるな>246
0249デフォルトの名無しさんNGNG
あ、ひょっとしてネタか。オレはつられたのか!
0250デフォルトの名無しさんNGNG
>>246
0251デフォルトの名無しさんNGNG
>>246
242じゃないけどそれじゃなんの解決にもならない予感。
2Dマップチップでも配置するときなんかを考えると
解決にならない理由がわかるかも。
0252デフォルトの名無しさんNGNG
それにテクスチャ自体を巨大化させるか
画像が粗くなるのを覚悟でそのまま使うかしないといけないし
0253246NGNG
はぁ、みんなオレの言ってることの意味わかんないんだね(藁
やっぱほんとに3Dのド素人ばっかりなんだね(禿藁
0254デフォルトの名無しさんNGNG
つまり、頂点座標が同じなのにテクスチャ座標が異なるから
同じ頂点座標を2度書かなきゃいけないのが、気に入らないと?
0255デフォルトの名無しさんNGNG
それどころかオレは法線が違うだけでも頂点を2重にしなきゃならんのも気にいらない。
だけどそういうのを犠牲にしてるおかげでハードウェア的には処理が効率がいいんだろうね、
0256デフォルトの名無しさんNGNG
インデックスバッファの存在価値が…
0257デフォルトの名無しさんNGNG
>>253
いや、冗談抜きで本当にわからない。
しかも、わからない人数からいっておまいの
説明の仕方の方が悪いと考えるのがいい気がする。

ここらで人に説明するためのスキルアップも兼ねて
おにーさんに説明してごらん。
0258デフォルトの名無しさんNGNG
246の煽り厨はおいといて、246の代弁をしようと思った。
が、何を言ってるのか分からんかた。
>ふつうに共有頂点の場合Textureを分けるのでは無く、UVを分ける。
>言ってる意味解る?
>一枚のTextureに、その2枚分のTexture情報をいれてUVで切り分けるんだよ。
テクスチャが数枚の場合は、1つのテクスチャにして、
それから切りぬく形で、テクスチャ座標を設定する。
というのは、分かる。
でも、それであっても、テクスチャ座標が異なる場合は、
頂点座標まで同じのを2つ用意しなきゃならんぞ。
0259デフォルトの名無しさんNGNG
要するに、テクスチャを描画する際の、方法に原因がある。
普通は、まず頂点座標を全て求めて、
それから面情報に基づいて面を描画する。
面がテクスチャ描画の場合は、テクスチャ座標を用いて、テクスチャを描画する。
つまり、頂点情報とテクスチャ座標を一緒にした仕様が変なわけだ。
0260デフォルトの名無しさんNGNG
だけど実際には1頂点が頂点座標とテクスチャ座標保持する形式でも問題ない場面が圧倒的に多いから
ハードウェア的にはそれしか扱えないようにして単純化するほうが効率がよいと。
0261真の246NGNG
>でも、それであっても、テクスチャ座標が異なる場合は、

Textureも作れないアホばっかなの?
共有頂点でUVが一つで良い様にTexture作れば良いだろうよ。
しょうもないTextureを前提に言ってる理論は、ほんとド素人。
0262デフォルトの名無しさんNGNG
かわいそうに・…頭がおかしかったんだね
0263デフォルトの名無しさんNGNG
>>261
不可能だろ?よく考えてみてよ。
マップチップみたいにテクスチャを何回も使いまわして、
かつ、色んな組み合わせがある場合を考えてみろって。
0264真の246NGNG
>>263
普通は、その使いまわす組み合わせ通りのTextureを用意する。
同じ部分だからって1パターンのみの画像内容しか用意しないのはTextureMappingを理解してない証拠。
ほんと、プログラマらいし根性で。
やっぱ3Dのド素人だな。
0265デフォルトの名無しさんNGNG
お!やっと246の言ってることが分かった。
例えば、土管を作る場合、テクスチャは横一列に並んだものでできるから、
これだとテクスチャ座標を含めた頂点が、共用できる。
でも、サイコロの場合はどうすんだ?
0266真の246NGNG
>>265
環境Mappingでも調べろ。
0267デフォルトの名無しさんNGNG
環境マップって、サンプルがきゅうすのものでしょ。あれは球体だけど。
キューブ環境マップでサイコロはできそうだ。(やったことない)
サイコロは簡単すぎた。
サイコロじゃなくって、ガンダムのコアファイター。(頂点数をできるだけ減らしたもので)
コアファイターだとテクスチャ貼る必要が無いかもしれないが、
ティティールを表現するとして、全てにテクスチャを貼る。
これだと環境マップじゃ、どーやってもできないよな。
0268デフォルトの名無しさんNGNG
263の言ってることも分かった。
ドラクエみたいなマップを、テクスチャで描画しようってことだ。
そんで、246は、
>普通は、その使いまわす組み合わせ通りのTextureを用意する。
・・・。やはり馬鹿だったのか?
0269デフォルトの名無しさんNGNG
246が実際にその方法でテクスチャを張ってたのなら究極のバカだが
おそらくどこかの「テクスチャの張り方」とか読んで理解したつもりになった厨だろう。
0270デフォルトの名無しさんNGNG
リソースのムダ使いもいいところだ
0271真の246NGNG
ふう、バカ相手に沢山釣れたな(藁
3Dどころか2chド素人だなww
0272デフォルトの名無しさんNGNG
>>271
      ∧∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′ ̄ ̄(,,゚Д゚)< おまいマジで間違えてただろ?
 UU ̄ ̄ U U  \_____________
0273デフォルトの名無しさんNGNG
一つのテクスチャに複数のイメージを格納し、それをUVで切り分け、
しかも頂点座標の余計な重複を防ぐという条件なら、
UV座標をトランスフォームさせて使い回せば出来るけど、
その程度説明できない>>246は確かに素人ですね
0274デフォルトの名無しさんNGNG
>273
UV座標をトランスフォーム?そんなの聞いたことないぞ。
それであても、DrawPrimitivに渡すときは、頂点座標が重複するだろ。
0275デフォルトの名無しさんNGNG
なんか面白そうな匂いにつられてきました。
>>246の言ってる意味はわかるし、普通のやりかた。
でも説明が下手で誤解されてるのかな。
ちなみに、漏れはゲーム屋、プロです。
0276デフォルトの名無しさんNGNG
プロだってさ。pu....
0277デフォルトの名無しさんNGNG
>>275
説明して
0278デフォルトの名無しさんNGNG
>>274
ヘルプに「テクスチャ座標トランスフォーム」というのがあるから見てみなさい
0279デフォルトの名無しさんNGNG
プロキタ━━━━(゚∀゚)━━━━ッ!!!!!
0280デフォルトの名無しさんNGNG
>>274はもう少しヘルプを嫁
0281デフォルトの名無しさんNGNG
>>277
α値をβしてDMA伝送したら
VU0をHALTして/dev/hdaをMOVQするんだ
そうすると、MM0がFPUをEMMSするから
伝送遅れを防ぐためにCNOPを挟み込んでWTOマクロを発行する
すると、さっきβした領域がEXTENT 16でABEND S=B37するから
その前にJSDSCPYを実行してFMACパイプラインを即時に閉塞
閉塞したVF01をREG0〜32まで一気にSTALLしてやれば良いわけだ。

わかったかな?
0282デフォルトの名無しさんNGNG
>>281
全く関係無い言葉を並べております。
0283デフォルトの名無しさんNGNG
>>273
嘘つくな馬鹿。
0284デフォルトの名無しさんNGNG
281は遊んでるだけ。あまりにもヘタだが。
>>277
テクスチャサーフェースをジオメトリでラスタライズするには、
テクスチャ座標を用いるが、これを自動生成させることができて、
これを環境マップとも言って、自動生成の場合に何を用いてテクスチャ座標を生成するかについては、
光の反射方向(反射ベクトル)を用いる方法があり、
これは、人間の感覚的に言うとテクスチャサーフェースを紙に例えてプリミテイィブを覆うようなイメージで、
この場合、複雑なプリミティブであってもやはり汚い貼り方でしかなく、
説明も分からない。
0285デフォルトの名無しさんNGNG
>>274=>>283
恥の上塗りみっともない
0286デフォルトの名無しさんNGNG
ところで、テクスチャ座標をトランスフォームしたら、どんな効果ができるんだ?
あ、水の流れる様子が表現できるか。あとは、灯篭。
炎のゆらめきもできそうだけど、なんにしても、
そんなことは暇なプロだけがやることだろう
0287デフォルトの名無しさんNGNG
どうでもいいけど、
1つの位置座標に複数のUV座標が存在してしまうことの回避は
場合によっては不可能っつーことだけは確か。
0288デフォルトの名無しさんNGNG
>>275
プロのゲーム屋(=ゲームショップの販売員)ですか?(藁
0289デフォルトの名無しさんNGNG
>>281

>CNOP
>WTOマクロ
>ABEND S=B37
>JSDSCPY

それを知っている貴様はいったい何者ですか?
0290デフォルトの名無しさんNGNG
Direct3Dをやる場合はアセンブラの知識があったほうがいいのでしょうか?
友人に「DirectXをやるならアセンブラを知らないと遅くて話にならないよ」と言われたもので・・・
0291デフォルトの名無しさんNGNG
>>290
そういう奴は具体的にどの部分に使うのか突っ込むとすぐにボロを出す
上手く玩具にして遊べ
0292デフォルトの名無しさんNGNG
>DirectXをやるならアセンブラ

DirectPlay でもアセンブラ?
なかなかやるな。
0293デフォルトの名無しさんNGNG
友人のPCは初代Pentium200MHzかもしれんな
0294290NGNG
>>291
友人は結構プログラムに詳しいのですが
やはりハッタリなのでしょうか、試しに聞いてみたいと思います

>>292
DirectPlayですか・・
ネットワークはちょっと分からないです

>>293
バイト代をゲームと自作PCにつぎ込んでるような奴なので結構ハイスペックです
先日Pentium4の3GHzになったとか豪語してましたw
自分の方はAthlonの1GHzですが・・
0295デフォルトの名無しさんNGNG
遅くて話にならないじゃなくて
綺麗な表現ができないっていうだけだろう
0296デフォルトの名無しさんNGNG
バーテックスシェーダーとかピクセルシェーダーのことじゃね?
0297デフォルトの名無しさんNGNG
それもこれからは、HLSLでしょ。
0298デフォルトの名無しさんNGNG
>>294
とりあえず普通にC++あたりで作って動かしてみてから考えた方がよろしいかと
0299デフォルトの名無しさんNGNG
きっとDirectDrawでサーフェイスをシステムに確保して
自前処理で回転拡大縮小半透明やってるんだよw
0300デフォルトの名無しさんNGNG
知識が5年前で停止してる奴ならそれかもね
0301デフォルトの名無しさんNGNG
脳内友人とか、二重人格ってやつかも。
0302デフォルトの名無しさんNGNG
>>299
ありえるな、かたくなに3Dを拒否するやつっているからね
0303デフォルトの名無しさんNGNG
>>294
Athlon の 1G なら、非常にクリティカルななにかの処理するところにアセンブラ使うと効果あるかもね。
でもそんなの Direct3D 使って何かやるときにはあまりお目にかからないし、初級者ならそんなことより
他にやりたいこと・やるべきことがイパーイあるから気にスンナ。アセンブラ覚える時間があったらバイト
でもして良いビデオカード買ったほうがいい。

Pentium4 だとパーシャルレジスタストールのペナルティがすごく大きいから、普通に Intel Compiler
なんかで最適化したコード以上に早いコードをアセンブラで書ける場面は少ないんだよ。まあこれは
漏れの腕が悪いからかも知れないけど。。。
0304デフォルトの名無しさんNGNG
アセンブラが重宝するのは条件分岐が多発するような演算で、
テクニックを駆使して条件分岐を排除し演算のみでロジックを構成するような場合
これはさすがにコンパイラはやってくれないが、2Dの時代が終わった今、活用する場面はほぼ皆無
0305デフォルトの名無しさんNGNG
>>304
サウンドプログラミング


てまぁゲームには関係ないな…
0306デフォルトの名無しさんNGNG
>アセンブラ覚える時間があったらバイト
>でもして良いビデオカード買ったほうがいい。

それは無い。
0307デフォルトの名無しさんNGNG
>304
条件分岐といえば、C言語の switch case って、
if(){...}else if(){}...else if(){...}
と同じようにアセンブラでコード化されると聞いたことあるが、これってホント?
0308デフォルトの名無しさんNGNG
>>307
うそ!
0309デフォルトの名無しさんNGNG
場合によりけり
default:が無い時は
ジャンプテーブル化されることもあるってきいたことある

オレがVC++6.0でやったときはリストしてみたけど全部条件分岐にされててへこんだ…
0310デフォルトの名無しさんNGNG
それなりのビデオカードがないと新しい技術を追いかけなくなるのは確か
0311デフォルトの名無しさんNGNG
>309
マジかよ、、、。

ジャンプテーブルってcase ???: が、連番ならいいけど、ばらけてたらどうすんだろ。
0312デフォルトの名無しさんNGNG
VCの場合はコンパイルオプションが速度優先なら
255以内でジャンプテーブルを生成する
0313デフォルトの名無しさんNGNG
>>310
葉外道
糞なビデオカードを使ってる奴に限って変なビデオカードの対応ばかり
気にしてる奴が多い。
「そんなのおまいの作ったゲームが気にするほど普及してからでも遅くないぞ。」
といってやりたいがなかなかいいにくい。
0314290NGNG
290です。
なんかアセンブラアセンブラ絶叫してるだけであまり説得力のある回答をもらえませんでした。
頂点シェーダーやピクセルシェーダーをいじってみたいので(おもしろそう)
その話もしたんですが、メチャメチャに否定されました。
「シェーダーを使うよりロックしてアセンブラで操作した方が高速で・・・(ry」
なんかよく分からない事を並べられましたが
シェーダーが面白そうなので否定された事はスルーして密かにがんばってみます。
0315デフォルトの名無しさんNGNG
>>314
> 「シェーダーを使うよりロックしてアセンブラで操作した方が高速で・・・(ry」

こいつ、見捨てていいよ。
0316デフォルトの名無しさんNGNG
>>314
今後、その人にはプログラムの話題は振らないことをおすすめする
0317デフォルトの名無しさんNGNG
もっとこね回してボロ雑巾になるまで遊び倒せ
0318デフォルトの名無しさんNGNG
>312
Watcomの場合は?
0319デフォルトの名無しさんNGNG
知らん
自分で試してくれ
0320デフォルトの名無しさんNGNG
ノートPCなど動作環境を広く取って、2D画面でのエフェクトが主体な
エロゲ業界では、今でもビットマップをアセンブラでゴリゴリしているけど、
シェーダ使うより、ロックしてアセンブラのほうが速いなんて言い出すのは、
昔に固執して、いまの技術を追っていない証拠。無視無視。
0321デフォルトの名無しさんNGNG
そもそもシェーダーの意味がわかってない可能性が…
0322290NGNG
友人なんで見捨てるって事は出来ないですがw
彼のプログラムウンチク関係は少し距離を置きつつ聞き流したいと思います

こんな事してる場合じゃない!VisualC++を起動せねば!
スレ汚しすいませんでした
0323デフォルトの名無しさんNGNG
>「シェーダーを使うよりロックしてアセンブラで操作した方が高速で・・・(ry」
さすがにこれはネタだろうと

おまいは遊ばれてるんじゃね?
0324デフォルトの名無しさんNGNG
ネタで言ってるのを>>290が真に受けちゃったんじゃなかろうかと邪推してみる。
0325デフォルトの名無しさんNGNG
さらに邪推するとその「友人」は存在しなくて2ちゃんねるで聞きかじった事を質問してしまったのかも
0326デフォルトの名無しさんNGNG
http://www20.cds.ne.jp/~murasame/source/gundemonium.htm
きっとこれ系のゲームの作者だ
0327デフォルトの名無しさんNGNG
>>326
あーもったいねぇなぁ。
ちょっと3Dに興味もってくれるだけでいいんだけどなぁ。
0328デフォルトの名無しさんNGNG
>>326みたいな人達は一応同人で小遣い(生活費も?)稼いでるから
3Dが人気無いって事を身を持って理解してるのでは。
0329デフォルトの名無しさんNGNG
いや、そういうことじゃなくて
半透明をソフトウェアで行ってるから遅い、というだけ
これからの時代は2Dポリゴンつかえってことだよ

つーかここまでの流れがそうなってるだろ・・・


まぁそこの開発日記でDirect3Dによる2Dポリゴンに移行みたいなこと書いてあったらしいから
移行するんだろうね
0330デフォルトの名無しさんNGNG
問題はへたれビデオカード使っている奴ほど、人一倍文句の声が大きいと言うことだ
サポートが大変
0331デフォルトの名無しさんNGNG
>>330
問題の起こる可能性が高いんだから当然じゃん
■ このスレッドは過去ログ倉庫に格納されています