Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 窗口中出现的GLTEXAGE2D切片和对齐问题_C++_Opengl_Gis_Topography - Fatal编程技术网

C++ 窗口中出现的GLTEXAGE2D切片和对齐问题

C++ 窗口中出现的GLTEXAGE2D切片和对齐问题,c++,opengl,gis,topography,C++,Opengl,Gis,Topography,我正在制作自己的地形图,我一直在使用美国宇航局的.hgt文件 我正在使用加载文件 void MapImage::load_map_file(const char* filename) { std::ifstream file(filename, std::ios::in | std::ios::binary); if (!file) { std::cout << "Error opening file!" << std::endl;

我正在制作自己的地形图,我一直在使用美国宇航局的.hgt文件

我正在使用加载文件

void MapImage::load_map_file(const char* filename) {
    std::ifstream file(filename, std::ios::in | std::ios::binary);
    if (!file) {
        std::cout << "Error opening file!" << std::endl;
    }
    std::vector<short> tempHeight(TOTAL_SIZE);
    unsigned char buffer[2];

    int x, y;
    for (int i = 0; i < TOTAL_SIZE; i++) {
        if (!file.read(reinterpret_cast<char*>(buffer), sizeof(buffer))) {
            std::cout << "Error reading file!" << std::endl;
        }
        tempHeight[i] = (buffer[0] << 8) | buffer[1];
    }

    height = tempHeight;
}
void MapImage::加载映射文件(const char*filename){
std::ifstream文件(文件名,std::ios::in | std::ios::binary);
如果(!文件){

std::cout这看起来像是由3宽颜色数据引起的行未对齐。请在
glTexImage2D
之前尝试使用以下调用:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
默认情况下,此对齐值为
4
,每当读取纹理数据并将其发送到GPU时,
glTexImage2D
和朋友都会使用该对齐值

没有验证它是否匹配数据的实际外观,因此在像您这样的情况下,如果一行不以4字节边界结束,则将跳过下一行的前几个字节,从而导致这种对角线失真


另一个方向的纹理数据传输(从GPU到客户机内存)通过
glPixelStorei(GL_PACK_ALIGNMENT,1);

@AlexVestin那么…是哪一个呢?希望我下次能记住:pUNPACK_对齐是正确的,因为我需要几分钟时间。第一个,glPixelStorei(GL_UNPACK_ALIGNMENT,1);!@Quentin为什么要删除底部部分!!@snb好吧,因为这个部分是用于从GPU检索纹理数据,而不是发送纹理数据(这是实际问题)。我只是不记得哪个是哪个,所以我将两者都包括在内。
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);