[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/06 18:57 / Filesize : 237 KB / Number-of Response : 929
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2007/09/08(土) 22:21:46 ]
※回答する人も、質問する人も必ず読んでください

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

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

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part13 【C】
pc11.2ch.net/test/read.cgi/tech/1182351826/

702 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 00:56:32 ]
またそれかよ
買い物とか駐車場とかネギとかもうやめてくれよ

703 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 08:15:14 ]
SDK付属のDirectXViewerで、DX10にしてXファイルを開いたら、むちゃくちゃ遅くなった。
DX9で60以上出てたのが、10以下になった感じ。
グラボはgeforce7xxxだし、DX10に対応してるはずなんだけど、なんで?

704 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 08:38:10 ]
>>703
どーでもいいがGeForce7シリーズは普通、DX10対応とは言わない。
ShaderModelも3.0止まりだし。

お前さんの速度低下の原因が何なのかは別として。

705 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 08:41:22 ]
いつGeForce7が10対応になったんだよ

706 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 13:01:34 ]
なんかうっかりさんが多いな

707 名前:703 mailto:sage [2007/10/26(金) 17:34:23 ]
すいません、てっきりフルサポートしてるもんだと思ってました。

708 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 20:01:17 ]
DirectX10でポリゴンを画面の座標で表示する方法がわかりません。
チュートリアルのコードは、画面の中心が(0, 0)となっているのですが、単位や基準の位置を設定することはできるのでしょうか?
やりたいことは、自前でスプライトを実装することです。
教えてください。

709 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 20:29:24 ]
頂点シェーダで座標変換?

710 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:52:43 ]
>>708
君があまりに知識が無さ過ぎるので、どこからどこまで解説したものか途方に暮れ
誰も君の期待に答えることができない。
本屋行って何か本でも買って読んでみれば?



711 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:01:05 ]
DX9までなら扱える。DX10構造がだいぶかわってわからないのさ。
DX9なら、初期化を完了した素の状態からVertexで直に画面の座標で指定できたよね。
それがDX10だと同じようにコーディングできないから、どうしたらいいかわからない。
あんまりDX10やってる人いない?

712 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:54:46 ]
DX10とかどうこういう問題じゃなくてシェーダと座標系の問題なんじゃないの

713 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 02:05:18 ]
DX9とDX10の問題じゃないだろ。

714 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 02:13:02 ]
Vertex Bufferに(0,0,0) (0,100,0) (100,0,0) なかんじで設定して描画できる?
可能なら必要な処理を教えて。

715 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 02:13:38 ]
↑のは座標は画面のピクセル単位ね。

716 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 10:13:55 ]
CDXUTDialog::OnRender10でも見てくれ。
そこに答えがある。

717 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:39:18 ]
見た。DX10は画面の座標でVertexを直接指定できないでおk?
わからないのですが、これはシェーダーの仕様制限なのかな?

718 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:02:14 ]
>>717
元々頂点シェーダ使用時はそういうもんだった気がする。
頂点シェーダ強制になった副作用と思えばいいんじゃね?

719 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:58:58 ]
ジオメトリシェーダ

720 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 06:19:37 ]
>>711
おまえDX9扱えるなんて言ってんじゃねーよ



721 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 07:01:15 ]
ごめん。もうDX10まで扱えるようになった。

722 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 08:09:17 ]
扱えるってのはポリゴン一枚出すサンプルが作れれば言える


723 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:44:22 ]
シェーダーのPOSITIONセマンテックが何をさしてるのかわかりません

vertex fragmentでのPOSITIONの意味教えください

724 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 15:34:48 ]
正直セマンテック

725 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 15:53:42 ]
意味だというのはわかるのですが
vertexが(0,0,0) (-10,0,0) (10,0,0)
とあったときにそれをvertexシェーダに送ると

pos : POSITION
としたときのposは具体的にどんな値が入っているのか。

そしてfragmentシェーダに
OUT.HPosition = mul( float4(IN.Pos.xyz , 1.0) , matWVP);
たとえばこうして送ったときには、fragmentシェーダで扱っているHPositionは
スクリーン上のどの値なのか

どうもイメージできてなくて

726 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:15:00 ]
どうせ2Dシューティング作るんだろ
matWVPに単位行列入れればいいのに


