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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2011/10/19(水) 22:47:45.95 ]
回答する人も、質問する人も必ず読んでください

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

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

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

現在の最新バージョンはDirectX 11です。

前スレ
【C++】 DirectX初心者質問スレ Part35 【C】
hibari.2ch.net/test/read.cgi/tech/1305885376/

110 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 00:14:40.17 ]
ID3DXFontですね、すみません

111 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 08:50:57.20 ]
>>110
bitmap画像用意する方法と比較検討したことがあるけど、速度面で大して有利でもなかった
ノベルゲームで使う分には申し分ないはずだけど、過去の資産があるなら乗り換えるほどじゃないよ

112 名前:デフォルトの名無しさん mailto:sage [2011/11/16(水) 17:41:49.71 ]
>>111
なるほどありがとう

113 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 03:25:08.69 ]
Direct3Dのベクターデータをプリンターに出力することってできますか?

114 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 08:09:33.43 ]
レンダリング結果じゃなくベクトル?
まわりではポリライン使ってる人が多かったかも、ノーマライズしてるのだけ色分けしたりしてた

115 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 12:11:55.30 ]
>>114
>レンダリング結果じゃなくベクトル
そうです。ベクトルデータを出力したいです。
四苦八苦しましたが、どうも無理な気がして質問してみました。
ポリラインですか。ちょっと調べてみます!



116 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 12:24:49.40 ]
どういうふうに出力したいのか不明だし、それが分からない限り無理だろう。

117 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 12:34:48.53 ]
初心者スレだし、質問者に正確さだとか詳細さを求めてもなあ

118 名前:113 mailto:sage [2011/11/17(木) 12:40:34.79 ]
>どういうふうに
Direct3Dで描画してるんですが、
デバイス作成(CreateDevice)時にウィンドウのハンドルを渡しますよね。
プリンターの場合はウィンドウハンドルが存在しないのでデバイス作成できずに困っている状態です。。。





119 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 13:39:36.16 ]
ほら、結局は話を聞かないで余計な気を回すと、こういうくだらない落ちになる。

120 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 14:49:08.99 ]
>>118
発想の飛躍っぷりがすげー。
プリンタ(プロッター?)をD3Dデバイスとして扱おうってのは完全に用途外だし無理な相談。

そもそもD3Dを使わなきゃいかんほどのリアルタイム性が求められるような話でもないだろうから
それ用に設計された別のライブラリ探すか自力で組むかした方が早いと思うよ。

D3Dは3Dに関することなら何でもやってくれる魔法のライブラリ、ではないので。

121 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 15:08:43.95 ]
単にサーフェイスへレンダリングした後、それをBltすればいいだけの話。
D3Dは何でもやってくれる訳じゃないが、今回のケースぐらい処理できる。
直前にアホが混ざってるけど。

122 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 15:28:20.05 ]
デバイスコンテキストハンドルとDirect3Dのデバイスをごっちゃにしてるのかね
秒間60枚印刷するプリンタを想像してワロタ、パラパラ漫画とか作れそうだな

123 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 15:47:43.50 ]
>>121
>>115見る限りベクター形式の(解像度非依存の)印刷用データを
D3D使って吐きたい、というように読めるんで
そういう方向には対応してませんよという意味での「魔法のライブラリではない」なんだけど。

124 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 15:48:51.27 ]
物理的に印刷して遊べるゲームか
プリンタ何台必要なんだ


125 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 18:05:21.70 ]
環境型ゲームで主人公がカメラ持ってて、写真取ると物理的にプリンタから出てくるとか。妄想妄想・・・。

126 名前:113 mailto:sage [2011/11/17(木) 18:19:10.50 ]
自分の無知と言葉足らずのせいで混乱させてしまったようでスイマセン

「プリンターに出力」というのは紙を印刷するわけではなく
具体的には「仮想プリンタドライバに出力」するのが目的です

>>121
>それをBltすればいいだけ
Bltしちゃうとベクトルデータではなくなってしまいますよね?
D3Dにおけるベクトルデータがどれにあたるのかが分かってないですが。。。

