C++ 窗口中出现的GLTEXAGE2D切片和对齐问题
我正在制作自己的地形图,我一直在使用美国宇航局的.hgt文件 我正在使用加载文件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;
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);