トップページ > 過去ログ > 記事閲覧
2Dポリゴンと3Dポリゴン・モデルの共存
名前:NULL 日時: 2010/07/05 23:15

2Dポリゴンで体力や、メニューなどのステータスを表示して 3Dではキャラクタなどを表現したいと思っているのですが、どうやったりいのかわかりません。 2Dポリゴンにアルファ値を持たせつつ、3Dと共存させるにはどうしたらいいでしょうか? ちなみに、カメラを2D用・3D用の二つ用意して描画するという方法を試みましたが、Zバッファの処理などがうまくいきませんでした。

Page: 1 |

Re: 2Dポリゴンと3Dポリゴン・モデルの共存 ( No.1 )
名前:いっち 日時:2010/07/06 19:02

> 2Dポリゴンで体力や、メニューなどのステータスを表示して 2Dポリゴンとはどういった機能を指すのでしょうか?(DrawPrimitive2D?DrawBillboard3D?) > カメラを2D用・3D用の二つ用意して描画するという方法を試みましたが、Zバッファの処理などがうまくいきませんでした。 どのようにうまくいかなかったのでしょうか? ソースなどご提供いただけますと考察しやすいです。
Re: 2Dポリゴンと3Dポリゴン・モデルの共存 ( No.2 )
名前:NULL 日時:2010/07/07 05:04

> いっちさん うまく伝えられなくて申し訳ないです。 カメラを動かしても、ワールド座標に置いていかれずに、 スクリーン上に映り続ける。というものを指しています。 ソース載せます。 ------------------------------------------------ - Draw関数 - C_CAMERA.Draw(); // 3Dカメラ設定 C_PLAYER.Draw(); // プレイヤーモデル描画 C_ENEMY.Draw(); // 敵モデル描画 C_CAMERA_2D.Draw(); // 2Dカメラ設定 C_OBJ.Draw2D(); // 2Dオブジェクト描画 - 2Dカメラ設定 - SetCameraNearFar( m_fNear, m_fFar ); // ( DEFAULT_NEAR, DEFAULT_FAR ) /*--------------------------------- m_vPos : VECTOR型 カメラ視点座標 ( 0.f, 0.f, -500.f ) m_vTarget : VECTOR型 注視点座標 ( 0.f, 0.f, 0.f ) m_vUp : VECTOR型 アップベクトル ( 0.f, 1.f, 0.f ) ---------------------------------*/ SetCameraPositionAndTargetAndUpVec( m_vPos, m_vTarget, m_vUp ); - 2Dポリゴン描画 - MATRIX Matrix; VERTEX3D TmpVec[4]; VECTOR vTmpPos3D; // スクリーン座標をワールド座標へ変換 vTmpPos3D = ConvScreenPosToWorldPos( m_vPos ); // 行列変換 Matrix = MGetIdent(); Matrix = MMult( Matrix , MGetScale( m_vScale ) ); Matrix = MMult( Matrix , MGetRotX( m_vRot.x * PHI_F / 180.f) ); Matrix = MMult( Matrix , MGetRotY( m_vRot.y * PHI_F / 180.f) ); Matrix = MMult( Matrix , MGetRotZ( m_vRot.z * PHI_F / 180.f) ); Matrix = MMult( Matrix , MGetTranslate( vTmpPos3D ) ); for( int i = 0 ; i < 4 ; i ++ ) { TmpVec[i] = m_Vertex[i]; TmpVec[i].pos = VTransform( m_Vertex[i].pos , Matrix ); TmpVec[i].dif = GetColorU8( m_Color.r , m_Color.g , m_Color.b , m_Color.a ); } DrawPolygonIndexed3D( TmpVec , 4 , m_Index , 2 , m_nGrHandle , TRUE ); ------------------------------------------------ 以上が原因と思っている部分のソースです。 「スクリーン座標をワールド座標へ変換」 というところでおかしくなっていると思い、これを消しました。 一見うまく言っているように見えるのですが、画像のサイズなどが小さくたっていたりで、 思った通りになりませんでした。 描画はDrawPolygonIndexed3Dです。 α値を唯一使える。と思い、使っています。 ・DrawPrimitive2D ・DrawBillboard3D でもα値を扱えるのでしょうか? そもそも「DrawPrimitive2D」というのをはじめて知りました。
Re: 2Dポリゴンと3Dポリゴン・モデルの共存 ( No.3 )
名前:いっち 日時:2010/07/08 00:30

NULLさんのなさりたいことを掴みきれてないような気がするのですが、 とりあえずこんな感じなのではないかというものを作ってみました。 カメラを移動させてモデルを描画した上に、スクリーン座標固定のポリゴンを描画しています。 > ttp://www1.axfc.net/uploader/Sc/so/131555.zip&key=dxlib
Re: 2Dポリゴンと3Dポリゴン・モデルの共存 ( No.4 )
名前:NULL 日時:2010/07/08 14:17

いっちさんのプログラムを見ました。 悩んでいた問題が解決しそうな気がします。 プログラムを参考にしながらいろいろと自分なりに試してみたいと思います。 本当にありがとうございました。
Re: 2Dポリゴンと3Dポリゴン・モデルの共存 ( No.5 )
名前:管理人 日時:2010/07/11 14:06

もし2Dのものを描画する前にZバッファだけクリアできれば期待する結果が得られるということでしたら 最新のバージョンには ClearDrawScreenZBuffer というZバッファだけをリセットする関数がありますので よろしければこちらをお使いになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) // 画面のZバッファの状態を初期化する int ClearDrawScreenZBuffer( void ) ; 使い方は ClearDrawScreen と同じでクリアしたいタイミングで ClearDrawScreenZBuffer を実行するだけです 3Dのものを描画し終わり、2D( 常に画面に映っているもの )を描画する前にこの関数を呼ぶようにしてみてください

Page: 1 |