>>120
勝手な推測ですが、あなたは私の目的を過不足なく理解してくれている気がします
>プリンタ(プロッター?)をD3Dデバイスとして扱おうってのは完全に用途外だし無理な相談
このトドメのひとことを言ってもらって諦めがつきました

頂いたレスにあるようにリアルタイム性が求められる部分ではないので
描画方法を変えるしかない、というのを前提に対策を考えようと思います

127 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 19:16:24.47 ]
ベクトルが何か分からないってのはかなり問題、3Dの基礎から順番に学ぶべきかと

128 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 19:28:34.98 ]
出力結果をどうしたいのかはっきりしないのに、
プログラムの組みようがないだろう。



129 名前:113 mailto:sage [2011/11/17(木) 19:57:43.80 ]
>>127
>3Dの基礎から
その通りですね
現状のコードは自分が書いたものでなく、処理の流れを最初から確認していったら
初っ端のCreateDeviceで困ってしまったという情けない状態です。。。
GDIでの処理は経験あるので簡単にできるとナメてました

>>128
出力結果をどうしたいのかはハッキリしているので大丈夫です
ただ、D3Dを使わずに現状の処理を実現できるんだろうか、と途方に暮れています

最悪BMPデータで妥協するしかないかもしれません

130 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 20:05:55.76 ]
3Dグラフィックスなんかで使う数論的な意味での「ベクトル」と
画像データの格納形式区分としての(ラスターに対する)「ベクター」は
言葉としては同じvectorだが全然別の概念なので注意な。

131 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 20:08:28.76 ]
>>129
たぶんあなたに必要なのはベクトルや行列を計算するライブラリであってDirectXではない
Direct3Dってのは最終的にラスタライズする使い方がメイン、これに固執してもきっと遠回りになる

132 名前:113 mailto:sage [2011/11/17(木) 21:21:38.97 ]
>>131
>たぶんあなたに必要なのはベクトルや行列を計算するライブラリであって
いえソッチじゃないです
>画像データの格納形式区分としての「ベクター」
こっちです

GDIでの画像処理の経験はあるのでそのへんの混乱はしてないです
日本語で表記するときベクターって書いたりベクトルって書いたりしちゃいますけど

133 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 21:27:44.58 ]
まずはプリンタに出力したいものをディスプレイに出せ。
あとはプリンタのDCにBltすれば解決する。
ただそれだけの話だ。

134 名前:113 mailto:sage [2011/11/17(木) 22:01:11.82 ]
>>133
>プリンタのDCにBltすれば解決する
BltしちゃうとBMPデータになっちゃいますよね?
最悪そうするしかないかと思っているんですが、
自分がやりたいのはベクトルデータの出力なんですよ。

かなり無理のある話だとは思うんですが。。。

135 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 22:29:55.74 ]
プリンタもディスプレイと同じ、点の集合で紙の上に何かを表示するデバイスだ
抽象的な話をしててもきりがない、具体的にプリンタの機種名出せよ

136 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 22:32:16.72 ]
2Dのベクタ画像を3D空間中で処理して、その結果をまたベクタ画像として取り出したいの?
だったらビューポート変換までやった後の画面バッファから頂点位置取り出せばいけるんでない?

137 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 03:37:42.92 ]
>>132
君がご所望のは以下のようなものだと思うのだけど、DXは関係ないと思うナー。
ttp://ja.wikipedia.org/wiki/Windows_Metafile

モデラー作って変換して印刷って感じになるような気がする、気がする。

138 名前:113 mailto:sage [2011/11/18(金) 12:34:02.44 ]
>>135
>プリンタもディスプレイと同じ、点の集合で紙の上に何かを表示する
いいえ違うと思います
プリンタは処理するときに点の集合でなくベクトルデータとして処理しています
自分は仮想プリンタドライブに出力し、
ベクトル形式の画像ファイルを作るのが目的です(これができれば紙にも印刷できると思いますが)。

>>136
ありがとうございます
調べてみます!

>>137
そうです。MetaFileのようなベクトル形式のデータが欲しいです
そのデータを作るうえでD3Dを利用できないのかなあと暗中模索しているところです

おそらく結論は>>120ってことになる気がしています。。。



