おはござ!Pocolです。
前回の記事では,スフィアマップのサンプルについて紹介しましたが,今回はキューブマップをスフィアマップ形式で展開して表示する方法について紹介します。
キューブマップからの変換については,Paul Bourke氏の“Converting to/from cubemaps”にまとまった説明があります。
この記事に書かれているキューブマップから正距円筒方式への変換処理は次のような感じになります。
// スフィアマップ形式で表示するためのキューブマップ参照方向を求めます.
float3 ToCubeMapCoord(float2 texcoord)
{
// [-1, 1]に変更.
float2 uv = texcoord * float2(2.0f, -2.0f) - float2(1.0f, -1.0f);
float theta = uv.x * F_PI;
float phi = uv.y * F_PI * 0.5f;
float3 dir;
dir.x = cos(phi) * cos(theta);
dir.y = sin(phi);
dir.z = cos(phi) * sin(theta);
return dir;
}
この変換の使いどころですが,ImGuiでキューブマップを表示するのが面倒なので,上記の関数をかまして2Dマップとして表示するのに自分は使用しています。
…というわけで,展開して表示する方法について紹介しました。