gpt4 book ai didi

用于平铺输出反转的 C++ 二维数组映射

转载 作者:行者123 更新时间:2023-11-28 03:20:16 25 4
gpt4 key购买 nike

我已经创建了一个二维数组来表示要放置的图 block 的 map :

int sMap[12][20] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1},
{1, 0, 1, 0, 1, 2, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1},
{1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1},
{1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 1},
{1, 1, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 1, 0, 1, 1, 2, 2, 2, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};

加载我的图 block 后,我使用这个 function()放置瓷砖:

for (int y = 0; y < 12; y++){ //for (int y = 11; y >= 0; y--){
for (int x = 0; x < 20; x++){ //for (int x = 19; x >= 0; x--){
if (sMap[y][x] == 1)
glBindTexture( GL_TEXTURE_2D, brick1);
else if (sMap[y][x] == 2)
glBindTexture( GL_TEXTURE_2D, brick2);
else
glBindTexture( GL_TEXTURE_2D, wall );

glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(float(x), float(y), 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(float(x + 1), float(y), 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(float(x + 1), float(y + 1), 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(float(x), float(y + 1), 0.0f);
glEnd();
}
}

出于某种原因,我的 Map是倒置的...(所以上面 map 中数字的底行是屏幕上瓷砖的顶行, map 上的第二行是屏幕上瓷砖的第二行)。

据我了解,您通过选择每个数字进行迭代并分配正确的图 block 。我试过更改 x/y的,但这会在屏幕上旋转 map ,因此它在 x 上有 12 个图 block 和 y 上的 20 个瓷砖.

我希望屏幕上的图 block 代表上面的 map 。任何想法如何解决这一问题?谢谢。

最佳答案

问题在于 OpenGL 实际上有一个坐标系,点 (0, 0) 位于视口(viewport)的左下部分。因此,如果您想在代码中以与绘制相同的方式表示该矩阵,则需要将绘制的 y 坐标计算为 <height of viewport> - (calculated y) .如何获得该高度 - 这取决于您,可能您在代码的前面定义了它。例如,float(y + 1 + offsety)将变为 float(HEIGHT - (y + 1 + offsety)) .

编辑

哦,我刚刚意识到 - 你有那个循环,所以你可以把

for (int y = 11; y >= 0; y--){

取而代之的是外部循环的现有开始,仅此而已。但是,无论如何,很高兴知道它并没有像您想象的那样意外反转 - 它只是取决于坐标系。

关于用于平铺输出反转的 C++ 二维数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com