LoginSignup
4
6

More than 1 year has passed since last update.

DirectXで画面分割

Last updated at Posted at 2020-02-12

bunkatsu2.png
このようにDirectXで画面分割する方法を紹介します。

概要

DirectXは描画する際に様々な行列を使用するのですが、その1つにビューポート行列というものがあります。このビューポート行列を描画前に設定することにより、画面分割を行うことが出来ます。

コード

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();
        }
    }
}
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6