139 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 12:36:47.21 ]
>>138
>プリンタは処理するときに点の集合でなくベクトルデータとして処理しています
それはプロッタじゃ

140 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 13:09:28.89 ]
>>138
プリンタの実装にもよるけど基本的に現行のプリンタは原理的にラスターではあるよ。
内部的にPostscriptやらHPGLやらのベクターデータを実装してるような機種もあるけど
いわゆるレーザープリンタとかインクジェットプリンタってのは最終的には全部ラスターに変換される。
ペンを使ってドローするタイプであれば確かに原理的にベクターだけど、それは>>139の言う通り、普通はプリンタとは言わずにプロッタと言う。

なんつーか>>135もあなたも自分のフィールドの知識だけで物事を断定するのは止めたほうがいいと思うよ。
っていうかもう結論出てるんだしそろそろスレチ。

141 名前:113 mailto:sage [2011/11/18(金) 18:22:37.79 ]
>>140
そうですね、「プリンタ」だと間違いですね

140さんの言う通り、話題がプリンタになってしまっているんで、ここらで終了にして下さい
色々と教えて頂きありがとうございました

142 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 20:07:21.74 ]
どこかにDirectShowのサンプルプログラム置いてるとこ無いですか?

143 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 22:47:55.58 ]
C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow
あたりはどうだ?

144 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 22:59:37.67 ]
>>143
7.1には入ってるのか。7.0なんだけど入ってなかったわ。
んで、7.1入れようと思うんだけど7.0は消しちゃっていいの?

145 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:15:06.61 ]
D3DXCreateTextureFromFileEx();でWidthとHeightに0を渡すと、
例えば元のファイルが96*48だったときには実際には128*64で読み込まれるではないですか
このとき元の画像は128*64に拡大されるのですか
それとも元の画像はそのまま左上に寄せられて、他の部分は何かで埋められてしまうのですか

146 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:17:08.25 ]
埋立工事されます

147 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:22:37.90 ]
どういった素材で埋め立てられるのですか

148 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 23:44:55.87 ]
>>144
うちのv7.0には入ってるんだけど 入れるときにケチってカスタムでサンプルのインストール省かなかった?

めんどくさくてv7.0消さずにv7.1入れちゃったけど7.0のほうにあって7.1にないものってなさそうだし消しちゃってもいいんじゃね?



149 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:06:09.59 ]
>>148
ありがとう。
7.0は元から入ってたわ。もしからしたらVC++入れるときに一緒にインスコされたのかな。
7.0は一応そのままにしてインスコしますた。

150 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 00:53:27.01 ]
>>145
フィルタの設定次第でどれにでもなる

151 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 01:58:03.34 ]
透過についての質問です。
uploader.sakura.ne.jp/src/up68425.png
上のようなエフェクトを実装しようと考えているのですが、
このような透過のポリゴンを描画する場合、お互いに前後干渉してしまってうまく描画されません。
uploader.sakura.ne.jp/src/up68426.png
上の図で説明すると、赤の右側を描画する場合、先に奥の黄色がないといけないし、
かといって黄色を先に描画すると左部分で赤が先に描画されていないといけないしでうまくいきません。
どのようにすればこの問題を解決できるでしょうか?

152 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:20:36.83 ]
円じゃなくて半円の画像にすればいいじゃん

153 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:24:20.44 ]
>>152
その方法だと回転しながら描画した場合にやっぱり干渉してしまいますね...。

154 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:27:18.18 ]
画像を表示で前後関係がうまくいかないってことならわかるけど
メッシュだったらなぜそうなるのか分からない

155 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:35:05.96 ]
あんまりいい方法じゃないかもしれんけど、クロスしてるメッシュ2枚をY軸でナイフ入れて4枚に分割するとかはどうだろう。

156 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 02:38:32.56 ]
加算で描けば?
Zの書き込みはDisableで。

157 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 03:17:46.77 ]
分割面が常に固定ならクリッピング使って交差面の前と後2パスとかで描けるだろうけど
例示されたエフェクトみたいなのならそんなにコストかけるようなもんでもないし素直に加算使っとけだな。
α付き交差ポリゴンを1パスでお手軽に綺麗に描く方法はいまんとこない。

