不重复地读取 SDL2 纹理
Read SDL2 texture without duplication
我尝试使用 png 或 jpg 文件创建高度图。它也工作了 75% 但我无法解决最后 25...
这是一张 png 格式的地图图片
这就是结果 heightmap/terrain
如您所见,符号开始重复,我不知道为什么。
代码:
auto image = IMG_Load(path.c_str());
int lineOffSet = i*(image->pitch/4);
uint32 pixel = static_cast<uint32*>(image->pixels)[lineOffSet + j];
uint8 r, g ,b;
SDL_GetRGB(pixel,image->format,&r, &g, &b);
我尝试了什么:
顶点数正确(256x256)。
int lineOffSet = i*(image->pitch/4);
4 表示每个像素的字节数,在本例中应为 3,但我得到了一个完全不同的地形(间距为 768)。 i 和 j 的范围是 0-255。
我希望有人能提供解决这个问题的提示
我认为你计算的所需像素的地址有误。您假设一个像素的大小为 4 个字节。直接以字节计算地址然后转换为uint32
通常更可靠。试试这个:
uint32 pixel = *static_cast<uint32*>(image->pixels +
image->pitch * i +
image->format->BytesPerPixel * j);
我尝试使用 png 或 jpg 文件创建高度图。它也工作了 75% 但我无法解决最后 25...
这是一张 png 格式的地图图片
这就是结果 heightmap/terrain
如您所见,符号开始重复,我不知道为什么。
代码:
auto image = IMG_Load(path.c_str());
int lineOffSet = i*(image->pitch/4);
uint32 pixel = static_cast<uint32*>(image->pixels)[lineOffSet + j];
uint8 r, g ,b;
SDL_GetRGB(pixel,image->format,&r, &g, &b);
我尝试了什么:
顶点数正确(256x256)。
int lineOffSet = i*(image->pitch/4);
4 表示每个像素的字节数,在本例中应为 3,但我得到了一个完全不同的地形(间距为 768)。 i 和 j 的范围是 0-255。
我希望有人能提供解决这个问题的提示
我认为你计算的所需像素的地址有误。您假设一个像素的大小为 4 个字节。直接以字节计算地址然后转换为uint32
通常更可靠。试试这个:
uint32 pixel = *static_cast<uint32*>(image->pixels +
image->pitch * i +
image->format->BytesPerPixel * j);