ページ 11

雲が手前に

Posted: 2012年9月15日(土) 21:01
by ヒューガ
雲などの半透明な物がどうやっても自機の手前に来てしまいます。
描画順を並び替えても自機の手前に映るかどこにも映らないかのどっちかになります。
どうすればいいでしょうか?

Re: 雲が手前に

Posted: 2012年9月15日(土) 21:32
by softya(ソフト屋)
どうやって描画しているか分からないと答え様がありませんよ。
その半透明な雲はどうやって自機との前後関係を管理しているのでしょうか?

Re: 雲が手前に

Posted: 2012年9月15日(土) 21:57
by ヒューガ

コード:

void render_my(){
	MV1SetPosition(my.model,my.xyz);
	MV1SetRotationZYAxis(my.model,my.AxisZ,my.AxisY,0.0f);
	MV1DrawModel(my.model);
}
void render_cloud(){
	for(int i=0;i<CLOUD_MAX;i++){
		if(cloud[i].f==1){
			DrawBillboard3D(cloud[i].xyz,0.5f,0.5f,cloud[i].r,cloud[i].a,effectimg.cloudimg,TRUE);
		}
	}
}
void render_main(){
	render_my();
	render_cloud();
}
こんなかんじですね

Re: 雲が手前に

Posted: 2012年9月15日(土) 22:09
by softya(ソフト屋)
半透明をもつ物を描画する場合は、カメラビュー変換後の3D空間上でZ値ソートして奥のものから描画する必要があります。
そうしないとZバッファの働きで半透明の向こうの物体が描画されない場合が出てきます。

「ビュー行列の取得とビュー座標への変換について」
http://hpcgi2.nifty.com/natupaji/bbs/pa ... st&no=1554

Re: 雲が手前に

Posted: 2012年9月19日(水) 21:37
by ヒューガ
別のオブジェクト表示系を並べ替えたら治りました。お騒がせしました