727 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:00:40 ]
2Dシューティングだったら、楽しんで作るんですが。

どなたか725の回答お願いします

728 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:20:22 ]
うん、良かったね。

729 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:37:45 ]
>>725
CPU→VertexShader→FragmentShaderという流れでは

・VertexShaderのPosition値は基本的にCPUで設定した頂点バッファの頂点そのままの値です
・VertexShaderからFragmentShaderに送るPosition値は射影空間の値を入れます。
 具体的には(-1,-1,0)-(1,1,1)です
・スクリーンへは射影空間(-1,-1)-(1,1)が引き伸ばされて
 (0,0)-(ViewportSize.X,ViewportSize.Y)に表示されると思ってください

以上を踏まえて

>pos : POSITION
>としたときのposは具体的にどんな値が入っているのか。
そのまま(0,0,0) (-10,0,0) (10,0,0)が入ってきます

>そしてfragmentシェーダに
>OUT.HPosition = mul( float4(IN.Pos.xyz , 1.0) , matWVP);
>たとえばこうして送ったときには、fragmentシェーダで扱っているHPositionは
>スクリーン上のどの値なのか
頂点がカメラのフラスタムの中に入っていれば、
射影空間(-1,-1,0)-(1,1,1)の中に頂点が変換されます
その先のスクリーン座標への変換はDirectXが勝手にやります

射影空間とはなんぞやって話なら
SDKの「射影変換とは」って項目でも読んでください

730 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:55:28 ]
>>729
遅くなりましたがありがとうございます
ようやくイメージできました



731 名前:デフォルトの名無しさん mailto:age [2007/11/01(木) 06:12:57 ]
HLSLでピクセルシェーダを書き始めたのですが、
BeginPass()〜EndPass()の間でマテリアルごとにDrawSubsetを実行する流れになると思うんですけど、
特定のマテリアルではピクセルシェーダを変えたいというとき、

・特定マテリアルのときフラグ定数を転送してやってピクセルシェーダ内で分岐して処理を変える
・Pass0で特定マテリアル以外を描いて、Pass1で特定マテリアルだけを描く

どっちがベターでしょうか?
もしくは他に「こうやるもんだ」ってのがあれば教えていただきたいです。

732 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 08:40:16 ]
厳密にはケースバイケースに計測しないと分からないので
一般には「楽なほう」が選ばれるんじゃね

733 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:41:49 ]
発想を逆にして、マテリアルごとにBeginPass()〜EndPass()というのも。

734 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:01:47 ]
>>731
マテリアルとシェーダって一対一になると考えるのが普通じゃね?
つまりシェーダが違うんであれば、それはマテリアルが違う。
データの段階でどういうマテリアルにするかを指定しておくべきじゃないかね

735 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:53:10 ]
technique T
{
pass P0{ ... }
pass P1{ ... }
pass P2{ ... }
}


ApplyEffect( func )
{
SetTechnique( "T" );
Begin()
BeginPass( func );
Draw();
EndPass();
End();
}

これはよくやる、っていうかこれしかやらない。
passをループでぐるぐる回すってのは、
むしろあんまり使いどころがない気がする。


736 名前:731 mailto:sage [2007/11/02(金) 02:56:59 ]
>>732-735
レスサンクス!参考になりました。
とりあえず自分が組みやすい奴でやってみることにします。

737 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 18:51:21 ]
DirectX10で、MultiSamplingのバックバッファから2Dテクスチャにコピーする方法がわかりません。
つまりバックバッファからイメージを取得したいのですが。
アドバイスをください。

738 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 21:37:09 ]
>>737
レンダリングターゲットを変えろ。

739 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 02:40:06 ]
条件を全否定するのではなく、目的の方法を求みます。

740 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 02:53:28 ]
>求みます。

求みる?



741 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:04:51 ]
揚げ足とるなカス

742 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:06:30 ]
俺も知りたい

743 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:07:35 ]
俺も俺も!

744 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:09:45 ]
あちきも!

745 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 03:11:40 ]
求みます、ってのは日本語を学ぶ中国人がよく犯す間違い

746 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 04:45:04 ]
謝罪しる思い出した

747 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:21:38 ]
事故レス
ID3D10Device::ResolveSubresource を使用することで目的が達成できました。

748 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:42:30 ]
>>746
反省しるだろ

