5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2010/03/16(火) 00:16:48
※回答する人も、質問する人も必ず読んでください

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

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

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


108 :デフォルトの名無しさん:2010/03/27(土) 02:21:20
>>106
アクティブウインドウがゲームでなくても、邪魔になるようなポップアップは
出すべきじゃないと思う。

109 :デフォルトの名無しさん:2010/03/27(土) 02:37:21
>>104
ハードとプログラムの受け渡しって何がしてると思う?

ドライバによって、同じ古いグラボでも対応する、しない&動く、動かない機能があるが
動作検証って、グラボと各Verのドライバでするわけ?

ドライバ位は最新を前提にしないと、現実的に動作保証なんてしてられないだろ

110 :デフォルトの名無しさん:2010/03/27(土) 04:07:33
>>107
ウィンドウモードだとDirectX経由のアプローチで何かしらの情報を得るのは難しいですかね

>>108
普段は必要とされてるけど、ゲーム中は黙ってて欲しい微妙なバランスの物があるのです
ポップアップはその一例で、ユーザーのプライオリティ変化に自動的に追従できる所はしたいと言う話です

111 :デフォルトの名無しさん:2010/03/27(土) 09:59:02
ついったーくらいあんとですねわかります

112 :デフォルトの名無しさん:2010/03/27(土) 11:45:49
エロゲーをフルスクリーンでプレイしている時にポップアップしてくる
avastには殺意が沸くが、そういうのを目指してると

113 :デフォルトの名無しさん:2010/03/27(土) 11:51:13
カメラでプレイ中のプレイヤーの顔をとって判断すればいいんじゃない

114 :デフォルトの名無しさん:2010/03/27(土) 20:09:31
サーフェイスとレイヤーの違いがわかりません。
どういう不に考えればいいのですか?

115 :デフォルトの名無しさん:2010/03/27(土) 21:02:09
日本語に訳せばわかるだろ

116 :デフォルトの名無しさん:2010/03/27(土) 21:26:21
J-POPのユニットとアニメの格好をする人・・・?

117 :デフォルトの名無しさん:2010/03/27(土) 23:25:28
頂点バッファのリストアについて質問です。
デバイスロストしたら頂点バッファも作り直さないといけないですよね、
その場合もういちどファイルから頂点を読んでいって頂点バッファに書き込みという作業が必要になるんですか?

118 :デフォルトの名無しさん:2010/03/27(土) 23:29:50
>>117
うん

119 :デフォルトの名無しさん:2010/03/27(土) 23:36:24
>>118
ありがとう
めんどくさいからD3DPOOL_MANAGEDで作ります

120 :デフォルトの名無しさん:2010/03/30(火) 00:55:10
int許容値までの高速ftoaって需要ある?
とりあえず貼ってみるけど
ttp://asd.if.land.to/code/common.html#r_ftoa

121 :デフォルトの名無しさん:2010/03/30(火) 16:26:31
>>119
D3DPOOL_MANAGEDが使えるものは全てそれでいい。
俺らが小手先使うより、MSのプログラマが作ったもののほうが優秀だからな


122 :デフォルトの名無しさん:2010/03/30(火) 17:28:10
昨日
http://msdn.microsoft.com/ja-jp/directx/default.aspx
↑でchm形式DirectX SDK(August 2009)のドキュメント日本語版がダウンロード出来るようになったけど
開くといろいろおかしい、左側のパネル部分がキーワード検索しかないうえに、その検索もうまくいってない
これ他の人はどうだろう?

123 :デフォルトの名無しさん:2010/03/30(火) 18:04:22
>>122
俺も同じだ

124 :デフォルトの名無しさん:2010/03/30(火) 21:02:24
>>122
んじゃ俺も同じで

125 :デフォルトの名無しさん:2010/03/30(火) 21:06:16
>>122
ブロック解除ってやったら表示されたわ
ttp://www.nishishi.com/blog/2009/06/chm_help_tips.html

126 :デフォルトの名無しさん:2010/03/30(火) 21:23:44
>>122
俺もブロック解除ってやったら表示されたわ

