static void begin_depthmap_pass(Shader *self) { // 描画先を影用深度記録画像にする SetDrawScreen(self->depthmap_screen); // 影用深度記録画像を真っ白にクリア SetBackgroundColor(255, 255, 255); ClearDrawScreen(); SetBackgroundColor(0, 0, 0); // カメラのタイプを正射影タイプにセット、描画範囲も指定 SetupCamera_Ortho(13250.0f); // 描画する奥行き範囲をセット SetCameraNearFar(10.0f, 13050.0f); // カメラの位置と注視点はステージ全体が見渡せる位置 VECTOR LightTarget = VGet(3620.0f, 0.0f, 3830.0f); // カメラの向きはライトの向き VECTOR LightDirection = VScale(GetLightDirection(), -12400.0f); // カメラの位置と注視点はステージ全体が見渡せる位置 VECTOR LightPosition = VAdd(LightTarget, LightDirection); SetCameraPositionAndTarget_UpVecY(LightPosition, LightTarget); self->light_camera_view_matrix = GetCameraViewMatrix(); self->light_camera_projection_matrix = GetCameraProjectionMatrix(); SetUseVertexShader(self->depthmap_vs); SetUsePixelShader(self->depthmap_ps); }
// 影用の深度記録画像の準備を行う void SetupDepthImage( void ) { int i ; VECTOR LightDirection ; VECTOR LightPosition ; VECTOR LightTarget ; // 描画先を影用深度記録画像にする SetDrawScreen( DepthBufferGraphHandle ) ; // 影用深度記録画像を真っ白にクリア SetBackgroundColor( 255, 255, 255 ) ; ClearDrawScreen() ; SetBackgroundColor( 0, 0, 0 ) ; // カメラのタイプを正射影タイプにセット、描画範囲も指定 SetupCamera_Ortho( 13250.0f ) ; // 描画する奥行き範囲をセット SetCameraNearFar( 10.0f, 13050.0f ) ; // カメラの向きはライトの向き LightDirection = GetLightDirection() ; // カメラの位置と注視点はステージ全体が見渡せる位置 LightTarget.x = 3620.0f ; LightTarget.y = 0.0f ; LightTarget.z = 3830.0f ; LightPosition = VAdd( LightTarget, VScale( LightDirection, -12400.0f ) ) ; SetCameraPositionAndTarget_UpVecY( LightPosition, LightTarget ) ; // 設定したカメラのビュー行列と射影行列を取得しておく LightCamera_ViewMatrix = GetCameraViewMatrix() ; LightCamera_ProjectionMatrix = GetCameraProjectionMatrix() ; // モデルの描画にオリジナルのシェーダーを使用するように設定する MV1SetUseOrigShader( TRUE ) ; // 深度記録画像への描画用のピクセルシェーダーをセット SetUsePixelShader( DepthShadow_Step1_PixelShader ) ; // 深度記録画像への剛体メッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Normal_DepthShadow_Step1_VertexShader ) ; // ステージを描画 MV1DrawModel( stg.ModelHandle ) ; // 深度記録画像へのスキニングメッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Skin4_DepthShadow_Step1_VertexShader ) ; // プレイヤーモデルの描画 MV1DrawModel( pl.CharaInfo.ModelHandle ) ; // プレイヤー以外キャラモデルの描画 for( i = 0 ; i < NOTPLAYER_NUM ; i ++ ) { MV1DrawModel( npl[ i ].CharaInfo.ModelHandle ) ; } // モデルの描画にオリジナルのシェーダーを使用するようにした設定を解除 MV1SetUseOrigShader( FALSE ) ; // 描画先を裏画面に戻す SetDrawScreen( DX_SCREEN_BACK ) ; }