749 名前:デフォルトの名無しさん [2007/11/03(土) 19:28:39 ]
www.watch.impress.co.jp/game/docs/20070927/wv.htm

この問題がよくわかんないんですけど
間違ったサンプルコードをコピペしていたのが原因らしいけど、
その詳細が知りたいです


750 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:34:13 ]
>>749
スライドに載ってるソース見てMSDNライブラリで調べればいいだろ。



751 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:35:54 ]
詳細ってこれなんじゃないの?

www.watch.impress.co.jp/game/docs/20070927/wv06.htm

752 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:37:50 ]
>>749
お前なんも記事を読んでないな?
本文に書いてあるだろ、スライドのSS見ろ。

753 名前:749 [2007/11/03(土) 19:54:12 ]
えーと、IMEの描画をさせないために
WM_IME_SETCONTEXTが来た時にlParamからISC_SHOWUIALLフラグを取り除くのが正解だけど、
サンプルは自動変数に0を入れてるから意味ナス

って理解でいいですかね

754 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:58:51 ]
>>753
肝心なところが足りない。
lParamからISC_SHOWUIALLのビットを下げてDefWindowProcに渡す、で正解。

755 名前:749 mailto:sage [2007/11/03(土) 20:00:43 ]
そういえば解決策をかいてなかった
>>754
了解です。理解しました

756 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:46:36 ]
海外デベロッパはIMEの動作しない環境で作ってテストしない&修正しないもんだから、Vistaでもう致命的におかしくなった話。
Vistaなプログラミングしていれば周知の事実だぜ。

757 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:46:05 ]
海外全部じゃなくて、欧米だな

758 名前:デフォルトの名無しさん [2007/11/05(月) 13:34:46 ]
欧米か・・・

759 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:15:11 ]
米だけじゃね

760 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:07:11 ]
漢字圏以外だと思うが



761 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:51:12 ]
欧とか印のデベロッパの傾向とかはっきり言って知らない

762 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 07:55:30 ]
インド製の有名なゲームの体験版とかあったら教えてくれ。それで判断する

763 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:10:28 ]
英語のヘルプはほとんどインド製。
ゲームじゃないが。

764 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:08:50 ]
インドの標準語は英語

765 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 16:56:17 ]
違いますよ

766 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 21:43:13 ]
インド人の微妙に高いカーストのイケメンのアニオタプログラマガ
半裸で作ったゲームないの


767 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:14:09 ]
カーストなんて言葉聞いたの小学校の社会の時間以来だ。

768 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:41:13 ]
DirectX10で書いた場合、vista専用になってしまいますか?

769 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 14:50:57 ]
DirectX10専用

770 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 04:48:53 ]
インドのゲームってやっぱり敵と踊ったりするの



771 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 10:49:42 ]
DirectXを初めて学ぶのにお薦めの本を教えてください

772 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:58:38 ]
猫でもわかるDirectX 〜 3Dグラフィックス基礎編(1)
www.amazon.co.jp/dp/0689842120

773 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:12:06 ]
本読んだことないけど、使えている俺が居る。

774 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:25:18 ]
勘と試行錯誤って大事だよ

775 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:32:19 ]
>>772
リンク先間違ってない?

776 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:35:15 ]
ネタだろ

777 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:16:44 ]
DirectX & C++ & Windowsでシェーダプログラムを組んでいます。
処理が複雑になりすぎて、レジスタ数が足りないというエラーを返される
ようになってしまいました。
この場合1パスで行っていた描画を2パスにすれば解決するのでしょうか?
また、その場合どのようにシェーダの記述を行えばよいのでしょうか?

778 名前:777 mailto:sage [2007/11/09(金) 22:06:21 ]
やっぱり分からないので再度書き込みをさせて頂きます。
1パス目で行った描画ピクセルに2パス目で色相変換の処理を組み込みたいのです
しかしながら1パス目の描画結果を取得する方法が分かりません。

下のように2パス目のピクセルシェーダを記述しています。
PS_OUTPUT PS_HueShader( PS_OUTPUT In ){//TESTとして1パス目の記述結果をそのまま出力する
return In;
}

このように記述すれば引数Inには1パス目のピクセルシェーダ描画結果が入っていると
思ってたのですが実際には1パス目の頂点シェーダのDiffuseの値が入ってます。
どのようにしたら1パス目ピクセルシェーダ終了時のピクセルの値を操作できる
のでしょうか?

