図0024a
| 系列 | Simple系 | Basic系 | シャドウマップ |
|---|---|---|---|
| コンスタントバッファ | SimpleConstants構造体 | BasicConstants構造体 | ShadowConstants構造体 |
| 描画データ(親) | DrawObjectBase構造体 | なし | |
| 描画データ(派生) | SimpleDrawObject構造体 | BcDrawObject構造体 | ShadowmapObject構造体 |
| 描画オブジェクト(親) | SimpleRendererクラス | BcRendererクラス | なし |
| 描画オブジェクト(PCTStatic) | SimplePCTStaticRendererクラス | なし | なし |
| 描画オブジェクト(PNTStatic) シャドウマップ無し |
SimplePNTStaticRendererクラス | BcPNTStaticRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTStatic) シャドウマップあり |
SimplePNTStaticRenderer2クラス | BcPNTStaticRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTStaticModel) シャドウマップ無し |
SimplePNTStaticModelRendererクラス | BcPNTStaticModelRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTStaticModel) シャドウマップあり |
SimplePNTStaticModelRenderer2クラス | BcPNTStaticModelRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTBone) シャドウマップ無し |
SimplePNTBoneModelRendererクラス | BcPNTBoneModelRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTBone) シャドウマップあり |
SimplePNTBoneModelRenderer2クラス | BcPNTBoneModelRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTnTStatic) | なし | BcPNTnTStaticRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTnTStaticModel) | なし | BcPNTnTStaticModelRendererクラス | ShadowmapRendererクラス |
| 描画オブジェクト(PNTnTBoneModel) | なし | BcPNTnTBoneModelRendererクラス | ShadowmapRendererクラス |
図0024b
この2つのゲームオブジェクトはStaticCharaクラスですCharacter.h/cppに記述があります。以下がヘッダ部です。
//--------------------------------------------------------------------------------------
/// Staticキャラ
//--------------------------------------------------------------------------------------
class StaticChara : public GameObject {
Vec3 m_Scale; ///<スケーリング
Quat m_Qt; ///<回転
Vec3 m_Pos; ///<位置
Mat4x4 m_MeshToTransformMatrix;
bool m_OwnShadowActive;
//描画データ
shared_ptr<SimpleDrawObject> m_PtrObj;
//描画オブジェクト(weak_ptr)
weak_ptr<SimplePNTStaticModelRenderer2> m_Renderer;
//シャドウマップ用描画データ
shared_ptr<ShadowmapObject> m_PtrShadowmapObj;
//シャドウマップ描画オブジェクト(weak_ptr)
weak_ptr<ShadowmapRenderer> m_ShadowmapRenderer;
public:
//--------------------------------------------------------------------------------------
/*!
@brief コンストラクタ
@param[in] StagePtr ステージのポインタ
@param[in] StartPos 位置
@param[in] OwnShadowActive 影描画するかどうか
*/
//--------------------------------------------------------------------------------------
StaticChara(const shared_ptr<Stage>& StagePtr, const Vec3& StartPos,bool OwnShadowActive);
//--------------------------------------------------------------------------------------
/*!
@brief デストラクタ
*/
//--------------------------------------------------------------------------------------
virtual ~StaticChara();
//--------------------------------------------------------------------------------------
/*!
@brief 初期化
@return なし
*/
//--------------------------------------------------------------------------------------
virtual void OnCreate() override;
//--------------------------------------------------------------------------------------
/*!
@brief 更新
@return なし
*/
//--------------------------------------------------------------------------------------
virtual void OnUpdate()override;
//--------------------------------------------------------------------------------------
/*!
@brief シャドウマップの描画処理(仮想関数)
@return なし
*/
//--------------------------------------------------------------------------------------
virtual void OnDrawShadowmap() override;
//--------------------------------------------------------------------------------------
/*!
@brief 描画
@return なし
*/
//--------------------------------------------------------------------------------------
virtual void OnDraw()override;
};
void StaticChara::OnCreate() {
//Rigidbodyの初期化
auto PtrGameStage = GetStage<GameStage>();
Rigidbody body;
body.m_Owner = GetThis<GameObject>();
body.m_Mass = 1.0f;
body.m_Scale = m_Scale;
body.m_Quat = m_Qt;
body.m_Pos = m_Pos;
body.m_CollType = CollType::typeCAPSULE;
body.m_IsFixed = true;
// body.m_IsDrawActive = true;
body.SetToBefore();
PtrGameStage->AddRigidbody(body);
//メッシュとトランスフォームの差分の設定
m_MeshToTransformMatrix.affineTransformation(
Vec3(1.0f, 1.0f, 1.0f),
Vec3(0.0f, 0.0f, 0.0f),
Vec3(0.0f, 0.0f, 0.0f),
Vec3(0.0f, -1.0f, 0.0f)
);
//行列の定義
Mat4x4 World;
World.affineTransformation(
m_Scale,
Vec3(0, 0, 0),
m_Qt,
m_Pos
);
//差分を計算
World = m_MeshToTransformMatrix * World;
//メッシュ
auto MeshPtr = App::GetApp()->GetResource<MeshResource>(L"MODEL_MESH");
//描画データの構築
m_PtrObj = make_shared<SimpleDrawObject>();
m_PtrObj->m_MeshRes = MeshPtr;
//アフィン変換
m_PtrObj->m_WorldMatrix = World;
m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera();
m_PtrObj->m_UsedModelColor = false;
m_PtrObj->m_UsedModelTextre = true;
m_PtrObj->m_OwnShadowmapActive = m_OwnShadowActive;
m_PtrObj->m_ShadowmapUse = true;
//シャドウマップ描画データの構築
m_PtrShadowmapObj = make_shared<ShadowmapObject>();
m_PtrShadowmapObj->m_MeshRes = MeshPtr;
//描画データの行列をコピー
m_PtrShadowmapObj->m_WorldMatrix = World;
m_PtrShadowmapObj->m_Camera = GetStage<Stage>()->GetCamera();
}
、
body.m_IsDrawActive = true;
、
void StaticChara::OnDrawShadowmap() {
m_PtrShadowmapObj->m_Camera = GetStage<Stage>()->GetCamera();
auto shptr = m_ShadowmapRenderer.lock();
if (!shptr) {
shptr =
GetStage<Stage>()->FindTagGameObject<ShadowmapRenderer>(L"ShadowmapRenderer");
m_ShadowmapRenderer = shptr;
}
shptr->AddDrawObject(m_PtrShadowmapObj);
}
void StaticChara::OnDraw() {
m_PtrObj->m_Camera = GetStage<Stage>()->GetCamera();
auto shptr = m_Renderer.lock();
if (!shptr) {
shptr =
GetStage<Stage>()->FindTagGameObject<SimplePNTStaticModelRenderer2>(L"SimplePNTStaticModelRenderer2");
m_Renderer = shptr;
}
shptr->AddDrawObject(m_PtrObj);
}