まさか単純にZWriteとかZCompの使い方がわからんっていう話じゃないよな?

158 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 16:25:05.98 ]
>>151はエロサイトへの誘導、通報済です。



159 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 23:06:29.93 ]
iup.2ch-library.com/i/i0483091-1321797945.jpg

文字化けするんですが、直せますか?

160 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 00:59:04.71 ]
>>159
CharSetが0ってAnsiじゃね? そこをSHIFTJIS_CHARSETにして
FaceNameはフォントの名前の設定だと思うから"MS Pゴシック"とかそのへんだろ

161 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 01:06:12.51 ]
>>160
マジ神
ホントに出来た

162 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 08:20:20.64 ]
リファレンスよめよ、、、

163 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 11:41:48.09 ]
マジ神とか回答者をバカにしてるとしか思えんわ。
礼の言葉くらいきちんと言え。

164 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 12:53:47.66 ]
そんなんでいちいち目くじら立てるなら初心者スレなんて見なけりゃいいだろ…

165 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 13:32:03.51 ]
ここは紙スレですか?

166 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 16:18:12.98 ]
IDirect3DDevice9からD3DPRESENT_PARAMETERSを取得する方法はないので自分で保存するしか無いってことでいいんですか?

167 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 17:11:19.06 ]
スワップチェイン経由で取るがよい

168 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:09:05.19 ]
あのDirectX9で2D描画したいと思っています
DrawPrimitive系の関数って実用的にはどう使われて居るのですか
DrawPrimitiveは遅いので呼び出しは一フレーム一度だけにしろと云われたのですが
そうなると複数テクスチャとか複数ポリゴンを扱うときに一体どうしろと云うのですか
あと3Dゲームでの実用についても知りたいです



169 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:12:49.13 ]
>>167
ども

170 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:14:14.45 ]
>>168
Direct3D9って前提で話をするけど、余程カリカリにチューニングするってんでもなければ
大体「ポリゴン単位で呼び出すな」程度の認識で大丈夫。
1フレーム1回ってのは流石に現代では無理がある。
余程古いハードウェアを前提にするんでもなければ別に数十回DrawPrimitive呼び出ししても60fpsは出るよ。
もちろんまとめられるようなパスは可能な限りまとめるべきだけど。

171 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:18:20.29 ]
一般的に見て一番早い描画法はなんなの?
インデックスバッハとかいうやつですか?

172 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:42:21.22 ]
>>170
ありがとうござます
ポリゴン単位とはつまり長方形の板ポリ一つずつということで合ってますか
それと、まとめるというのは頂点バッファをと云うことですよね
もしそうならテクスチャも纏めなければなりませんか
ユーザ側で元画像を用意してもらい、また任意で板ポリの数を増やして貰おうと思っているのですが、
画像を纏めるのをユーザが負担すると云うのは考えたくないものです

173 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:45:07.19 ]
>>171
一応インデックスバッファありの方が行列演算の絶対数は減るので
GPU的には早いとは言える。
正直それ以外のところで発生するボトルネック要因がいっぱいあるので
速度を理由にインデックスバッファを採用する理由はあんまないが。

174 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 00:09:12.79 ]
>>172
板ポリ一つずつで合ってるよ。
100スプライトなら4頂点+6インデックス+DrawPrimitive*100ではなくて
400頂点+600インデックス+DrawPrimitive*1する方が良いっちゃ良い。
その場合はもちろんテクスチャも一つにまとめるにこしたことはないけど
パターン数が少ないようならパターン毎にインデックスバッファを用意しておいて
パターン毎にパスを切り替えるやり方でもいいかもね。

175 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 00:13:33.76 ]
同じテクスチャ同士で頂点つなげてDrawPrimitiveならテクスチャの枚数分のオーバーヘッドで済むからもう十分じゃね?

176 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 07:43:17.82 ]
>>174-175
本当にありがとうございました


