初探CubeMap
前言
以前CubeMap總是在書上看到範例但卻因為覺得不實用所以總是被我略過,但若想要實現PBR(physically based rendering)的話,其中dynamic environment mapping就需要用到CubeMap,所以最近開始學習CubeMap的使用,在此做個紀錄。
內容
在創建紋理資源時,不論是Direct3D或OpenGL都是建6張紋理後來創建,注意的是Direct3D創建時是用陣列的方式給予,而順序是+X、-X、+Y、-Y、+Z與-Z,請照順序放入即可,不用考慮是左手或右手座標系!接著是在Shader使用時,HLSL的資料型別是"TextureCube",依舊是透過Sample()來進行取得Texel,GLSL的資料型別是"samplerCube",取得Texel則是透過textureCube()來取得。在GLSL當有使用textureCube()時,請加入以下程式碼在開頭
#extension GL_NV_shadow_samplers_cube : enable
如果不加上面的程式,在GLSL編譯時會有以下錯誤訊息
error c7531:global function textureCube requires "#extension GL_NV_shadow_samplers_cube:enable" before use
還有以前取Texel都採用UV座標(float2),在CubeMapg時要採用UVW座標(float3)來取Texel,其實它就是個"方向",可以想像在Cube的中心用一個"方向"來取Texel。
後記
這次實作CubeMap遽然意外的順利,只有碰到GLSL的編譯問題!CubeMap使用起來並不難,日後在實作dynamic environment mapping後應該會再寫一篇。參考資料
D3D11: Creating a cube map from 6 imagesOpengl's cubemaps
Fix glsl's c7531 error
沒有留言:
張貼留言