[英]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.