ページ 11

DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 09:26
by ヤング
はじめまして

DirectX9でゲームのような3Dアクション作ってます。


あるオブジェクトを他のオブジェクトと重なったときに隠れないで常に見える状態に

したいのですがどうすればいいでしょうか?

SetRenderStateを使えばいいのでしょうか?

常に表示優先度を高くして手前に表示させたいオブジェクト(Strideで判断させる)に対して命令をするのか他のオブジェクトにたいして命令するのかもわからないので教えてください。


よろしくおねがいします

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 11:47
by softya(ソフト屋)
DirectX自体の命令に詳しくないことをお断りします。
Z値を無視すればなんとでもなるでしょうが、やりたいことは本当にそんなことなのでしょうか?
※ 壁の向こうのキャラが見る状態?って感じでしょうか。

>あるオブジェクトを他のオブジェクトと重なったときに隠れないで常に見える状態に

この詳しい状況が知りたいです。

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 11:56
by ヤング
返信ありがとうございます。

アイテムを取得すると一定時間 壁が透けて エネミーが見えるということを実装したいと考えてます

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 12:00
by softya(ソフト屋)
ヤング さんが書きました:返信ありがとうございます。

アイテムを取得すると一定時間 壁が透けて エネミーが見えるということを実装したいと考えてます
それだとZ値をただ触っただけでは壁と向こう側の敵の前後関係が分からなくなると思います。
壁を半透明化するとか、敵の周りだけ透けて見るようなエフェクトを掛けるとか必要でしょうね。
どうされる予定でしょうか?

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 12:08
by ヤング
前後関係はわからなくなってしまいますが、壁などのオブジェクトは透過処理はせずに
エネミーだけを最前面に描画したいと考えてます。
よろしくお願いします

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 12:14
by softya(ソフト屋)
ヤング さんが書きました:前後関係はわからなくなってしまいますが、壁などのオブジェクトは透過処理はせずに
エネミーだけを最前面に描画したいと考えてます。
よろしくお願いします
SetRenderStateでZ値のバイアスを掛ければ出来ると思います。 間違いでした。
が、見た目としては止めた方がいいって事だは言っておきますね。

【補足】
Z値バイアスは使ったことがないので勘違いかもしれません。
これでダメならZバッファを一度クリアするって方法があります。

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 18:06
by ヤング
返信ありがとうございます

コード:

		if(Stride == 30){//Strideの値が相手キャラクターのストライドと一致したら以下の処理を行う



		  dDevice->SetRenderState(D3DRS_FOGENABLE,0);
dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);

		dDrawIndexedPrimitive(dDevice, Type, BaseVertexIndex,MinVertexIndex, NumVertices, startIndex, primCount);
dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
		
				
	}

このような感じで自分のやりたいことは実装できている形となりました。
この命令を実行しますと、オブジェクトなどを無視して背面(後方)に隠れている相手キャラが手前に表示されます
しかし 問題が新たに発生してしまい、ある一定のオブジェクトでしか手前に表示されません。

でかい岩と山があるのですが、岩の背面に相手キャラがいる場合は手前に表示されますが、山の場合ですとキャラクターが背面に隠れてしまっている状態のままです。
アドバイスなどなんでもよろしいので返信お待ちしております。

Re: DirectD3D9. 表示優先度

Posted: 2012年9月14日(金) 18:12
by softya(ソフト屋)
これはZバッファの利用を一時的にOFFにしているだけですよね? これは問題があると思います。

1)ZバッファをOFFにするとキャラクタの描画でポリゴンに問題が出るはずです。
2)描画順で重ね合わせの順番が決まるので山などが後で描画されると上書きされます。これは単に描画順の問題です。