177 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 12:16:53.30 ]
すみません。.x形式でモデル&モーションを書き出しているのですが、
ツールが右手座標系で、プログラムが左手座標系なので反転させようとしています。
モデルはちゃんと反転できたのですが(x軸を-1倍)
ボーンの座標(中心位置)の反転(x軸を-1倍)が上手く行きません。

SkinWeights 項目のマトリクスの4_1(13番目)
FrameTransformMatrix relative 項目のマトリクスの4_1(13番目)
を-1倍してみたのですが、単純な回転モーションで確認しても変化が有りません。
ボーンの座標ではなくAnimationKeyに座標など全てが収まっているのでしょうか?

178 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 13:09:25.40 ]
.x形式まともに使ったことないからはっきりは言えないけど
アニメーションキーが存在していてそれを使って再生しているのであれば
普通は非アニメーション状態の変換行列は無視される。
(じゃないと取り回しが色々と不便になるから)
なのでアニメーションキーを変換する必要はあるだろうね。
その場合、おそらくメッシュの法線も反転するけど。



179 名前:177 mailto:sage [2011/11/22(火) 14:57:57.57 ]
>>178
>普通は非アニメーション状態の変換行列は無視される。
>(じゃないと取り回しが色々と不便になるから)
そうなんですね。その方が計算減りますよね。
ありがとうございました。 もう少し粘ってだめなら逆向きに作るとします。

180 名前:デフォルトの名無しさん [2011/11/22(火) 21:51:29.16 ]
すみません、質問です。
新しく接続されたコントローラー(デバイス)を認識して
DIRECTINPUTDEVICE8で取得したいのですが、DIRECTINPUT8::FindDevice()
が"クラスが登録さてません"というエラーを返してうまくいきません。
引数にはDBT_DEVICEARRIVAL→DBT_DEVTYP_DEVICEINTERFACEイベントの
DEV_BROADCAST_DEVICEINTERFACE::dbcc_nameとdbcc_classguidを渡しています。
もしかして使い方が間違ってるでしょうか?分かる方がいらしたら教えてください。
デバイス認識の試験にはコントローラを使用してます。

181 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 23:45:40.99 ]
void CMain::TP2(int left_in_x,int up_in_y,int right_in_x,int down_in_y,float *left_x,float *up_y,float *right_x,float *down_y){

*left_x=(1/16*(left_in_x-1));
*up_y=(1/16*(up_in_y-1));
*right_x=(1/16*right_in_x);
*down_y=(1/16*down_in_y);
}


float
Tx_Left_X,
Tx_Right_X,
Tx_Up_Y,
Tx_Down_Y;

TP2(1,1,1,1,&Tx_Left_X,&Tx_Up_Y,&Tx_Right_X,&Tx_Down_Y);

うまく数字が変わらないんです
ホントはTP2関数を使ったら
Tx_Left_Xとかの値が変わってるはずなんですが…

182 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 01:16:16.28 ]
とりあえず
1.0f/16.0f
こんな感じにしてみるとか・・・w

183 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 02:28:40.61 ]
だね。/も*も左から結合されていくから1/16が整数演算でゼロになっているという話。

184 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 06:25:21.80 ]
>>180
実行中に接続されたコントローラーを認識したいというのでもなければ
FindDeviceじゃなくてEnumDevices使えば?

185 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:06:35.61 ]
>>182-183
ありがとうございました
レスした後にこれは文法の問題だと気づきました
DirectX関係無いですよね、スレチですすみません

186 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 16:02:18.48 ]
HRESULT Render() {
if(SUCCEEDED(d3ddev->BeginScene())) {
RenderImpl();
if(SUCCEEDED(d3ddev->EndScene())) { return d3ddev->present(0, 0, 0, 0); }
else { ??? }
}}

EndSceneが失敗したらなにをするべきなんでしょうか
これって失敗したまま放置したら永遠にロックされたままになりますよね?

187 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 17:52:41.59 ]
>>186
EndScene呼び出し自体は単にデバイスに状態を通知するだけなので
BeginSceneが適切に呼び出されている限り失敗することはまずないよ。
失敗するのはBeginSceneとEndSceneがきちんと組になってない時くらい。

なので、もしも失敗したのなら、やるべき事はコードパスを見直すことだね。
その時は多分ロックとか以前の問題なので。

