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();
}
}
}
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();
}
}
}
Author And Source
この問題について(DirectXで画面分割), 我々は、より多くの情報をここで見つけました https://qiita.com/akurobit/items/1619bc26010441b8008c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .