Can';t在glTexSubImage2D中指定大小
我正在尝试在已应用于2D四边形的纹理上创建一个子纹理。当通过默认参数(宽度和高度)时,它工作正常,但当我输入整数大小(例如宽度为100,高度为100)时,输出不正确。扫描线显示在干燥区域。这是密码Can';t在glTexSubImage2D中指定大小,c,opengl,texture-mapping,C,Opengl,Texture Mapping,我正在尝试在已应用于2D四边形的纹理上创建一个子纹理。当通过默认参数(宽度和高度)时,它工作正常,但当我输入整数大小(例如宽度为100,高度为100)时,输出不正确。扫描线显示在干燥区域。这是密码 unsigned char* grass_image = SOIL_load_image("grass1.jpg", &width, &height, 0, SOIL_LOAD_RGB); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, h
unsigned char* grass_image = SOIL_load_image("grass1.jpg", &width, &height, 0, SOIL_LOAD_RGB);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB,GL_UNSIGNED_BYTE, grass_image);
SOIL_free_image_data(grass_image);
unsigned char* temple_image = SOIL_load_image("temple.jpg", &width, &height, 0, SOIL_LOAD_RGB);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height,
GL_RGB,GL_UNSIGNED_BYTE, temple_image); // NO ERROR
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 100, 100,
GL_RGB,GL_UNSIGNED_BYTE, temple_image); // ERROR
SOIL_free_image_data(temple_image);
问题是您需要设置步幅,现在子图像中的第二行像素将是原始图像中第一行像素的像素101-200 您需要使用
glPixelStorei(GL\u UNPACK\u ROW\u LENGTH,stride)设置步幅代码>像这样:
unsigned char* temple_image = SOIL_load_image("temple.jpg", &width, &height, 0, SOIL_LOAD_RGB);
glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 100, 100,
GL_RGB,GL_UNSIGNED_BYTE, temple_image);
嗯,用不同于实际大小的大小解释图像数据会使它看起来很奇怪。此外,如果我将其映射到比其原始大小更小的大小,则这应该不是问题。如果我错了,请纠正我。OpenGL使用宽度参数确定行的长度。如果指定的宽度小于图像的实际宽度,则扫描线不匹配,将产生一个奇怪的图像。添加该行后,仅显示图像的一部分。如果图像是400X400,并且我已通过100作为宽度和高度值,则仅显示左上角的四分之一。而我希望整个400X400图像映射到100X100。有什么办法吗???@MohitJain你必须自己调整大小。正如上校所说,你必须自己调整大小,OpenGL不适合你。