779 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:20:03 ]
1パス目でレンダーターゲットにしたテクスチャに描画して
2パス目でそいつをピクセルシェーダの入力にする
ってのが基本

780 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:34:03 ]
ていうかレジスタが足りないなんてエラー初めて聞いた。
プログラムコードがでかすぎるってのならともかく…



781 名前:777 mailto:sage [2007/11/10(土) 01:42:28 ]
>779
分かりやすい解説ありがとうございます。
2パスだと描画用のテクスチャを別に用意する必要があるので、処理が重そうですね。
今回は色相変換を諦めようと思います。アドバイスありがとうございました。

>>780
色相彩度変換はレジスタ数を大量に必要とするのでシェーダのバージョンが
低いとすぐにレジスタが足りないというエラーが起きてしまいます…

782 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:43:46 ]
色相彩度変換て具体的にどういうのか知らないんだけど、そんなに消費するのか。
セピア変換とかなら単に行列かけるだけだと思ってたけど
話にならないくらい複雑なことするのかな

783 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 02:18:16 ]
RGB情報を一度HSV(色相・彩度・明度)の情報に変換して、各値を
操作してRGB値に戻す…というやり方でやってますんで、処理としては
結構複雑です・・・。検索するとシェーダサンプルが見つかると思います。

784 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:18:39 ]
HSVとRGBの変換が大変そうだね…
てか、ソース見て俺も1回やったこと思い出した。CPUでだけど。

785 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:32:46 ]
別にマルチパスレンダは重くないと思うぞ。
重くなる要素が見当たらないし。
VRAMがオーバーフローするなら別だが。


786 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:09:51 ]
シェーダでHSV変換なんてただのエフェクトサンプル以外の使い道あるの?
実用しないなら遅くていいじゃん。

787 名前:デフォルトの名無しさん [2007/11/10(土) 17:01:29 ]
シェーダをある程度理解されている方に質問です。

頂点シェーダに1回に送られてくる頂点情報は、基本的に1つですよね。
私は頂点同士の計算がしたいのですが、その為には複数の頂点が必要になります。

(例)
vertex1 と vertex2 でなんらかの計算
vertex1 と vertex3 でなんらかの計算

というように、送られてきた頂点と、他の頂点を使って計算をしたいのです。

こういうことはシェーダでは可能なのでしょうか?
ちなみにHLSLを使っています。

どうぞ宜しくお願いします。

788 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:30:57 ]
シェーダが走る前の特定の頂点情報が必要なら、レンダリング前に定数レジスタに
値を入れてからシェーダを走らせる。

あとは、頂点フォーマットを拡張して、レンダリングを開始する前に、
必要な他の頂点の情報を自分の頂点情報に入れておけば、シェーダで利用できる。

DirectX9までは、基本的にシェーダが走ってる最中の別の頂点の情報が必要な場合、
取得は不可能なはず。(上のような、小細工が必要)

DirectX10のシェーダは、その辺が可能って聞いてるけど、詳しい人ヨロシク。

789 名前:デフォルトの名無しさん [2007/11/10(土) 17:49:52 ]
>>788
ご回答していただきありがとうございます。

もう少し具体的に教えてもらいたいのですが、

・レンダリング前に定数レジスタに値をいれる
・必要な他の頂点の情報を自分の頂点情報に入れておく

とは具体的にどうすれば良いでしょうか。

いろいろ本やサイトで調べたのですが、
これに関して掲載されていなかったので投稿させていただきました。
初心者で申し訳ありません。

790 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:53:02 ]
>>787
DirectX10のジオメトリシェーダなら
入ってきた三角形に対して新しい頂点を生成したりすることができるよ

でも、やる内容によるんじゃないかなぁ
DirectX9世代ではピクセルシェーダで頑張ってやってた処理が多い



791 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:54:41 ]
>>789
>・レンダリング前に定数レジスタに値をいれる
こっちは多分、君の言う目的を達成できない方法だよ
プリミティブを描画している間、どの頂点にも同じ情報を送ることができる
まぁ、普通のレジスタの使い方

