DirectX로 화면 분할


이와 같이 DirectX로 화면 분할하는 방법을 소개합니다.

개요



DirectX는 그릴 때 다양한 행렬을 사용하지만, 그 중 하나에 뷰포트 행렬이라는 것이 있습니다. 이 뷰포트 행렬을 그리기 전에 설정함으로써 화면 분할을 할 수 있습니다.

코드


const float FRAME_BUFFER_W = 1280.0f;   //フレームバッファの幅。
const float FRAME_BUFFER_H = 720.0f;   //フレームバッファの高さ。
Model* modelList;   //3Dモデルのリスト
ID3D11DeviceContext* d3dDeviceContext;   //D3D11デバイスコンテキスト、初期化済みとする
D3D11_VIEWPORT viewPorts[2];   //分割ビューポート、これをモデルの描画前に設定する

//ビューポート初期化
{
    //これが上画面
    viewPorts[0].Width = FRAME_BUFFER_W;   //画面の横サイズ
    viewPorts[0].Height = FRAME_BUFFER_H / 2;   //画面の縦サイズ
    viewPorts[0].TopLeftX = 0;   //画面左上のx座標
    viewPorts[0].TopLeftY = 0;   //画面左上のy座標
    viewPorts[0].MinDepth = 0.0f;   //深度値の最小値
    viewPorts[0].MaxDepth = 1.0f;   //深度値の最大値

    //これが下画面
    viewPorts[1].Width = FRAME_BUFFER_W;   //画面の横サイズ
    viewPorts[1].Height = FRAME_BUFFER_H / 2;   //画面の縦サイズ
    viewPorts[1].TopLeftX = 0;   //画面左上のx座標
    viewPorts[1].TopLeftY = FRAME_BUFFER_H / 2;   //画面左上のy座標
    viewPorts[1].MinDepth = 0.0f;   //深度値の最小値
    viewPorts[1].MaxDepth = 1.0f;   //深度値の最大値
}

//描画するぜ
{
    //ビューポートの数だけfor文を回す
    for(int i = 0; i < sizeof(viewPorts) / sizeof(viewPorts[0]); i++) {
        //ビューポートを設定
        d3dDeviceContext->RSSetViewports(1, viewPorts[i]);
        //モデルを描画
        for(Model* model : modelList) {
            //描画
            model->Draw();
        }
    }
}

좋은 웹페이지 즐겨찾기