188 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 19:16:19.85 ]
>>184
ありがとうございます。
EnumDevicesは初期化時に呼びます。コントロ−ラーがなかった場合や
足りなかった場合に接続されたコントローラーを取得したいので
FindDeviceを使用しようとしてます。

FindDeviceで失敗したコントローラーでもEnumDevicesでなら列挙されることは
確認済みですがEnumDevicesは遅いので出来ればFindDeviceを使用したいと思っています。
原因分かる方いらしたらお願いします。



189 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 19:41:49.82 ]
>>187
あざっす
安心しました

190 名前:デフォルトの名無しさん [2011/11/24(木) 17:00:12.86 ]
D3DXVECTOR3    vFace;
DWORD      dwFaceIndex;
VERTEX      *vertex;// 自分で定義した構造体

D3DXIntersect( BenkiMesh, &vRay, &vRayDir, &bHit, &dwFaceIndex, NULL, NULL, &Dist, NULL, NULL
UnkoMesh->LockVertexBuffer(ほにゃららREADONLY, (void**)&vertex );
vFace = vertex[dwFaceIndex].position;
UnkoMesh->UnlockVertexBuffer();


…みたいにして、D3DXIntersectで当たり判定みたいな事して、
LockVertexBufferしてポリゴンのデータを1つだけ取得して、
値を画面に表示させてみたらところどころに「-1.#R」ってのがあるんよ。

これ、一体どうしたら正しい値が入ってくるますか?

191 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 18:00:12.28 ]
交差判定はBenkiMesh上でやってるのにLockVertexBufferで参照しようとしているのが
UnkoMeshなんだが、こりゃ同じメッシュを指してるっつーことでいいのかね。
あとそのコードには書いてないがbHitフラグはちゃんと確認してるか?

192 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 18:29:57.23 ]
あとdwFaceIndexに戻って来るのは頂点インデクスじゃなくて面インデクスなのに
それでVertexBufferを参照しているのもおかしい。

193 名前:デフォルトの名無しさん [2011/11/24(木) 18:32:07.44 ]
交差判定もLockVertexBufferもBenkiMeshに対してでした。
LockVertexBufferは、bHitがTRUEを返した場合に行っています。

書き間違えてたよ。ご指摘、ありがとうね。


>>190投下の後でコードを見直してみたら、
BenkiMesh->OptimizeInplace( D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_VERTEXCACHE, &lpdwAdjacency[0], 0, 0, 0 );
という行があったんだけど、(必要があって書いたコードだったはず。結構前だったから忘れちゃった。)
これが悪さしてるのかな?



194 名前:デフォルトの名無しさん [2011/11/24(木) 18:36:58.87 ]
>>192
言われてみれば…確かにそうですね。
直してきます。
ありがとうございました。


195 名前:デフォルトの名無しさん [2011/11/25(金) 18:24:43.70 ]
プリミティブ描画の時に

196 名前:デフォルトの名無しさん [2011/11/25(金) 18:26:03.87 ]
途中送信したすまん
プリミティブ描画の時にTRIANGLESTRIPにしたらカリングモードに関係なく全部描画されるよね?

197 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 18:58:57.07 ]
全部描画されるの意味が「常にCullMode=None指定するのと同じって事だよね」という意味ならNO。
偶数番目の面のカリング順判定が入れ替わる(CW⇔CCW)だけでカリング自体の適用はLISTの場合と一緒。

198 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 19:23:10.26 ]
なるほどありがとう



199 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 01:54:49.23 ]
>>190です。
こんな感じに変更したら、
何か、うまくいっちゃったので晒していきます。。