127 :デフォルトの名無しさん:2010/03/30(火) 22:16:44
お、おれもおれもー

128 :デフォルトの名無しさん:2010/03/30(火) 22:28:28
おれもいれてー

129 :デフォルトの名無しさん:2010/03/30(火) 22:43:34
みんなDXUT使ってる?

130 :デフォルトの名無しさん:2010/03/30(火) 23:13:10
(;´Д`)

131 :デフォルトの名無しさん:2010/03/30(火) 23:15:25
>>125
右のページはブロック解除すれば表示されるけど、
左側は>>122の言うとおりキーワード検索(機能しない)しか出なくない?

132 :122:2010/03/31(水) 00:27:14
>>131
そうなんだ、今までのDirectX SDKのマニュアルでは、左側は目次と検索、キーワードなんかがあったけど
今回のは検索しかない、しかも機能がちゃんと動いていない。
検索すると、検索結果に「無題」(たぶん検索語句が含まれるページのタイトル)がいくつかリストアップされる
だけどそのページに移動出来ない。

133 :デフォルトの名無しさん:2010/03/31(水) 00:28:26
>>132
まあどうでもいいけどね

134 :デフォルトの名無しさん:2010/03/31(水) 00:38:44
川西さん頑張って!!!

135 :デフォルトの名無しさん:2010/03/31(水) 01:36:43
ちょっとわからないので質問させてもらいます。
今スロットゲーム的なものを作ってる途中なのですが
流れとしては

『ランダムにスロットに画像表示

キーが押されたら画像がそろっているかの確認処理

そろっていたらその画像に応じて所持コイン増加

はずれだとコイン1枚減少』

のようにしているのですが
コインの増減処理のとき
なぜか2回処理されて(コイン1枚減少が2回行われる
しまいます。
WaitTimerが関連してるような気がして調べてみたものの
わかりません。

↓ソースです。初心者なので汚かったりするかとおもいます
http://uproda.2ch-library.com/lib231205.zip.shtml

136 :デフォルトの名無しさん:2010/03/31(水) 02:02:19
コインを0.5枚減らすようにすればいいのさ

137 :デフォルトの名無しさん:2010/03/31(水) 02:07:15
L88のcountを立てる為の条件式は
キーが押されている限りtrueになる。
trueのフローの中にコイン減処理が入っているから、
キーが押されている限り、コインが減っていくんじゃないの?

138 :デフォルトの名無しさん:2010/03/31(水) 02:31:13
L88のelse文を
f(key & PAD_INPUT_A){
count = 1;
if(ghandle[basyo[0]] == ghandle[basyo[1]] && ghandle[basyo[1]] == ghandle[basyo[2]] ){
hantei = 1;
switch(basyo[0]){
case 0: getc = 50; break;
case 1: getc = 40; break;
default: getc = 10; break;
}
}else{
c = 1;
}
}
if(c == 1)coin = coin-1;
c = 0;
にしてみましたが結果変わらないです
WaitTimer中もキー入力は受け付けるみたいです。
別の方法を考えています

139 :デフォルトの名無しさん:2010/03/31(水) 03:41:31
まぁ、そのなんだ。その質問は完全にスレ違いだ。

DxLibはDxLibであって、DirectXではない。
gamedevに「DXライブラリ総合スレッド」ってのがあるから、
そっちでも行ってくれ。

140 :デフォルトの名無しさん:2010/03/31(水) 09:19:32
つーかロジックの問題だろ

141 :デフォルトの名無しさん:2010/03/31(水) 11:24:18
>>138
そりゃ、その変更じゃ何も変わっていないんだから
結果も当然変わらん。
whileループ1回目でL45のkeyに値が入ってから、
whileループ2回目で改めてkeyに値を入れるまでの時間は殆ど同じだ。
それが原因。対応法としてはL45をL87に移動することだが、
もっと根本的にコードを見直した方が良いと思う。
以上スレチ失礼。

142 :デフォルトの名無しさん:2010/03/31(水) 23:00:32
アルファチャンネルのある画像Aから画像Bにフェードインさせたいのですが、どうすればいいのでしょうか?
アルファチャンネルが無い画像(四角い画像)なら、BをAの上に頂点色も適用しつつ上書き描画すればいいだけなんですが。
Aをアルファ25%、Bをアルファ75%にすればいいやと最初思いましたが、
それだと背景の色が出てしまい出来ないことに気づきました・・。

シェーダーを使うと古いビデオカードでは動きませんし、テクスチャの内容を書き換えるのも重いようなので避けたいです。
800x600の画像を1024x512のテクスチャの左上に置いているのですが、1fpsになってしまいます。

143 :デフォルトの名無しさん:2010/03/31(水) 23:10:28
>>142
ttp://platz.jp/~moal/tblend.html
ここで書いてあることとは別なのかな。
基本的に1枚は不透明で描画しておき、フェードイン/アウトを行うものをその上で描画させる。
別にアルファ云々は関係ないはずなんだけど。

144 :デフォルトの名無しさん:2010/03/31(水) 23:19:44
シェーダも使えないような古いグラボの人は、PCでゲームを買って遊ぶ習慣のない人であり、
顧客になりそうもない人。商売なら相手にする価値が無い。

たぶん趣味の自作ライブラリを鍛えたいという用途だと思うが、だったら
全部ソフトウェアで処理すればいいと思うよ。いまどきのCPUなら
エロゲーの凝ったフェードイン・アウトくらいできちゃうよ。

145 :142:2010/03/31(水) 23:20:25
>>143
全く同じ形状をしている画像同士なら、それで出来ると思います。
そうではなく、2枚の画像は異なった形状をしていて、
「画像Aをフェードアウトさせつつ画像Bをフェードイン」させたいんです。

146 :146:2010/03/31(水) 23:29:42
>>144
すいません、レスついてたの気がつきませんでした。

じゃあシェーダーを使って処理するようにしようと思います。
よく考えたら、
自作ライブラリではなくオープンソースのを少し改変して使ってるので
他にOpenGLとソフトウェアのレンダリングエンジンがありました。
スペック低いPCの場合はそっち使ってもらえばいいですね。

RTTが使えるなら
常にレンダーターゲットのテクスチャに画面描画を行っておいて、
それをもとにフェードインすればいいかもしれません。
(でもそこまでしないで素直にシェーダー使った方が楽か)

147 :デフォルトの名無しさん:2010/03/31(水) 23:32:39

フェードインアウトしている間、画像Aのα+画像Bのα=1を維持して
下の背景を透けさせないようにしたいのか?

148 :142:2010/03/31(水) 23:35:49
>>147
その通りなんですが、何かいい方法があるんでしょうか

149 :デフォルトの名無しさん:2010/03/31(水) 23:38:58
Direct3Dを使ったエロゲで、目パチ口パクでアニメがフェードしながら切り替わってるだろ。
あれはテクスチャをロックして、直接書き換えてるんだが。
その方が2枚のテクスチャを重ねて頑張ろうとするより簡単。

150 :デフォルトの名無しさん:2010/03/31(水) 23:39:33
>>148
片方のアルファ値の減少量を
もう片方の画像の増加量にする

151 :デフォルトの名無しさん:2010/03/31(水) 23:43:55
画像Aと画像Bをマルチテクスチャブレンディングで合成すりゃいいんでないか?

152 :デフォルトの名無しさん:2010/03/31(水) 23:45:02
よくよく考えてみると>>142は結構難しい問題かもな

153 :デフォルトの名無しさん:2010/03/31(水) 23:51:35
つーかロジックの問題だろ

154 :デフォルトの名無しさん:2010/03/31(水) 23:54:06
何をしたいのかよくわからんが
>>150 で出来るだろ

155 :デフォルトの名無しさん:2010/04/01(木) 00:03:33
馬鹿は黙っててください

156 :デフォルトの名無しさん:2010/04/01(木) 00:59:05
>>154
よくわからないのなら、静観していなさい
よいですね?

157 :デフォルトの名無しさん:2010/04/01(木) 01:01:24
もしかしてマルチテクスチャで出来る?
ステージ0
左 D3DTA_DIFFUSE
右 D3DTA_TEXTURE
COLOR D3DTOP_MODULATE
ALPHA D3DTOP_MODULATE

ステージ1
左 D3DTA_TEXTURE
右 D3DTA_CURRENT
COLOR D3DTOP_BLENDTEXTUREALPHA
ALPHA D3DTOP_BLENDTEXTUREALPHA


158 :デフォルトの名無しさん:2010/04/01(木) 01:02:00
うん

159 :デフォルトの名無しさん:2010/04/01(木) 01:55:12
142は
たとえば、テクスチャABで同じ色の場所の場合
ブレンド値が変化しても
A*a + B*(1-a) = A(=B)
になるようにしたいんでは?

それだと157だとできなくない?
シェーダー使うかロックするしかないのでは?


160 :デフォルトの名無しさん:2010/04/01(木) 02:16:06
>>142の「背景の色が出てしまい」ってところがキモだな。

勝手に意訳すると、AとBはそれぞれ異なる形状でアルファ抜きされているが、
AとBが両方とも不透明な領域ではAからBへのブレンド中に背景を一切透過させたくない、
という要望のようだ。

これは少々トリッキーな処理が必要な気がする。

161 :デフォルトの名無しさん:2010/04/01(木) 07:55:00
>>160
そもそも何をやりたいのかがいまいち分からん

単純に背景透過させたくないなら、背景の描画を最後にするって方法もある

162 :デフォルトの名無しさん:2010/04/01(木) 08:04:21
テクスチャのフォーマット変えたり、マスク用意したり、
アルファテスト、ステンシルテストとかでどうにかできないのかな

使用してる画像や書いたコードどんなんだろ

163 :デフォルトの名無しさん:2010/04/01(木) 08:51:35
別の形状をしているものの
重なってる部分の背景を出したくないとして
じゃあ、重なって無い部分はどいうしたいんだ?
背景が透けてていいのか?

164 :デフォルトの名無しさん:2010/04/01(木) 08:54:50
背景の見えないフェードっつーのがさっぱり理解不能なんだが
裏が透けないフェードなんて存在し得ないだろ

つーかフェード中にABが重なる部分の背景を白抜きすりゃいいだけの話だろ
難しく考えすぎなんだよ

165 :デフォルトの名無しさん:2010/04/01(木) 08:57:56
>>163
そこは透けていいんじゃないかね。
重なってない部分はブレンド値の変化とともに「A→背景」または「背景→B」と変化し、
重なっている部分だけは背景を混入させずに「A→B」と変化させたいのではなかろうか。

166 :デフォルトの名無しさん:2010/04/01(木) 09:42:58
片方の画像が不透明なら不透明画像を後からブレンドすればいいんでない?
完全に正しい結果が欲しいならシェーダー使うしかない希ガス

167 :デフォルトの名無しさん:2010/04/01(木) 09:46:25
ちなみにAとBのαの変化はどこでやってるんだろう?
頂点カラー?
それともロックして書き換えてるんの?
それによっても違うと思うんだが

168 :デフォルトの名無しさん:2010/04/01(木) 13:00:36
シェーダー書けば一発な気がするけど
固定機能で一応考えて見た
AとBで重なる部分は透けない
重ならない部分は透けると仮定して

合成用のテクスチャを用意して
レンダリングターゲットに指定しαを0でクリアしておく(重要)
そこに対し
// αとカラーの合成方法を分離する
SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, TRUE);

SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ZERO);//α値は書き込まない
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ZERO);
でBの色情報だけを描画しておく。αは0のままなので描画結果は表示されない
(これをしておかないとたぶん最後にBを描画するときにAの抜きカラーがブレンドされてしまうはず)
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ZERO);
でAをα値aで描画する(Aの色情報とα値を上書きする)
最後に
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_ONE);
SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_ONE);
でBをα値1.0-aで描画する
(AとBの色情報をブレンドしBのα値を加算する)

出来あがったテクスチャを通常描画する
で、どうよ?

169 :デフォルトの名無しさん:2010/04/01(木) 14:37:28
本当にシェーダーでやれって感じだな

しかし実際問題重なってる部分は透過させないって必須なのか?
クロスフェードにそんなに何秒もかける訳ないし
実際動かして見たら透けててもそんなに気にならんと思うのだが…
背景の後ろでフレーム外の仕事しててユーザーには見せられないとか?

170 :デフォルトの名無しさん:2010/04/01(木) 16:58:55
本人が>>146でシェーダーでやりますって言ってんだからもういいんじゃね

171 :デフォルトの名無しさん:2010/04/01(木) 17:37:46
ごめんなさいスルーしてました

172 :デフォルトの名無しさん:2010/04/02(金) 01:01:28
スペキュラ色付けた後にアルファブレンドすると光にまでアルファかかっちゃうんですけど
どうしたらよいでしょうかね、、、

173 :デフォルトの名無しさん:2010/04/02(金) 01:05:08
>>146
- AxorB 領域にAとBをアルファ描画
- AandB 領域にAを不透明描画
- AandB 領域にBをアルファ描画
かしら。
マスク処理はステンシルか、Zバッファで代用ね。

174 :デフォルトの名無しさん:2010/04/02(金) 01:17:13
>>146
シェーダーでやる方法って具体的にどうやるんですか?
気になります
わかる方いれば教えてください


175 :デフォルトの名無しさん:2010/04/02(金) 01:56:29
それは四則演算がどうたらこうたらのレベルになるんじゃないか?

176 :デフォルトの名無しさん:2010/04/02(金) 08:14:56
>>174
AのテクスチャとBのテクスチャの両方のアルファ値が0.0より大きい場合にアルファ値の出力を1.0にするだけ。
あとは普通に合成しちゃえばいい。

177 :デフォルトの名無しさん:2010/04/02(金) 13:13:38
ふと思ったが、AとBのポリゴン(四角形)自体はまったく同一なのだろうか。
>>142にはそういう条件は書かれていないが。

ポリゴンが一致してるなら、シェーダで2つのテクスチャに同時にアクセスして
>>176のような感じで処理すればできそうだね。
AとBのテクスチャ素材のアルファ抜きにアンチエイリアスが入っていたりする場合は
もう少しロジックを工夫する必要がありそうだけど。

178 :デフォルトの名無しさん:2010/04/02(金) 13:48:46
>>177
>>145

179 :デフォルトの名無しさん:2010/04/02(金) 13:51:53
>>178
>>145はアルファ抜きの形状が異なるって意味じゃないの?
ポリゴンの頂点位置まで異なるとは言っていない気がする。

180 :デフォルトの名無しさん:2010/04/02(金) 13:57:45
もういいじゃん
本人いないんだし

181 :デフォルトの名無しさん:2010/04/02(金) 14:15:39
固定機能にしろシェーダーにしろ
合成用のレンダリングターゲットは必須じゃね?
そこを省こうとするから面倒なだけで

182 :デフォルトの名無しさん:2010/04/02(金) 14:23:43
142帰ってきて!!!!!

183 :デフォルトの名無しさん:2010/04/02(金) 17:01:48
DirectX11で質問です。
DXGIの機能、Alt+Enterで画面のモードの切り替え(フルスクリーン⇔ウィンドウ)を使いたいのですが、うまくいきません。
なぜか、一瞬だけ切り替わってすぐに戻ってしまいます。
全自動でバッファサイズの調整、ウィンドウの変更などをやってくれると思っていたのですが、自分でも変更しなければならない部分があるのでしょうか?
もしくは、開発環境の問題ですか?
わかる方、よろしくお願いします。

ソースコード(一部)
/* 省略 */
SwapChainDesc.Flags=DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
/* 省略 */
result=D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, pD3DFeatureLevel, 6, D3D11_SDK_VERSION, &SwapChainDesc, &g_pSwapChain, &g_pD3DDevice, &D3DFeatureLevel, &g_pD3DDeviceContext);
if(FAILED(result)){ /* エラー処理 */ }
/* 省略 */
result=CreateDXGIFactory((const IID){0x7b7166ec, 0x21c7, 0x44ae, {0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69}}/* IID_IDXGIFactory */, (LPVOID *)(&pFactory));
if(FAILED(result)){ /* エラー処理 */ }
result=pFactory->MakeWindowAssociation(hWnd, 0);
if(FAILED(result)){ /* エラー処理 */ }

開発環境
OS Windows Vista
コンパイラ gcc


184 :デフォルトの名無しさん:2010/04/02(金) 20:00:07
16進数の羅列で考える気が失せた

185 :デフォルトの名無しさん:2010/04/03(土) 14:35:35
>>183
Windowsに強く依存するDirectX開発でgccを使うなんてマゾとしか思えん。
ただで済ませたいならVisual Studio 2008 Express Editionに必要なSDKを加えて開発するのが正道。
ソースコードが間違っているのか開発環境に誤りがあるのか判断ができないのでは答えようがない。

186 :デフォルトの名無しさん:2010/04/03(土) 18:28:35
183です。アク禁の巻き添え食らったので、代行してもらってます。

とりあえず、画面の切り替えに成功したので(たまに失敗するけど)報告
WndProcでAlt+Enterを拾って、
BOOL state;
g_pSwapChain->GetFullscreenState(&state, NULL);
g_pSwapChain->SetFullscreenState(!state, NULL);
return 0;
を実行したらうまくいった。
たまに失敗するのは、これはたぶんDXGIの画面切り替えが始まってから
一定時間内にstateの変更を実行できなかったときだと思う。


187 :デフォルトの名無しさん:2010/04/03(土) 18:38:12
>>186
DX11ではなくDX9の話だが、
Firefox3.6以降が別に起動している時にフルスクリーン表示に切り替えようとすると失敗する場合があるな。
フルスクリーン表示へのリセットに失敗するのではなく、
そのすぐ後にアプリケーションのフォーカスが失われてしまう。

Firefoxを閉じるとすぐになおる。

188 :デフォルトの名無しさん:2010/04/03(土) 23:41:34
Xファイルを読み込んでdrawsubsetで描画すると、メッシュが表示されるべき形の部分が
完全な真っ白になってしまいます。

テスト的な描画なのでD3DRS_LIGHTINGはFALSEにしてあります。
ライトはまだ設定していません。
メッシュのマテリアル情報もデバッガで覗きましたが、セットしているD3DMATERIAL9構造体の
中身は
Diffuse(0.8 0.61 0.57 1)
Ambient(0 0 0 1)
Specular(0 0 0 1)
Emisive(0 0 0 1)
Power 5
でテクスチャはありません。
ライトは無いけどライティングをFalseに指定しているし、マテリアルに設定した色ではなく、
真っ白になってしまうのが納得いきません。何故真っ白になるのでしょうか?

189 :デフォルトの名無しさん:2010/04/04(日) 00:24:40
>>188
とりあえずサンプルのMeshesの
Tiger.xと差し替えてみて表示されるかどうか確かめて見たら?


前に似たような質問で
マテリアルカラーじゃなくて
頂点カラーが頂点フォーマットに含まれててそっちと乗算されてたとかあったな

190 :デフォルトの名無しさん:2010/04/04(日) 00:35:56
>>188
それじゃあ、Xファイルに問題があるのか
プログラムに問題があるのか分からないから
xファイルかソースをうp

191 :デフォルトの名無しさん:2010/04/04(日) 00:46:43
>>189
Tigerを表示してみたところ、全く正常に表示されました・・・
が、そもそもTigerはテクスチャを張っているので、マテリアルカラーは関係ないような気がしますが、
一応表示処理はマテリアルカラーを除けば正常だと思います。

>>190
すいません。エロエロなのでアップ出来ません。

192 :デフォルトの名無しさん:2010/04/04(日) 00:56:42
乳首等をカットしてうpしてください

193 :デフォルトの名無しさん:2010/04/04(日) 01:02:05
>>191
じゃなくて
Meshesの方で問題のXファイルを表示してみたら、というハナシ

194 :デフォルトの名無しさん:2010/04/04(日) 01:26:33
>>193
試してみました。ちゃんと肌色や黒やピンクで表示されています。

195 :188:2010/04/04(日) 01:59:28
解決しました。

D3DRS_LIGHTINGをFALSEにしていた部分をコメントアウトし、
D3DRS_AMBIENTを0xffffffffにしたらサンプルと同じ表示になりました。

D3DRS_LIGHTINGをFALSEにした状態でD3DRS_AMBIENTをいじらなくても、
直接頂点を頂点バッファに入れてDrawIndexedPrimitiveする時には正常に頂点色で表示されていたので、
同じ感覚でやれるはずだと思い込んでいました。

メッシュのdrawsubsetだけは仕様が違うということでしょうか?

196 :デフォルトの名無しさん:2010/04/04(日) 02:00:35
D3DRS_LIGHTINGを切ったら真っ白になるのは当然じゃ?
ライトをセットしないのとライティングを切るのはまったく違うことだぞ

197 :デフォルトの名無しさん:2010/04/04(日) 02:06:51
>>195
頂点カラーとマテリアルカラーはまったく違う
頂点カラーはその名の通り頂点の色
マテリアルカラーは光を何色で反射するかの設定

xファイルの場合
頂点カラーがデータに含まれてない場合
デフォルトの頂点色0xffffffffで動作するので
ライト切ったら白のまま

198 :デフォルトの名無しさん:2010/04/04(日) 02:11:20
>>195
まー使えるAPIがそろってるD3DXもD3DXMesh系だけは自作するって話をよく聞くからなぁ。

とりあえずPIX for WindowsでD3DXMeshの挙動を調べることをおすすめする。

199 :188:2010/04/04(日) 02:15:14
>>197
分かりやすい説明有難うございます。納得しました。

>>196
>>198
色々なアドバイス有難うございました。
PIX for Windowsについてもググってみます。

200 :デフォルトの名無しさん:2010/04/04(日) 07:56:18
よりスケベな絵になるようがんばってくれ!

201 :デフォルトの名無しさん:2010/04/05(月) 16:31:53
質問です。
自分はC/C++でWin32APIを使ったコーディングはそこそこ慣れていて
たまに自分用のソフトを作ったりもするのですがDirectXはまったく初めてです。

とりあえず書籍やググって見つかるサイトなどを参考にテストコードを書いてみたのですが、
BeginScene がFAILEDになってしまい、描画処理が開始出来ません。

この BeginScene、失敗する条件ってなんなんでしょうか。よろしくお願い致します。
環境:WinXPSP3、DirectXSDK Ver9.0c



202 :デフォルトの名無しさん:2010/04/05(月) 16:37:45
EndSceneを呼ぶ前にBeginSceneを再コールしたとかでもないかぎり失敗はしないと思うが…

203 :デフォルトの名無しさん:2010/04/05(月) 16:37:54
>>201
device->Present(...)との対応ができていないというのが考えられる。
それから、DirectX初心者ならいきなりコードを書き始めない方がいいよ。
DirectX SDKにサンプルが山ほどあるので、
とりあえず簡単そうなものからビルドして動かして眺めてみるといい。

204 :デフォルトの名無しさん:2010/04/05(月) 16:41:48
超凡ミスの予感
ソースうp

205 :デフォルトの名無しさん:2010/04/05(月) 18:37:45
初心者にありがちで
勝手に失敗箇所をBeginSceneに限定ちゃってるだけで
実は全然違うところでミスしてそう

206 :デフォルトの名無しさん:2010/04/05(月) 18:47:06
まずDeviceがちゃんと作れてるかが気になるなぁ。


207 :201:2010/04/05(月) 21:13:06
いま帰宅しました。そしていきなり解決しました。
すみません、お察しの通り超凡ミスでした・・・ww

原因は、ウィンドプロシージャ内、WM_SIZE で IDirect3DDevice9 の Reset を実行し、
さらにそこで InvalidateRect 。レンダ処理を WM_PAINT においていた為でした。 ※実行順序
お騒がせしました。

>>205
いえ BeginSceneの結果がFAILEDになっていた事は確認済みで、その理由が不明だったのです。
最初、WM_PAINT にレンダ処理を置いていたのも重ねてミスでした。※現状はメインループ内に移動

お騒がせしました。


270 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)