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