D3DXIntersect( BenkiMesh, &vRay, &vRayDir, &bHit, &dwFaceIndex, NULL, NULL, &Dist, NULL, NULL );
if( bHit )
{
  BenkiMesh->GetIndexBuffer( &lpIB );
  BenkiMesh->GetVertexBuffer( &lpVB );
  lpIB->Lock( 0, 0, ( void** )&pIndices, D3DLOCK_READONLY );
  lpVB->Lock( 0, 0, ( void** )&pVertices, D3DLOCK_READONLY );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3]];
  vUnkoPosition[0] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3 + 1]];
  vUnkoPosition[1] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  pfVertices = ( float* )&pVertices[BenkiMesh->GetNumBytesPerVertex() * pIndices[dwFaceIndex * 3 + 2]];
  vUnkoPosition[2] = D3DXVECTOR3( pfVertices[0], pfVertices[1], pfVertices[2] );
  lpVB->Unlock();
  lpIB->Unlock();
  lpIB->Release();
  lpVB->Release();
}


200 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 21:43:09.71 ]
テクスチャ座標の誤差ってどうにかなりませんか?

201 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 21:52:07.65 ]
ちゃんと質問しろ

202 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:14:05.37 ]
ごめん

Direct3D9で頂点バッファを使ってテトラゴンを描画するとき、
2048*2048pxのテクスチャのx, y, w, h = 1344, 96, 48, 48の範囲を貼りつけたいのですが

頂点を
{0.0f, 0.0f, 0.0f},
{0.0f, 48.0f, 0.0f},
{48.0f, 0.0f, 0.0f},
{48.0f, 48.0f, 0.0f}
のように定義して、
テクスチャ座標を
{1344.5f / 2048.0f, 144.5f / 2048},
{1344.5f / 2048.0f, 96.5f / 2048},
{1392.5f / 2048.0f, 144.5f / 2048},
{1392.5f / 2048.0f, 96.5f / 2048}
こうすると元の画像と比べて横方向に広がるのです

www.dotup.org/uploda/www.dotup.org2316033.png
上半分がDirectXの描画で、下半分が画像をビューワで開いたものです

203 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:25:08.54 ]
テクスチャでマップチップを表現するのが難しいってやつだな
フィルタとかかかったりするとサンプリングするとこがまたおかしくなってとなりの奴まで
描画に使っちゃったりして超うまくいかない

っていうかその画像なら1フレームでチップ全部必要になるわけじゃねぇんだから
あきらめて別のテクスチャにしろよ的な

マップチップで描画したいマップに関しては綺麗に表示させたいなら
テクスチャ1枚でなにやらやろうとするのは鬼門かもしれんな
環境や条件を絞った上でやればなんとかなるかもしれんが・・・
PCの設定によってうまくいったりいかなかったり

ま、ハードウェアの苦手なことはするもんじゃないよ(笑)

204 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:31:47.62 ]
データの方に誤差も考えてマージン持たせるんだよ

205 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:32:53.29 ]
>>202
そのコード片だけじゃ頂点とテクスチャのy座標の対応が逆なってるようにしか見えんけど

それと+0.5テクセルずらすんじゃなくて位置座標から-0.5ピクセルずらした方がいい
理由は忘れた

206 名前:202 mailto:sage [2011/11/27(日) 22:54:35.44 ]
>>203
とりあえずフィルタはNONEにしてるのですが
つまり48*48の範囲の正確な描画はDirect3Dでは出来ないのですね

>>204
データというのはテクスチャの事ですか
そうなると厳しいですね……

>>205
特にy座標が逆になってるようにはみえませんが

207 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 22:57:10.93 ]
浮動小数の形式上の誤差はなかなか逃れられんだろう。

208 名前:202 mailto:sage [2011/11/27(日) 23:05:06.31 ]
なかなかと云うからには逃れる方法はあるのですか



209 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 23:05:48.95 ]
>>206
>特にy座標が逆になってるようにはみえませんが

ん? Direct3Dのテクスチャ座標って上から下に向かうよ?
まあ読み込み時に逆なってるなら帳尻は合うのかもしらんけど

210 名前:デフォルトの名無しさん mailto:sage [2011/11/27(日) 23:15:48.04 ]
>>208
実用に足るかは知らないが、誤差のでない数字っていうのが有るのよ。
具体的には、少数点以下のビットの保持方法を把握しないと難しい。
少数点以下の数字をビットシフトすると、1/(2n)になるのは知ってるよね。
情報の教科書とかにかいてあったと思うけど。
そういう数字はごさがほぼでない。でも実用に足るかはしらない。






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

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

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