【C++】 DirectX初心者質問スレ Part14 【C】at TECH
【C++】 DirectX初心者質問スレ Part14 【C】 - 暇つぶし2ch797:デフォルトの名無しさん
07/11/10 18:27:57
>>795
いや、それって方法論でしょ?
何を表現したいかってことだよ
それによってはそもそもその手法が正しいのか、って話になるから

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

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

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

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

URLリンク(marupeke296.com)

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

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

799:デフォルトの名無しさん
07/11/10 21:17:22
便乗して質問
>>792のようにPosition0~2まで3つ設定すると
そこに何入ってるの?


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

800:デフォルトの名無しさん
07/11/10 21:28:57
何が入ってるかじゃなくて
何を入れるかを自分で決めるんだ

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

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

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


803:デフォルトの名無しさん
07/11/10 21:49:30
>何が入ってるのかわかってなくて
工工工工工工エエエエエエ(´д`)エエエエエエ工工工工工工

804:デフォルトの名無しさん
07/11/10 21:53:48
>>802
何が入ってるのかわからないままだと、結局何もわかってないままで
>>803みたいなこと言われるので・・・

805:デフォルトの名無しさん
07/11/11 15:53:09
質問です。

DirectX SDKのサンプルって、みんな「コード生成」->「ランタイムライブラリ」の設定が「マルチスレッド デバッグ」になってるじゃないですか。
これを、「マルチスレッド デバッグ DLL」にしてビルド通して実行しようとすると「MSVCR80.dllが見つかりませんでした」とか「MSVCR80D.dllが見つかりませんでした」
と言われて実行に失敗してしまいます。
これ、対処法ってないんでしょうか。

というのも、自前で作ったライブラリとSDKサンプルを組み合わせて使いたいんですが、ライブラリが「マルチスレッド (デバッグ) DLL」の設定でビルドしてあるものだから、
合わせたいんです。

806:デフォルトの名無しさん
07/11/11 16:26:41
見つかる場所 (PATHの通ってる場所とか) にDLLを置いとけばいいんじゃないの

807:デフォルトの名無しさん
07/11/11 17:35:07
最近ワイドモニターのノートPCを使い始めたのですが、
フルスクリーンのゲームなどをするときに横に伸びてしまいます。
そこで、特定のサイズでフルスクリーンにするとき、自動的に左右をパディングして真ん中だけを使って写すようにしたいのですが、
そのようなソフトウェアを作ることは可能でしょうか?

808:デフォルトの名無しさん
07/11/11 17:40:26
はい。

809:デフォルトの名無しさん
07/11/11 17:45:25
ちなみに、そのようなハードウェアを作ることも可能ですよ。

810:デフォルトの名無しさん
07/11/11 18:12:02
でもそこらの同人ゲームはフルスクリーンで特に何もやってないのがほとんどじゃん。


811:デフォルトの名無しさん
07/11/11 18:36:58
>>810
TL頂点使ってると比率が変わるだけで表示しているものの位置が変わるからね。

812:デフォルトの名無しさん
07/11/11 22:07:15
ドラクエ7の戦闘開始時に画面がばらばらに落ちる処理
をdirectxでやるのに参考になるサイトがあれば
教えてください。

813:デフォルトの名無しさん
07/11/11 22:33:27
URLリンク(www.nicovideo.jp)
ニコニコだけど、これ自作描画エンジンらしい。

エンジンどーこーわからんが、すげぇや

814:デフォルトの名無しさん
07/11/11 22:38:25
DirectXなの?

815:デフォルトの名無しさん
07/11/11 22:39:27
>>813
どーゆーレベルのエンジンかわからんが

それでもスゴイ!と言わざるを得ないw


俺なんて、DirectXのサンプルブラウザーのチュートリアル4を
ウンコをつんつんするような感じで弄ってるところだぞ

816:デフォルトの名無しさん
07/11/11 22:46:48
>>813
開発者のHP見てきた

3Dアクションゲーム作っちゃうレベルの人なので、
素人から見るとすごいが、この人のレベル的にはそんなに凄くないw

817:デフォルトの名無しさん
07/11/11 22:53:59
確かにすごい

トゥーンレンダリングエンジンの開発
キャラのモデリング作成
キャラのテクスチャ作成
モーション付け
アニメーション付け

考えただけで気が遠くなる

818:デフォルトの名無しさん
07/11/11 22:59:16
しかし、SIが正規版なのが気になってしまうw

819:デフォルトの名無しさん
07/11/11 23:03:30
元プログラマー、現在NEET、てw
にしてはいいソフト揃えてんなあ

モデルはちょっとクセがあるけど丁寧だし動きもなかなか自然だねえ

820:デフォルトの名無しさん
07/11/11 23:09:51
URLリンク(www.amazon.co.jp)

この人が見てるらしいこの本、ちょっと欲しいな!

821:デフォルトの名無しさん
07/11/11 23:18:55
XSI

100万とかテラスゴス!
と思ったら、XSI 6 Foundation だと七万八千円なのね

822:デフォルトの名無しさん
07/11/11 23:32:49
一番面倒なのは、モーションを入れる作業だね。
地道に振り付けと、表情のUV切り替え。

データさえ作ってしまえばエンジンの仕事なんてたかが知れている。

823:デフォルトの名無しさん
07/11/11 23:50:43
>データさえ作ってしまえばエンジンの仕事なんてたかが知れている。
どういうこっちゃ?

つーか、プログラマにモデリングが不慣れだというのに
ニコニコではモデリングばっか言われてるのな。

エンジンなんて作れねぇ。つーか無理


824:デフォルトの名無しさん
07/11/12 00:01:35
>>823
プログラマが個人でやる場合だと、データ作る方が大変な気がするw

両方やってるのがすごいなぁと思うよ

825:デフォルトの名無しさん
07/11/12 00:02:54
モデルデータを読み込んで再生するだけなら、普通のプログラマなら全然難しくないんだよ。
モーションデータの生成部分までエンジン側でやっているなら凄いプログラムだが、それはまずあり得ない。

826:デフォルトの名無しさん
07/11/12 00:17:03
そりゃ、モデルデータ読み込んで、toonシェーダかけて再生ってそりゃやるけど。
エンジンってそういうことなん?
あと、全然難しくない、とか言うのやめたほうがいいよ。

つーかライティングやらシェーディング、加えてそれがリアルタイムってあたりで
組むのうんざりだ。


827:デフォルトの名無しさん
07/11/12 00:25:20
データ作るほうがコーディングより作業が大変だろ

828:デフォルトの名無しさん
07/11/12 00:28:54
ビューアは作ったからモデルデータとモーションを作れと言われるのと、
モデルデータは作ったからビューアを作れと言われるとがどちらが良いかと言われたら、
迷わず後者を選ぶ。
労力が全然違う。

829:デフォルトの名無しさん
07/11/12 00:33:44
いつのまに
プログラマーとモデラー・アニメーターの比較になってるんだ?

プログラムの話をしようぜ。
リアルタイムラジオシティtoonレンダでも組んでくれ。

830:デフォルトの名無しさん
07/11/12 00:44:50
光源が固定のラジオシティをリアルタイムといってしまっていいものかどうか。

831:デフォルトの名無しさん
07/11/12 00:52:55
????
なんでラジオシティに光源の位置が、固定か可変か関係あるの?


832:デフォルトの名無しさん
07/11/12 01:08:03
は?全ては光源に依存してるんだから、光源が固定か可変かは大問題だろう。

CG屋さんか?

833:デフォルトの名無しさん
07/11/12 01:13:33
リアルタイムに光源を変化させるのってそんなに難しいの?

まだ、チュートリアル弄ってる段階なんでさっぱりさ!

834:デフォルトの名無しさん
07/11/12 01:17:05
????
そりゃ光源に依存してるけど、普通はレンダリング時に光源の位置を決めて
そこからラジオシティ入るだろ?

つまりはアレか?人がグリグリ動いてる中で、光源(例えば太陽+複数のスポットライト)も
グリグリ動いて、間接光だのをリアルタイムで時間積分して解いてるのか?

つーか、リアルタイムの光源固定ラジオシティでさえまともに実装されてないのに。
光源がグリグリ動くラジオシティがあるっていうのか。ぜひ教えて欲しいわ。


835:デフォルトの名無しさん
07/11/12 01:20:12
>>833
リアルタイムで光源が動いて
シェーディングをかけるのは難しくはない。nvidiaとかのサンプルでもある。

言ってるのは、ラジオシティ。

836:デフォルトの名無しさん
07/11/12 01:24:29
>>834
>>831によると、固定も可変も関係ないらしいから、光源固定のラジオシティも
光源がぐりぐり動くラジオシティもあるってことになるよね。

837:デフォルトの名無しさん
07/11/12 01:28:35
3Dの勉強始めようかな…
なぜかゲームプログラマーになってしまったしな…

838:デフォルトの名無しさん
07/11/12 01:29:35
ここはあなたのブログではありません。

839:デフォルトの名無しさん
07/11/12 01:30:56
>>836
んー
俺の認識だと、ラジオシティでは1枚の光源は
固定したものとしてレンダリングするもんだと理解してるから

可変ってのは無いもんだと思って831を書いたんだけども。
ぃゃ、正直光源がグリグリ動くラジオシティがあるなら、参考にしたいから知りたいというのがある。


確かに1枚=1フレームとして、リアルタイムのラジオシティが出来るのであれば
それは光源が可変なのだと思うけど。
SIGGRAPHでさえ、リアルタイムラジオシティは出てない、はず。

PS3を3台だかつかって、リアルタイムレイトレしてる変な人たちはいたけど

840:デフォルトの名無しさん
07/11/12 05:58:03
変って言うなw

841:デフォルトの名無しさん
07/11/12 17:08:46
ピクセルシェーダで画面の輝度の高い部分にグレア処理をかけたいと思ってます。

画面と同じ大きさで作成したテクスチャにオブジェクトを描画して、
最後にそのテクスチャにグレア処理をかけて画面いっぱいに映し出された
ポリゴンに描画するというやり方でやってます。

しかし、やり方が悪いのかぼやけます。根本から間違ってるのでしょうか?
画面いっぱいに映し出されたポリゴンは出力を見ながら手作業で大きさを
調整しているので、サイズが画面と完全に一致してないのが原因なのか…。

842:デフォルトの名無しさん
07/11/12 17:38:04
テクスチャ自体の解像度が低いとかじゃないの?


843:デフォルトの名無しさん
07/11/12 17:52:51
テクスチャのサイズですが、生成時に画面と同じ640*480を指定しています。
1024*1024等の2のべき乗で無いからぼやけるのでしょうか?

試しに1.5倍の960*720のテクスチャにモデルを描画した後640*480の画面に
ピクセルシェーダで描画したらぼやけは無くなりました。
でもこれは高解像度から低解像度への変換なので当たり前というか…。

844:デフォルトの名無しさん
07/11/12 17:59:54
使ってるビデオカードは2の乗数でないテクスチャに対応しているものか?
そうでないなら640*480なんていう半端なサイズのテクスチャは作れないが

845:デフォルトの名無しさん
07/11/12 18:07:26
ためしに2^nにしてみて検証


846:デフォルトの名無しさん
07/11/12 18:50:05
どうせヘルプをまともに読まずD3DXでテクスチャを作って、勝手に自爆しているだけだろ。

847:デフォルトの名無しさん
07/11/12 19:27:26
シェーダが使えるのにテクスチャが2^nでしか作れないなんて、
VP870(PS1.2)とかXabre(PS1.3)くらいで、シェーダモデル2.0以降なら
1つも無いと思うが。

俺はどうせ座標が0.5ずれてるFAQネタだと思うが。

848:デフォルトの名無しさん
07/11/12 19:33:05
ウィンドウサイズは640x480だけど
クライアント領域が640x480じゃないってオチは?

849:デフォルトの名無しさん
07/11/12 21:17:33
サンプルブラウザのチュートリアル6メッシュっちゅうのを動かしてみたんだが、
メッシュの回転や平行移動ってどうやればええのん?

850:デフォルトの名無しさん
07/11/12 21:33:42
>>849
ワールドマトリックスに好きな行列をセットしろ。

851:デフォルトの名無しさん
07/11/12 21:42:07
>>850
サンキュー!

852:デフォルトの名無しさん
07/11/12 21:56:16
誰か>>801に答えてくれたりしない?

未だにだめっぽなのよ

853:デフォルトの名無しさん
07/11/12 22:03:58
>>850
行列のセットがよくわからなかったので、アフィン変換ちゅうのを使おうとしたんだけど、
こんなエラーが「error C2065: 'null' : 定義されていない識別子です。」

// Set up world matrix
D3DXMATRIXA16 matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/1000.0f );

D3DXVECTOR3 t(1.0f, 0.0f, 0.0f);
D3DXMatrixAffineTransformation( &matWorld, 1.0f, null, null, &t); // ここでビルドエラー
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );


なんで、D3DXMatrixRotationY、D3DXMatrixLookAtLHは使えるのに、
お友達っぽいD3DXMatrixAffineTransformationが使えないのかわかる?

854:デフォルトの名無しさん
07/11/12 22:04:40
null→NULL

855:デフォルトの名無しさん
07/11/12 22:06:24
>>854
ひゃっほう(’’*

856:デフォルトの名無しさん
07/11/12 22:26:17
質問です。

3Dゲームでパラメータ等を2Dで表示する機能を実装したんですが、すごく重くなってしまいました。
本で調べてみたのですがClearでZバッファを一度消しているのが原因らしいです。
とりあえず原因はわかったのですがどういう解決策をとればいいのかわかりません。

いい解決策とかパラメータ表示の代替案とかご存知なら教えていただきたいです。

857:デフォルトの名無しさん
07/11/12 22:35:57
どの本の何という記述からそう思ったのか答えよ。

858:デフォルトの名無しさん
07/11/12 22:42:58
軽くエスパーすると
フォント描画が重いんだと思うけど・・・

859:デフォルトの名無しさん
07/11/12 22:49:29
>>852
頂点の配列は自分で作ってるんだろ?
んで、それをGLの関数にセットして描画してるんだろ?
それだよ。

>>856
Zバッファをクリアせずに
文字を書くときだけZテストをOFFにすれば?

860:デフォルトの名無しさん
07/11/12 22:51:05
>>857.858
すみません直りました。

コードに手は加えていないのに突然直ったので
たぶん別の事が原因だったと思います。それが何かはわかりませんが…。
お手を煩わせて本当に申し訳ない。

861:860
07/11/12 22:53:14
>>859さんも解答してくれてありがとうございます。
>>860の通り解決しました。重ね重ね申し訳ない。

862:デフォルトの名無しさん
07/11/12 23:10:35
それよりもZバッファをクリアすると遅くなる情報の元になった書籍名を答えろ。

863:デフォルトの名無しさん
07/11/12 23:22:40
>>862
マスタリングDirectXプログラミングという本です

864:デフォルトの名無しさん
07/11/12 23:49:30
初心者が買ってはいけない本に認定

865:デフォルトの名無しさん
07/11/12 23:54:54
こんな本でてたのか
日本語でDirectX関連の本は久しぶりだな

866:デフォルトの名無しさん
07/11/13 00:57:58
今、DirectX9SDKで2Dのシューティングゲームを作っています。
ゲームのプログラムは「シューティングゲームプログラミング」の本を参考にして作っているのですが、この本のサンプルでは弾やキャラクタが全て3Dメッシュで作られています。
作りたいのは2Dのゲームなので、DirectX8の2Dゲーム作成のページを参考にしてDX9の仕様に変えながら、後でゲームに組み込むことを目的にして2D描画周りの勉強をしています。
本のサンプルにもテクスチャを描画する関数はついていたのですが、頂点位置を指定しての変形描画や行列を用いた回転を使いたかったので、自分で関数を作ってみようと思いました。

今触っているプログラムの簡単な描画の流れは、
①D3DXCreateTextureFromFile を使ってpngファイルからテクスチャを作成
②SetTexture でテクスチャをデバイスにセット
③DrawPrimitiveUP でバックバッファに転送
④EndScene を待って Present でフリップ (方式はD3DSWAPEFFECT_DISCARD)
というものです。

そこで質問なのですが、テクスチャを描画した際に像がぼやけたようになってしまうのはどうすれば直せるのでしょうか。
現在はステージ画面のフレーム(透過部分を四角く抜いたワク)を描画する段階で、テクスチャの大きさは640x480です。
ファイル形式はpng、bmp、tgaを試してみましたがどれもぼやけてしまいます。

URLリンク(www.uploda.org)
具体的には、画像の左側の絵を描画すると右のようになってしまいます。
解決策を教えて下さいませんでしょうか。

867:デフォルトの名無しさん
07/11/13 02:42:36
ちょっとだけ上を見るとか頭に無いのかな

868:デフォルトの名無しさん
07/11/13 05:05:12
倍の解像度のテクスチャを用意して、0.5ずつ座標をずらしたら綺麗に表示されました。
上を見れなくて申し訳ありませんでした。

869:デフォルトの名無しさん
07/11/13 13:30:43
>頂点の配列は自分で作ってるんだろ?
>んで、それをGLの関数にセットして描画してるんだろ?

だから、頂点が3つあったときに(0 0 0) (1 1 0) (-1 1 0)
struct IN{
float4 position1 : POSITION
float4 color : COLOR
}
だと、POSITIONが1個しか無いじゃん
1個しかないのに、3つの頂点入るの?

3つのうちのどれかが入るんでしょ?それuniformじゃないと指定できないじゃん
勝手にCgの方でやられたってこっちが困るんだよ
3つのうちどれが入るか言ってよ!ヴァカ!

870:デフォルトの名無しさん
07/11/13 13:50:10
自分の不勉強を棚に上げて逆ギレとは…。
てか、>>800で終了だろ。

871:デフォルトの名無しさん
07/11/13 16:52:26
>>868
なんで倍の解像度にする必要があるの?

872:デフォルトの名無しさん
07/11/13 19:12:14
ピクセルシェーダ2.0を使う場合って、そのPCが1・1までしか対応
していない場合どうなるのでしょうか?
エフェクトファイル読み込んだ時点でエラー発生でしょうか?
手元にあるのマシンが全部2.0対応なので、誰か分かる人ご教授お願いします!

873:デフォルトの名無しさん
07/11/13 19:15:26
>>870
だから、何を入れるのか決めるのってCgだとuniform使うんだってば
何回も同じこと言わせないでください><
uniformがついてないからわからないんですぅ!


と、厨臭いこと言い方ですいませんでした。自分の勉強不足です
ただ一人じゃわからなくて。アドバイス頂けたらと思って伺いました。
ほんとすいません。教えてください

874:デフォルトの名無しさん
07/11/13 19:41:34
            /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙i、
               i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|i
           /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;i゙i
           /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/|;;ト;ト;;;;;;;;;;;;;;;;;;;;;;;;ヽ、
            /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ノ;;ノシ/ノ |゙!iヽヾ;;;;;;;;;;;;;;;;;;;;;;ヽ、
         /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ンツン    ! ヽ、 ヾ;;;;;;;;;;;;;;;;;;;;;;;ヾ
           /;;;;;;;;;;;;;;;;;;;;;;;/シンて__;;;、   ,;;;.ソ ~゙ヽ;;;;;;;;;;;;;;;;;ヽ
        /;;;;;;;;;;;;;;;;;;;;;/ゾ      ゙!  /     ノミ;;;;;;;;;;;;;;;;ヽ、
      /;;;;;;;;;;;;;;;;;;;;入  ーt┬‐ュ ヽ ( <エコブ ┃ノ;;;;;;;;;;;;;;;;;ヾ
      /;;;;;;;;;;;;;;;;;;;;;;;;ヽ┤     ̄_ノ  ゙i i ‐-、   |;;;;;;;;;;;;;;;;;;;;;;;;゙i  必要な分は見せたということだ
.      /;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::l、        : : ゙    ノ;;;;;;;;;;;;;;;;;;;;;;;;;;l
    /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::T:、_     r‐ i i┐  イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;l   これ以上は見せぬ
.    l;;;;;;;;;;;;;;;;;;;;;;;;;/;|   k┴ヽ、  /‐、l´゙)~ヽ ( |イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;l
    l;;;;;;;;;;;;;;;;;;;;;;イ;;;|  |   / /  _゙'_'゙  ゙i )| |;;;;;;;;;;;;;;;;;;;;;;;;;;;l
     l;;;;;;;r‐''゙;;;;:;;:;;;;l  ヽ、 ,|. (   f‐ニ‐ヽ /./ /ヾヾ;;;;;;;;;;;;;;;;;;;l
     ヾ/;;;;;;;;;:;;;;:;;;;;ヽ   ゙ヽ\ヽ―'゙―゙'‐// / /;;;:::....゙''‐、;;;;/
  _,.,.r/ ,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ   ゙i ゙i、゙'v    v' i / ノ;;;;::::;;;;;;;;;;;;;;;:.ヽ、
 /::/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ、  ゙r_ヽ! 、,.  ! |  ,/;;;;;;;;::;;;;;;;;;;;;;;;;;;;;;;;;ヽ、

875:デフォルトの名無しさん
07/11/13 20:00:53
>>873
てゆーかホントにお前が何がやりたいんだよ
>>795がやりたいとして
ホントに頂点数は5なのか?
それくらいならできなくもないけど頂点数が数十個のオブジェクトを
この方法で処理するのは土台無理な話だし
ホントにそんな処理が必要なのかも疑わしい

いま自分が目指してる最終地点と
それに対してどういうアプローチをしてるのかぐらい書いてもらわんと
説明する気も起きない

876:デフォルトの名無しさん
07/11/13 20:31:58
>>795さんではありません><

単純に>>869の状況のときに
float4 position1にはどんな座標が入ってるか知りたいだけです!

ポリゴンは(0 0 0) (1 1 0) (-1 1 0)で三角形指定して、頂点が3つあるのに
シェーダーで受け取るPOSITIONセマンテックは1つだけっていうのがわからないのです

Output {
float4 position : POSITION;
float4 color : COLOR;
};
main (float3 position : POSITION)
{
Output OUT;

OUT.position = float4(position, 1);
OUT.color = float4(0, 1, 0, 1); // RGBA green

return OUT;
}

なんでfloat3 positionが1個だけなの?
じゃあ、これに float3 position2 : POSITION1とかしたら、何が入るの?
(0 0 0 ) (1 1 0)? それとも(-1 1 0)?
そこら辺の説明が本でも何でも載ってないのでわかんないんです

877:デフォルトの名無しさん
07/11/13 20:39:44
>>876が何を言いたいのか良くわからんが
頂点数が3個なら
mainは頂点数と同じ数だけ
つまり3回呼ばれてる
1回目のmainのpositionには(0,0,0)がはいっていて
2回目のmainのpositionには(1,1,0)が以下略
ここまではOK?

878:デフォルトの名無しさん
07/11/13 20:55:26
そして
float3 position2 : POSITION1だが
Cgがどんなものなのか知らんので
POSITION1なんてセマンティックがあるのかは知らんが
あると仮定するとposition2には何も入ってきていない
position2になにを入れるかは
頂点情報を設定するときに自分で何をいれるのか決める部分なので
何も指定してないのなら何も入らない

879:デフォルトの名無しさん
07/11/13 21:05:01
>>877-878
ありがとうございます><

間違ってたところがありました。POSITIONはセマンティックが1つだけで
COLOR1とCOLOR0、 TEXCOORD0~7でした!

でもPOSITIONのところはわかりました!ありがとうございます!その頂点分呼び出されて
そのときはPOSITIONに、その値が入るんですね!


でもCOLOR0~1とTEXCOORD0~7がわからなくなってしまいました。
これも外部から指定するのでしょうか。uniformじゃ無いのに。

880:デフォルトの名無しさん
07/11/13 21:07:30
なんという理解力の無さだ・・・

881:デフォルトの名無しさん
07/11/13 21:07:31


struct Vertex{
D3DXVECTOR3 position ;// 頂点の座標(必須)
D3DXVECTOR4 color ;
D3DXVECTOR3 position1 ;// 拡張した頂点情報
D3DXVECTOR3 position2 ;// 拡張した頂点情報
} ;

#define MY_V (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2|D3DFVF_TEXCORDSIZE3(0)|D3DFVF_TEXCORDSIZE3(1))

main (
float3 position : POSITION
float3 color : COLOR,
float3 posion1 : TEXCOORD0,
float3 posion2 : TEXCOORD1
)
{ ・・・

TEXCOORDはテクスチャ座標を入れるために用意されてはいるが
別にテクスチャ座標を入れないといけない決まりはない
たとえば複数光源の計算をしたいときにそれぞれの光源ベクトルをいれたりとか
ここはプログラマが必要に応じて拡張すべきところでみんなはこれのことを言っている
一つ一つの頂点に複数の情報を持たせられるよってだけで
複数の頂点の情報がはいってくるわけではない

882:デフォルトの名無しさん
07/11/13 21:14:53
つまりTEXCOORDは何入れてもいいということですか。

twoTextures(float2 position : POSITION,
float2 texCoord : TEXCOORD0,

uniform float2 leftSeparation,
uniform float2 rightSeparation,

out float4 oPosition : POSITION,
out float2 leftTexCoord : TEXCOORD0,
out float2 rightTexCoord : TEXCOORD1
)
{
oPosition = float4(position, 0, 1);
leftTexCoord = texCoord + leftSeparation;
rightTexCoord = texCoord + rightSeparation;
}

でもこういう風に、「入ってくる側のfloat2 texCoord : TEXCOORD0,」の場合はプログラム側で
指定しないとダメなんですよね。

outのところは、自分の都合にあわせて設定してるっていうのはわかるんですが。


883:デフォルトの名無しさん
07/11/13 21:30:31
やべえ、頭痛くなってきた
誰か、バトンパス

884:デフォルトの名無しさん
07/11/13 21:53:21
   ↓
   ↓
   ↓

885:デフォルトの名無しさん
07/11/13 22:28:46
教えて君・粘着君に付き合うのが嫌なら無視するのが常識。


886:デフォルトの名無しさん
07/11/13 22:33:51
お前頭いいな。

887:デフォルトの名無しさん
07/11/15 05:26:10
高さマップの画像からデコボコな地形を生成したいんですが、
全くやり方が分かりません。ヒント頂けないでしょうか?

888:デフォルトの名無しさん
07/11/15 07:08:10
画像の1ドット毎を高さに変えるだけ。
RGB、つまり256色x3色=768段階の高さが取得できる(アルファも取りたけば自由に)。
黒なら高さ0、白なら768xαという高さに決めればあとは自分でその高さに点を配置して面を作っていく。

889:デフォルトの名無しさん
07/11/15 07:31:08
24bitもってて768段階? なんでbitでやらんの
あと移動可などのフラグとか含めたりする。



890:デフォルトの名無しさん
07/11/15 07:58:39
俺は、>>887の質問の内容が分からん。
エスパーの例題かと思った。
元データはバンプマッピング用のテクスチャの事?
デコボコな地形って何?ポリゴングリッドの事?
それは、DirectXの質問なの?

891:887
07/11/15 12:27:14
言葉足らずで申し訳ないです。
高さマップの画像を元に、メッシュを作成する方法です。
>>888
画像のデータを1ピクセルごと取得していって、自分で頂点を打っていく
ということでしょうか?

892:デフォルトの名無しさん
07/11/15 13:01:48
それ以外にどうしろと?

893:デフォルトの名無しさん
07/11/15 14:49:52
>>891
hight-fieldのことでしょ?

濃淡グレーマップが高さを示しているっていうの。
単純に0-255でRGB値を読み込んで、それをポリゴンの1頂点として
メッシュを刻んでいけばいいんでないの?

RGB値が読めないとかいうなら
PPM、PGMのASCIIモードで保存でもして読み込めばいい。
当然、ピクセル分の頂点が出来てしまうからデータは重い(255×255pixelなら、255×255頂点)
あと頂点間のつながりもプログラムで指定する。

ということなのでは?

894:デフォルトの名無しさん
07/11/15 15:11:38
たぶん、
そういう超便利関数はないの?
って聞いてるんじゃね?

895:デフォルトの名無しさん
07/11/15 15:26:53
pov-rayとかならあったかな。超便利関数
ポリゴン生成してくれるまでは知らんけど。


896:デフォルトの名無しさん
07/11/15 17:00:44
っていうか、普通のバンプマッピングを使ってレンダリングしたら駄目なの?
地形とか作りたいなら、元データに高さマップ使う意味がわかんないし。

897:デフォルトの名無しさん
07/11/15 17:27:01
ビットマップなんてヘッダ以外はただの2次元配列じゃないか

898:デフォルトの名無しさん
07/11/15 18:48:33
URLリンク(www.microsoft.com)
こんなの?
MDXだが。

899:887
07/11/15 19:15:13
>>892
なかなか初心者には分からないものです。

>>893
なるほど、非常に参考になります。

>>894-895
そういうことになりますかね。xファイルをロードする関数があるので、
高さマップなどにも専用の関数がある、もしくは似たようなことが出来る
と思ってました。

>>896
バンプマッピングはあくまでも見た目だけで、実際に他のメッシュから
レイを飛ばして高さを取得したい場合などには不向きと調べた結果にありました。
それと地形作成専用のツールの出力が高さマップだったので。
逆にバンプマップ以外、高さマップ無しで効率よく広大な地形を生成する
手法が存在するのでしょうか?
>>898
実は質問する前にそのページを参考にして作ってみたのですが、原理やC#自体
よく理解していないなかったので手詰まり状態でした。
アドバイスのおかげでそのソースコードの意味も今分かりました。

とりあえずゴリゴリ頂点データを作成する関数をコーディングしてみます。
ありがとうございました。

900:デフォルトの名無しさん
07/11/15 21:53:13
やってることが、どう見てもhight fieldだ。
ハイトフィールド、hight fieldでググると色々出てくるよ。
使い古された手法だから、結構ソースはあるはず



901:デフォルトの名無しさん
07/11/15 22:36:14
助言をお願いします。

テクスチャを動的に生成するため、
D3DXCreateTexture(pD3DDevice, iWidth, iHeight, 0, 0, D3DFMT_A8L8 ,D3DPOOL_MANAGED, &pTexture);
で作成してたテクスチャを
pTexture->LockRect(0, &stRect, NULL, D3DLOCK_DISCARD);
とロックして書き換えていたのですが、

ふと、DirextX Control Panelで、Debug Runtimeに変更したとたん、
エラーコードD3DERR_INVALIDCALLが返ってくるようになりました。
Retail Runtimeでは動くので最終的には問題ないですが、
Debug Runtimeで動かないのが気になります。

何かご指摘の点があればよろしくお願いします。


902:デフォルトの名無しさん
07/11/15 22:40:06
>>901
デバッグ出力に何か情報でてないの?

903:デフォルトの名無しさん
07/11/15 23:10:23
パラメータを見直した?
D3DXCreateTexture、LockRectの箇所でデバッガで止めて、引数の値を精査した?

904:901
07/11/15 23:37:31
レスありがとうございます。

デバッグ出力は何も出てきていません。
パラメータは例で示した感じです。
動作自体はRetail Runtimeで目的通りに動作しているので、
何が間違っているのか・・・?


905:デフォルトの名無しさん
07/11/16 00:51:43
D3DLOCK_DISCARDは、動的テクスチャのみ有効なフラグで
動的テクスチャの作成にはD3DPOOOL_MANAGEDは使用できないと
ヘルプにあるが。また、D3DUSAGE_DYNAMICを指定してないし。
つーか、デバッグメッセージは出てるだろ、メッセージレベルを上げろよ。

906:デフォルトの名無しさん
07/11/16 01:16:52
>>904
D3DERR_INVALIDCALLが返ってきて、デバッグ出力に何も出ないなんてことは
最近のSDKでは起こらないと思うんだが。

>>901のコードを手元で試したらちゃんとメッセージが出たんだがね

Direct3D9: (ERROR) :D3DLOCK_DISCARD is allowed only with dynamic textures

907:デフォルトの名無しさん
07/11/16 01:18:10
>>906の言うとおりならSDKが古いんじゃないの?

908:デフォルトの名無しさん
07/11/16 01:34:37
>>906のメッセージはかなり昔のSDKでも出る

恐らくは>>905の言うとおりデバッグ出力レベルを上げてないだけかと
Retailランタイムでは動作するってのが分からんけど

909:デフォルトの名無しさん
07/11/16 01:40:05
Retailで動くってのは無効なフラグをいちいちチェックしたりせずに無視してるだけなんじゃないかなたぶん

910:デフォルトの名無しさん
07/11/16 01:52:49
DebugとRetailで、関数からの戻り値(HRESULT)が変わることもあるのかな?
>>901でLockRectが失敗すると、当然D3DLOCKED_RECTの値も無効な訳で、
そのまま処理進めると間違いなくAccess Violationな気が…

911:デフォルトの名無しさん
07/11/16 01:59:38
とりあえず、仕様通りに書き直せばいいんでね?原因なんて暇人に調べさせておけ・・・
ってまさか、これは調べさせる釣りなのか?!

912:デフォルトの名無しさん
07/11/16 02:12:59
これはまたまんまと

913:901
07/11/16 02:43:16
レスありがとうございます。
D3DPOOL_MANAGEDで作成してること事態が問題でした。
おかげさまで、
D3DXCreateTexture(pD3DDevice, iWidth, iHeight, 0, D3DUSAGE_DYNAMIC, D3DFMT_A8L8 ,D3DPOOL_DEFAULT, &pTexture);
と修正することにより、Debug Runtimeでもエラー無く動くようになりました。

ただ、Debug Output Levelを最大にしても、エラーメッセージが何も出でないのは気になりますが・・・。
ちなみに、SDKはJune 2007をVistaで使用しています。


914:デフォルトの名無しさん
07/11/16 07:10:11
デバッグメッセージの見方を知らないのかな?

915:デフォルトの名無しさん
07/11/16 08:53:14
VC++8Expressだと出力ウィンドウにはネイティブのデバッグメッセージは
表示されないという罠があったりなかったり。


916:デフォルトの名無しさん
07/11/16 11:19:26
質問者は、自分の環境とか使ってるDirectX SDKのバージョンを書かないけど、
このスレではそれがデフォなの?

917:デフォルトの名無しさん
07/11/16 12:13:20
SDKはみんな2004Octを使ってるからいちいち書かなくてもいいだろ

918:901
07/11/16 12:29:42
VC++2005EEだと出力ウィンドウに出てました・・・orz
主にコンソールで作業してるもので・・・
お騒がせしました。


919:デフォルトの名無しさん
07/11/16 13:46:44
DirectX9で2Dゲームを作っていて
SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
の拡大縮小フィルタを設定しているのですが、
等倍や縮小描画をすると異常にぼやけてしまいます
何故かMINFILTERではなくMAGFILTERの方を切ると縮小なども綺麗に描画されるのですが
原因として考えられることは何でしょうか?

920:デフォルトの名無しさん
07/11/16 15:13:05
>>919
URLリンク(msdn.microsoft.com)
これは?

921:919
07/11/16 18:23:09
>>920
レスありがとうございます
DrawPrimitive前でテクスチャ座標を全て-0.5fにすると解決しました

922:デフォルトの名無しさん
07/11/16 18:29:22
テクスチャ座標を全て-0.5fにする

・・・

923:デフォルトの名無しさん
07/11/16 18:34:22
DirectXでリアルタイムレンダリングを解説した書籍でお薦めのものってありますか?

924:デフォルトの名無しさん
07/11/16 21:26:44
まてまて、DirectXって基本的にリアルタイムレンダリングを前提としてると思うんだけど。
プリレンダリングの解説書なんて見たことねーぞ。

925:デフォルトの名無しさん
07/11/16 21:59:37
リアルタイムレンダリング in DirectX
URLリンク(www.amazon.co.jp)

926:デフォルトの名無しさん
07/11/16 23:26:21
現在XP+DX9なのですが、DX10に向けてDX9で磨いたほうがいい技術はどういうものでしょうか。
DX9からDX10に変わることで何がどう違うのかいまいち分からなくて・・・
DX8からDX9になったときのような仕様変更のレベルじゃないですよね、単なる思い込みでしょうか。

927:デフォルトの名無しさん
07/11/16 23:45:12
必用なのはドキュメントに目を通し、サンプルを読み、
こんなところでグダグダグダグダくだらないことを言わない技術。

928:デフォルトの名無しさん
07/11/16 23:52:22
持っているグラボの性能にもよるけどピクセルシェーダに慣れておけばいいかもね


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