簡體   English   中英

將1d數組的一部分渲染為2D?

[英]Render a portion of 1d array as 2D?

我正在嘗試在屏幕上渲染一堆四邊形,但是我無法使其正確渲染。

我有一個一維數組,其大小為10000(100x100),並包含紋理ID:

mapping = { 1, 22, 55, 28, 95, 105, ...} 

紋理文件包含512x512像素,每個圖像有16x16像素。 因此,總共是32x32圖像。 紋理ID從0開始從左到右對應:

 0  1  2  3 ... 31
32 33 34 35 ... 63

............... 1023

給定800x600像素的屏幕分辨率,我只想渲染適合此分辨率的四邊形的一個子集,因此我不想從我的1D數組中繪制所有10000個四邊形。

從(0,0)磁貼繪制,這就是我所擁有的:

for (int j = 0; j < 37; j++) {     // 600/16 = 37
    for(int i = 0; i < 50; i++) {  // 800/16 = 50
        int quadIndex = j*800/16 + i;
        int textureID = mapping[quadIndex];
        int x = (textureID % 512) * 16;
        int y = (textureID / 512) * 16;

        // Take image from texture starting at (x,y) and draw on screen at (i, j)
        draw(i, j, x, y);    
    }
}

問題是quadIndex不正確。 它正確繪制了第一行,但是第二行只是第一行的延續,而不是實際的第二行。 基本上第一行溢出到第二行,並且一切都丟掉了。

我敢肯定是因為我可以錯誤地計算quadIndex ,但是我不知道解決方案是什么。

另外,作為額外的好處,我如何指定從任何(a,b)偏移而不是始終從(0,0)進行渲染? 也就是說,對於我的一維數組,我想從(4,4)繪制到我的800x600分辨率上。

您應該使用源數組的寬度,而不是屏幕寬度。 據我了解,它的mapping寬度= 100嗎?

int quadIndex = j * 100 + i;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM