Cubemap, 3D grafik programlamada özellikle yansıma (reflection), gökyüzü küresi (skybox/sky sphere) ve çevresel aydınlatma (environment mapping) gibi efektleri gerçekleştirmek için kullanılan küresel bir görüntü temsili yöntemidir. Bu makalede, DirectX 9 ve C++ kullanarak cubemap nedir, nasıl oluşturulur, hangi formatlar desteklenir ve nasıl uygulanır sorularına kapsamlı bir cevap sunacağız.
Cubemap Nedir?
Cubemap, bir kürenin merkezinden dışarıya doğru çekilmiş 6 farklı görüntünün (küpe yönlendirilmiş 6 kamera gibi) bir araya getirilmesiyle oluşturulan özel bir dokudur. Bu görüntüler:
-
+X (sağ)
-
-X (sol)
-
+Y (yukarı)
-
-Y (aşağı)
-
+Z (ileri)
-
-Z (geri)
yönlerini temsil eder.
Bu dokular birlikte 3D nesneler üzerinde çevresel yansıma veya gökyüzü efekti oluşturmak için kullanılır.
️ 4x3 Cross Format Nedir?
Cubemap'ler genellikle özel düzenlemelerde saklanır:
4x3 Cross Format şu şekilde görselleştirilebilir:
+Y
-X +Z +X -Z
-Y
Bu format özellikle offline render alınmış gökyüzü görüntülerinden cubemap oluşturmak için kullanılır. 6 yüzü tek bir görsel içinde içerir. DirectX bu formatı kullanabilmek için yüzleri otomatik olarak ayırabilir ya da yazılımla elle kesilmelidir.
⚙️ DirectX 9 ile Cubemap Nasıl Oluşturulur?
-
Cubemap Texture Tanımlama:
LPDIRECT3DCUBETEXTURE9 pCubeTexture = NULL;
d3ddev->CreateCubeTexture(
256, 0, D3DUSAGE_RENDERTARGET,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pCubeTexture, NULL);
-
Yüzlere Veri Yükleme:
D3DXLoadSurfaceFromFile(
pCubeTexture->GetCubeMapSurface(D3DCUBEMAP_FACE_POSITIVE_X, 0),
NULL, NULL, "posx.jpg", NULL, D3DX_DEFAULT, 0, NULL);
Tüm 6 yüz için aynı işlemi yapmalısınız.
-
Shader’da Kullanım (VS/PS 2.0)
samplerCUBE CubeMapSampler = sampler_state
{
Texture = ;
};
float4 PS_Main(float3 reflectDir : TEXCOORD0) : COLOR0
{
return texCUBE(CubeMapSampler, reflectDir);
}
-
Cube Mapping Yönü Hesaplama (C++) Yansıma yönünü hesaplarken:
float3 view = normalize(eyePos - worldPos);
float3 reflectDir = reflect(view, normal);
Cubemap Kullanım Alanları
Kullanım Alanı | Açıklama |
---|---|
Skybox | Oyundaki gökyüzü ve uzak manzaralar |
Reflection Map | Metal, cam gibi yüzeylerde çevresel yansıma |
Refraction Map | Su gibi yarı şeffaf objelerde kırılma etkisi |
IBL (Image Based Lighting) | PBR sistemlerde çevresel aydınlatma |
Cubemap Dönüştürme ve Araçlar
-
Photoshop + NVIDIA DDS Plugin
-
CMFT Studio (https://github.com/dariomanesku/cmftStudio)
-
DirectX Texture Tool (DxTex.exe): Yüzleri elle yükleyip
.dds
oluşturabilirsiniz
Cubemap Render-to-Texture (RTT) ile Dinamik Yansıma
-
Sahnenizi 6 kez 90° FOV ile farklı yönlere render edin
-
SetRenderTarget()
ile her yüz için render edin -
Shader ile bu dinamik cubemap’i kullanarak gerçek zamanlı yansıma oluşturun
Bu yöntem özellikle hareketli objelerin çevresini yansıtmasında kullanılır.
✅ Sonuç
Cubemap teknolojisi, DirectX 9 ortamında etkileyici çevresel görseller oluşturmak için oldukça güçlü bir tekniktir. Yansıma, gökyüzü ve aydınlatma gibi birçok alanda kullanılabilir. 4x3 Cross gibi formatlarla veya DDS
tabanlı texture’larla kullanılabilir. C++ ile uygulama geliştirirken D3D cihazınıza cubemap yüklemek ve shader’da kullanmak için yukarıdaki adımlar temel bir başlangıç noktası sunar.