近期在研究使用D3D开发三维显示场景,发现D3D支持的纹理图的大小有限制,这种限制一般由D3D引擎、显卡驱动和显卡硬件共同决定。
使用如下代码可以获取当前系统能支持最大纹理大小:
D3DCAPS9 caps;
m_pd3dDevice->GetDeviceCaps(&caps);
WORD wMaxTextureWidth = caps.MaxTextureWidth;
WORD wMaxTextureHeight = caps.MaxTextureHeight;
但是,如果一个球面几何对象上需要贴的纹理大小超出了此限制,如何解决?本人采用的是切分扇面的方法解决的,即根据wMaxTextureWidth、wMaxTextureHeight和纹理图大小动态创建一个有多个扇面组成的球面,并将原始纹理图按同样的方式分割成对应数量的长宽为wMaxTextureWidth*wMaxTextureHeight的纹理图,这样,每个扇面就对应一张分割后的纹理图片,其中,算法最困难的地方在于创建一个扇面总数=N*M的球面。
使用如下代码可以获取当前系统能支持最大纹理大小:
D3DCAPS9 caps;
m_pd3dDevice->GetDeviceCaps(&caps);
WORD wMaxTextureWidth = caps.MaxTextureWidth;
WORD wMaxTextureHeight = caps.MaxTextureHeight;
但是,如果一个球面几何对象上需要贴的纹理大小超出了此限制,如何解决?本人采用的是切分扇面的方法解决的,即根据wMaxTextureWidth、wMaxTextureHeight和纹理图大小动态创建一个有多个扇面组成的球面,并将原始纹理图按同样的方式分割成对应数量的长宽为wMaxTextureWidth*wMaxTextureHeight的纹理图,这样,每个扇面就对应一张分割后的纹理图片,其中,算法最困难的地方在于创建一个扇面总数=N*M的球面。