繁体   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