- 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/
- 692 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:01:59 ]
- 超うろ覚えだがDirectMusicローダのキャッシュをいちいち開放しないと
そんな感じになったような気がしないでもないような。 てか、メモリからWAVE再生すんならDirectSoundかOpenALでええやん。 圧縮WAVEをそのまま再生できるくらいでしょ、この場合のDirectMusicのメリットって。
- 693 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:29:28 ]
- ありがとうございます。
キャッシュをキーワードに探し回っていたら ttp://www.sun-inet.or.jp/~yaneurao/rsp/rspD0toD7.html こういう記事を発見しました。 DirectMusicのバグのようですね…。 ついでに「メモリーからのロードは、実行ファイル内のリソースを再生したい時以外は使わないように」という注意書きも発見しました。 うーん、単に暗号化してあるファイルを複合化して読ませたい(複合化したものをTempファイルとして吐き出したくない)だけなのに、厄介ですね
- 694 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:30:08 ]
- 初心者ってやたら何でも隠蔽したがるよね
そこに時間かけるくらいなら 他にやることいくらでもあるだろうに
- 695 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 01:59:26 ]
- 本来何も無い所に自ら巨大な壁を作り上げて
疲労していくのはよくあること
- 696 名前:デフォルトの名無しさん [2007/10/25(木) 12:04:45 ]
- CYGWINのVISTAでのインストール&実装について質問です。
インストールは完了してデスクトップにも通常通りアイコンが作成されました。そこから起動させてみます。そうすると、 bash3.2/$ と表示され、pwdと打ち込むと /usr/bin と表示されます。 最終目標はxtermを起動させプログラミングをすることです。 XPでは緑色の文字がホームディレクトリと共に表示され、xstart と入力したら起動しました。 しかし、VISTAでこの状態で xstart と入力してもコマンドが認識されません。 なにより緑色の文字がホームディレクトリと共に表示されません。 何かのエラーではなく、まだ足りない設定等があるのでしょうか? 御教授お願いします。 環境は VISTA Ultimate 32ビット Core 2 です。 何か足らない情報があれば教えて下さい、補足させて頂きます。
- 697 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:17:06 ]
- 足りないのは注意力だと思うよ
- 698 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:33:53 ]
- たしかに強烈に注意力が足りないな。
- 699 名前:デフォルトの名無しさん [2007/10/25(木) 18:24:53 ]
- Xファイルの容量を軽くする方法、またはソフトなどありますか?
- 700 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:28:15 ]
- バイナリ、頂点減らし、無駄な項目を消す
- 701 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:55:03 ]
- >>699
圧縮かける
- 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倍)
|

|