2013-03-07 77 views
1

我有一個緩衝區包含一個「原始」BGRA紋理,每個顏色一個字節。 線條以相反的順序(紋理顛倒)。BGRA - > RGBA和垂直翻轉,OptiX

BGRA緩衝區全部爲綠色(0,255,0,255)。

我需要將其轉換爲RGBA並翻轉紋理線。 我嘗試這樣做:

// bgra is an unsigned char* 

int width = 1366; 
int height = 768;  

unsigned char* rgba = new unsigned char[width * height * 4]; 

for(int y = height - 1; y >= 0; y--) 
{ 
    for(int x = 0; x < width; x++) 
    { 
     rgba[(x * y * 4)]  = bgra[(x * y * 4) + 2]; 
     rgba[(x * y * 4) + 1] = bgra[(x * y * 4) + 1]; 
     rgba[(x * y * 4) + 2] = bgra[(x * y * 4)]; 
     rgba[(x * y * 4) + 3] = bgra[(x * y * 4) + 3]; 
    } 
} 

但渲染時的結果不是一個完整的綠色屏障,但這:

什麼可能我是錯在這裏幹什麼?

回答

5

你索引錯誤。

這是應該怎麼做:

rgba[(x + y * width) * 4]  = bgra[(x + y * width) * 4 + 2] 
+0

謝謝你,我的索引是關閉的。但是,那不是我唯一的問題。編輯的問題。 – EClaesson 2013-03-07 04:51:46

+0

索引編制是個問題,它在代碼中也被打破了。謝謝。 – EClaesson 2013-03-07 05:47:13