我试图在屏幕上渲染一堆四边形,但我无法正确渲染它。
我有一个10000(100x100)大小的1D数组并保存纹理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像素,我想只渲染适合此分辨率的四边形子集,所以我不想从我的一维数组中绘制所有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分辨率。
答案 0 :(得分:0)
您应该使用源数组的宽度,而不是屏幕宽度。据我了解,宽度为mapping
= 100?
int quadIndex = j * 100 + i;