2012-06-30 58 views
0

我想將XNA渲染的圖像保存到磁盤。這實際上很簡單,但踢球者是我需要每個通道的全部32位浮點精度,而不僅僅是0-255範圍。將XNA渲染的圖像保存到磁盤

我一直在尋找使用紋理包裝(將float轉換爲4分量的ARGB),但我擔心這樣我會失去精度。我需要非常高的準確性。

我正在研究的另一種方法是使用着色器並將float成分乘以2147483647(max positive int),然後遍歷每一位並在渲染圖像中存儲二進制0或1。之後每個圖像可以用常規代碼重新組合,以重建完整的精度浮點數。這工作,但問題是,着色器模型3.0似乎不能正確支持32位int。我所得到的是24位精度這種方式。

有沒有辦法以更直接,更準確的方式來做到這一點?

+1

我把它渲染成紋理,然後保存它?在這種情況下,你不能只渲染一個Vector4格式的紋理,並保存它? – YellPika

回答

0

既然你說你對每個通道都使用32位精度,那麼我假設你的紋理使用了SurfaceFormat.Vector4,據我所知,它是唯一的128位紋理XNA支持的格式。在這種情況下,它是很容易檢索您已經呈現紋理的實際數據:

var tex = new Texture2D(GraphicsDevice, 1024, 1024, false, SurfaceFormat.Vector4); 
var data = new Vector4[1024 * 1024]; 
tex.GetData<Vector4>(data); 

然後,所有你需要做的就是編寫一些代碼來的data數組保存到一個文件,你可以閱讀在以後,這很容易。然後你可以重構紋理:

Vector4[] data = LoadMyData(); 
tex.SetData(data);