>・必要な他の頂点の情報を自分の頂点情報に入れておく
これは頂点に他の頂点のコピーを複製していれておく方法。
例えば
struct VERTEX
{

792 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:57:05 ]
SHIFT+Enterで書き込んでしまった
struct VERTEX
{
float4 Position : POSITION;
float4 Texcoord : TEXCOORD;
};
って頂点だったら
struct VERTEX
{
float4 Position0 : POSITION0;
float4 Texcoord0 : TEXCOORD0;
float4 Position1 : POSITION1;
float4 Texcoord1 : TEXCOORD1;
float4 Position2 : POSITION2;
float4 Texcoord2 : TEXCOORD2;
};
みたいにしておいて、他の頂点に触れるようにしておく。
かなり強引な方法(単純に考えてデータ量3倍)

793 名前:787 [2007/11/10(土) 18:01:40 ]
皆様、早速のご回答ありがとうございます。

ある本を読んでみると、頂点情報をテクスチャに保存して
それをピクセルシェーダで使用すると書いてあるのですが、
具体的にどうすればいいのか分かりません。

複数の頂点情報をテクスチャに保存することってできるのでしょうか?

794 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 18:08:06 ]
>>793
そりゃ例えばARGB32Fのフォーマットなら、
1ピクセルにfloat4の情報を書き込めるってだけだよ

そもそも具体的に何をしたいのかが分からないから何とも言えない…

795 名前:787 [2007/11/10(土) 18:18:37 ]
私が具体的に行いことを述べます。

例えば、頂点数が「5」のオブジェクトがあります。
1つの頂点に対して、他の全ての頂点と計算がしたいので

v1-v2 v1-v3 v1-v4 v1-v5
v2-----------同じ------------
v3-----------同じ------------
v4-----------同じ------------ 
v5-----------同じ------------

※ -← は計算するということ

と計算がしたいので、4×5 = 20回分計算が必要になるわけです。
こういう処理をGPU上で計算したいと思っています。
何か良い方法がありますでしょうか。

796 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 18:20:26 ]
シェーダーで計算したいってことなのかな・・・

797 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 18:27:57 ]
>>795
いや、それって方法論でしょ?
何を表現したいかってことだよ
それによってはそもそもその手法が正しいのか、って話になるから

まあ、よほど重い処理でない限り、頂点シェーダで強引に計算してしまえばいい
大抵はピクセル処理でボトルネックになってしまうので、どうでもいいんで

798 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 20:08:54 ]
>>795
だから、>>788で書いたとおり、DirectX9では無理。DirectX10のジオメトリシェーダでは可能。

無理だから、事前に「自分で」必要な頂点の情報を、対応する頂点に「仕込む」等の処理が必要になる。
ある頂点で参照可能な別頂点の数は、入力となるvレジスタの数で決まるから、「あるプリミティブ全体を
対象とする任意の頂点を相互参照」するなんてDirectXでは完全に無理。

このヒントを聞いて、「頂点に他の頂点を仕込む方法が具体的にわからない」なら、
シェーダの理解が足りて無いってことだから、

ttp://marupeke296.com/DXPS_No3_BasicOfVertexShaderProgram.html

この辺の一番上の図を見て、頂点シェーダの演算部が参照可能なデータについて、もう一度整理する事を
お勧めする。

>>797もいってる通り、実現方法を変更する方が現実的なんじゃないかな?

799 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:17:22 ]
便乗して質問
>>792のようにPosition0〜2まで3つ設定すると
そこに何入ってるの?


たとえば {1 1 0} {0 0 0} {-1 1 0} の三角形があったらどうなるの?

800 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:28:57 ]
何が入ってるかじゃなくて
何を入れるかを自分で決めるんだ



801 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:33:10 ]
ごめん、Cgだから
何を入れるというと uniform型を宣言すると思ってしまって。

Cgでも未だに
struct IN{
float4 position1 : POSITION
float4 color : COLOR
}
に何が入ってるのかわかってなくて。
uniform型なら、明示的にブチ込んでるからわかるんだけども

802 名前:デフォルトの名無しさん [2007/11/10(土) 21:48:57 ]
実際のところ、頂点シェーダの
入力パラメータが何であるかなんで
どうでもいいことだし、何を渡してもかまわない。
ただ最低限、同次頂点座標を1つ出力しなければならないってだけだ。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<237KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef