トップページ > 過去ログ > 記事閲覧
ビルボードの左右反転描画
名前:minato 日時: 2010/02/04 03:48

DrawBillboard3D関数を用いての反転描画は可能でしょうか? も現行のDXライブラリで出来ないのでしたら、引数にTurnFlagを追加していただくことは可能でしょうか。ご検討をよろしくお願いいたします。

Page: 1 |

Re: ビルボードの左右反転描画 ( No.1 )
名前:Will 日時:2010/02/04 09:49

extern int DrawBillboard3D( VECTOR Pos, float cx, float cy, float Size, float Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE ) ; // 3D空間上にグラフィックを描画 ヘッダにはTurnFlagが定義されていますよ。 C++の「デフォルト引数」を知らないと気が付かないのかもしれませんが。
Re: ビルボードの左右反転描画 ( No.2 )
名前:minato 日時:2010/02/04 15:20

気がつきませんでした、早速試してみようと思います。ありがとうございました!
Re: ビルボードの左右反転描画 ( No.3 )
名前:minato 日時:2010/02/05 02:14

TurnFlagを1にして試してみたところ、左右反転描画にはならず、時計回りに45度回転させたような表示になってしまいました。 これは仕様なのでしょうか?また、左右判定表示を実現させる方法はありますでしょうか。 度々の質問、申し訳ありませんがどなたか助力をお願いいたします。
Re: ビルボードの左右反転描画 ( No.4 )
名前:いっち 日時:2010/02/05 18:32

他のDraw系関数との兼ね合いから言って"DrawBillboard3D"関数のTurnFlagをTRUEに設定すれば、 画像が左右反転されるのが本来の仕様と思われるので、おそらくバグでは無いかと思います。 ですので、管理人さんの見解をお待ちになるのが良いと思います。 とりあえずのその場しのぎとしては"DrawModiBillboard3D"関数をお使いになってはどうでしょうか? (だだし、拡大やアングルを自前で計算する必要があります) //-- 以下サンプル (Test1.bmpを使用しています)--// int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) < 0 ) return -1; int GrHandle; GrHandle = LoadGraph( "Test1.bmp" ); int x, y; float fx, fy; const float rate = 1.0f; GetGraphSize( GrHandle, &x, &y ); fx = x / 2.0f * rate; fy = y / 2.0f * rate; DrawModiBillboard3D( VGet( 160.0f, 240.0f, 100.0f ), -fx, fy, // 左上 fx, fy, // 右上 fx, -fy, // 右下 -fx, -fy, // 左下 GrHandle, TRUE ); DrawModiBillboard3D( VGet( 480.0f, 240.0f, 100.0f ), fx, fy, // 左上 -fx, fy, // 右上 -fx, -fy, // 右下 fx, -fy, // 左下 GrHandle, TRUE ); WaitKey( ); DxLib_End( ); return 0; }
Re: ビルボードの左右反転描画 ( No.5 )
名前:minato 日時:2010/02/06 00:55

お言葉どおり、管理人さんのレスポンスを待つことにします。 わざわざ代用方まで提示していただいて、本当にありがとうございました!
Re: ビルボードの左右反転描画 ( No.6 )
名前:管理人 日時:2010/02/07 23:57

すいません、TurnFlag を TRUE にした際に45度傾いてしまうバグを修正しました よろしければお使い下さい http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: ビルボードの左右反転描画 ( No.7 )
名前:minato 日時:2010/02/08 01:44

管理人さん、ありがとうございます。 しかし、いただきましたものに差し替えましたところ、TurnFlagをTRUEにするとビルボードが消えてしまうようになってしまいました。 これはバグなのでしょうか?お手数とは思いますが、確認をお願いいたします。
Re: ビルボードの左右反転描画 ( No.8 )
名前:いっち 日時:2010/02/08 01:59

私の環境では問題なく左右反転しました。 (使用したデータは( No.4 )と同じのTest1.bmpです) 再現するようでしたら、ソースとデータをご提供頂けますでしょうか?
Re: ビルボードの左右反転描画 ( No.9 )
名前:minato 日時:2010/02/08 09:08

LoadDivGraphで64*64に分割した画像を表示しています。 DrawBillboard3D( VGet( 0.0f, 0.0f 0.0f ), 0.0f, 1.0f, 64.0f, 0.0f, img[0], TRUE ); の場合は表示されるのですが、 DrawBillboard3D( VGet( 0.0f, 0.0f 0.0f ), 0.0f, 1.0f, 64.0f, 0.0f, img[0], TRUE, TRUE ); 表示が消えてしまうといった状態です。 いっちさんの環境では問題ないとのことですが、カメラのプロジェクションも関係があるのでしょうか? こちらの環境では、 SetupCamera_Perspective( 1150.0f ); SetCameraNearFar( 1.0f, 16000.0f ); SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 0.0f, -1600.0f ), VGet( 0.0f, 0.0f, 0.0f ) ); を適用しています。
Re: ビルボードの左右反転描画 ( No.10 )
名前:Masao 日時:2010/02/08 09:13

LoadDivGraph は相性が悪いときが多々あります。 対応待ちになるかとおもいます。 LoadGrap を使えばせいじょうに動作するかともいます。 (3DのテクスチャにLoadDivGraph でロードした画像が使えないのも一例です。)
Re: ビルボードの左右反転描画 ( No.11 )
名前:minato 日時:2010/02/10 01:46

なるほど、相性問題があるのですか。 アニメーションさせたい画像があるので分割必須で、LoadGraphではなくLoadDivGraphを使いたいです。 管理人さんの対応を待たせていただきますね。
Re: ビルボードの左右反転描画 ( No.12 )
名前:minato 日時:2010/02/10 15:00

何度もすみません。DerivationGraphを使えばLoadGraphの画像ハンドルに対して分割・アニメーションんの実現が可能だということに気がつきました。 しかし、リアルタイムに(毎フレーム)640*480ほどの大きな画像からアニメーションさせる1枚1枚を切り取る処理を行うことは負荷を考慮すると無理がありますでしょうか?
Re: ビルボードの左右反転描画 ( No.13 )
名前:minato 日時:2010/02/11 16:45

DerivationGraphを用いたところ、やはりこちらでも左右反転表示が行われませんでした(画像が消えてしまいます)。 また、管理人さんから提供してしていただいた修正版を適用すると、画像がジャギるようになってしまいました(補間方式が変更されているのでしょうか?)。
Re: ビルボードの左右反転描画 ( No.14 )
名前:管理人 日時:2010/02/15 00:16

画像が表示されない原因( バックカリング? )となっている箇所に手を加えてみました ( 今まではスクリーン座標を反転していましたが、テクスチャ座標を反転するようにしました ) ジャギについても変化があるかもしれませんので、よろしければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: ビルボードの左右反転描画 ( No.15 )
名前:minato 日時:2010/02/15 23:09

無事に左右反転描画を行うことができました。 素早い対応、ありがとうございました! しかしながら、ジャギについては直っておりません。 現在の公開用バージョン3.01では普通になめらかな表示なのですが…orz ※追記です SetDrawMode( DX_DRAWMODE_BILINEAR ); を適用することで直すことができました。既に修正なさっている可能性はありますが、報告させていただきます。
Re: ビルボードの左右反転描画 ( No.16 )
名前:管理人 日時:2010/02/22 01:16

ジャギについては複雑な計算を行うと最近点補間法( DX_DRAWMODE_NEAREST )ではちょっと 綺麗に表示するのは難しいので、仕様ということにしたいと思います ( ご報告いただきました通り、DX_DRAWMODE_BILINEAR では綺麗に描画できますし・・・ ) あと、DrawBillboard3D のCPU負荷を半分にしてみましたので、もし描画面積の小さい ビルボードを大量に描画するということがありましたら、こちらをお使いになってみて下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |