// 影用の深度記録画像を使った影を落とす処理も含めたモデルの描画 void DrawModelWithDepthShadow( void ) { int i ; // カメラの設定を行う SetCameraPositionAndTarget_UpVecY( cam.Eye, cam.Target ) ; // モデルの描画にオリジナルのシェーダーを使用するように設定する MV1SetUseOrigShader( TRUE ) ; // 深度記録画像を使った影+ディレクショナルライト一つ描画用のピクセルシェーダーをセット SetUsePixelShader( DirLight_DepthShadow_Step2_PixelShader ) ; // 影用深度記録画像を描画したときのカメラのビュー行列と射影行列を定数に設定する SetVSConstFMtx( 43, LightCamera_ViewMatrix ) ; SetVSConstFMtx( 47, LightCamera_ProjectionMatrix ) ; // 影用深度記録画像をテクスチャ1にセット SetUseTextureToShader( 1, DepthBufferGraphHandle ) ; // 深度記録画像を使った影+ディレクショナルライト一つの剛体メッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Normal_DirLight_DepthShadow_Step2_VertexShader ) ; // ステージモデルの描画 MV1DrawModel( stg.ModelHandle ) ; // 深度記録画像を使った影+ディレクショナルライト一つのスキニングメッシュ描画用の頂点シェーダーをセット SetUseVertexShader( Skin4_DirLight_DepthShadow_Step2_VertexShader ) ; // プレイヤーモデルの描画 MV1DrawModel( pl.CharaInfo.ModelHandle ) ; // プレイヤー以外キャラモデルの描画 for( i = 0 ; i < NOTPLAYER_NUM ; i ++ ) { MV1DrawModel( npl[ i ].CharaInfo.ModelHandle ) ; } // モデルの描画にオリジナルのシェーダーを使用するようにした設定を解除 MV1SetUseOrigShader( FALSE ) ; // 使用テクスチャの設定を解除 SetUseTextureToShader( 1, -1 ) ; // 設定した定数を解除 ResetVSConstF( 43, 8 ) ; }
void Shader_End(Shader *self) { if (self->active_pass == 0) { SetDrawScreen(DX_SCREEN_BACK); } else if (self->active_pass == 1) { SetUseTextureToShader(1, -1); ResetVSConstF(43, 8); } else if (self->active_pass == -1) { fprintf(stderr, "warning: Shader: shader not active\n"); } else { fprintf(stderr, "warning: Shader: unexpected pass number\n"); } MV1SetUseOrigShader(FALSE); self->active_pass = -1; }