ページ 11

DXライブラリで3Dモデル表示

Posted: 2012年3月08日(木) 22:22
by Rom
少し前にBlenderというモデリングソフトでバレンタインのチョコレートを作りました

DXライブラリで3Dをやるのに慣れるためにとりあえずそれを表示してみようと思いやってみましたがうまくできませんでした
調べてみたところBlenderとの相性が悪いと言う話も見つかりましたが、一応表示自体はできているのでなんとかお力を貸していただきたい


Blenderで作ったファイルをBlenderで.xにしてエクスポート
DXライブラリ付属のツール「DxLibModelViewer」で見るとすでにおかしい

一応プログラムで実行もしてみましたが相変らずおかしい

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	int ModelHandle ;

	// DXライブラリの初期化
	if( DxLib_Init() < 0 )
	{
		// エラーが発生したら直ちに終了
		return -1 ;
	}

	// 3Dモデルの読み込み
	ModelHandle = MV1LoadModel( "choco_2.x" ) ;

	// 画面に映る位置に3Dモデルを移動
	MV1SetPosition( ModelHandle, VGet( 320.0f, 200.0f, -300.0f ) ) ;
	MV1SetScale( ModelHandle, VGet( 50.0f, 50.0f, 50.0f ) ) ;

	// 3Dモデルの描画
	MV1DrawModel( ModelHandle ) ;

	// キーの入力待ち
	WaitKey() ;

	// DXライブラリの後始末
	DxLib_End() ;

	// ソフトの終了
	return 0 ;
}


あともう一つ
Blenderでモデリングしたものはかなり小さく、DXらいぶらりで見れるようにするには拡大率50倍ぐらいがちょうどいいんですが
3Dを扱ううえではこれは割と普通のことなんですかね


一応目的とする画像(こうなったら成功)というものと現状の画像、.blendファイルを添付します

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月09日(金) 00:12
by softya(ソフト屋)
モデルに関してはDXライブラリの作者さんに対応してもらうのが良いでしょう。

[追記] 3Dソフトには座標の扱いで右手系と左手系と言う種類があります。
Blenderは右手系でZアップ、DirectXは左手系でYアップです。 DXライブラリだとDirectXに属しますので左手系でYアップだと思います。
Blenderのxファイル出力で右手系から左手系に変換する必要があると思います。

「blenderからXファイル - octech」
http://d.hatena.ne.jp/octech/20070424

あとスケールに関しては、カメラなどをちゃんと設定しないと正しいサイズでは表示されません。
DxLibModelViewerだと自動設定されるんで、普通に調度良いサイズで表示されますよね?

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月09日(金) 10:41
by Rom
softyaさんありがとうございます

座標系に関しては大丈夫だと思います(理想.pngが左右反対なのでややこしかったですね)

この質問をしてからもいろいろいじってみたのですがおそらくモデリングの方の問題っぽいので
そっち系をあたってみます

>DxLibModelViewerだと自動設定されるんで、普通に調度良いサイズで表示されますよね?
はい

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月09日(金) 10:46
by softya(ソフト屋)
Rom さんが書きました:softyaさんありがとうございます

座標系に関しては大丈夫だと思います(理想.pngが左右反対なのでややこしかったですね)

この質問をしてからもいろいろいじってみたのですがおそらくモデリングの方の問題っぽいので
そっち系をあたってみます

>DxLibModelViewerだと自動設定されるんで、普通に調度良いサイズで表示されますよね?
はい
右手系と左手系が違うと物体のオモテ面と裏面判定が異常になりますので映像を見るかぎり、その問題が出ている様に感じました。
部分的に面が欠けてますよね。そこは大丈夫なのですか?

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月09日(金) 13:51
by Rom
座標系はきちんとできています
表裏もあってます(文字を書いたテクスチャを使用して確認)

もっと簡素なモデルでも試してみました(添付ファイル)

こちら欠けてる面はありますが描画順がおかしい、というか一番手前の面が見えないような状態になってます

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月09日(金) 18:42
by softya(ソフト屋)
チョコのデータを見ると三角形メッシュと四角形メッシュが混在しています。
うまく表示されないのは四角形メッシュだと思うのですが実験してみてもらえますか?
もし、そうなら全部三角形メッシュに統一すれば上手く表示される気がします。

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月10日(土) 13:53
by Rom
確かにBlenderはxファイルエクスポート時に三角形に変換してくれないからだめだな、みたいな文章を調べている最中に見かけました


やり方が正しいかはわかりませんが全て選択>編集>面>三角形面に変換でやってみましたが
チョコレート・兵士ともに変わらずでした

というかBlenderでの編集時点でビューモードを[テクスチャ]にすると検証画像のようになっているみたいです
つまりDXライブラリ関係なくねっていう

ビューモードが[シェイド]までなら正しく表示されます

Re: DXライブラリで3Dモデル表示

Posted: 2012年3月10日(土) 14:38
by softya(ソフト屋)
それであればテクスチャの貼り方が問題だと思います。
blenderでなんと言うか分かりませんがサーフェイス?情報などを調べてみてください。