【问题标题】:Mirror (flop) a JPG image loaded using SOIL_load_image镜像(翻转)使用 SOIL_load_image 加载的 JPG 图像
【发布时间】:2015-04-26 18:42:51
【问题描述】:

我已经使用库 libsoil-dev 成功加载了一个 .jpg 图像,正如使用命令为 Debian 找到的那样

    uchar* img = SOIL_load_image(pfname_texture.c_str(),
      &img_width, &img_height, NULL, 0);

后两个参数分别是 int* channelsint force_channels,无论具体含义如何,但它们似乎涉及 alpha 通道之类的东西。

使用上述命令,我知道图像的宽度和高度(以像素为单位)。

现在我想水平翻转它(意味着左右边缘交换边)。如果我知道 uchar* img 的大小,这将很容易。但是,就目前情况而言,我不知道,因为我无法确定有多少 uchars 构成一个像素。另外,我不知道像素在内存中是如何排序的(按行、按列、从上到下,反之亦然,你可以命名它)。有什么想法吗?

【问题讨论】:

  • 阅读我在偶然发现 glTexImage2D(..,type=GL_UNSIGNED_BYTE,..) 的教程中使用的代码。鉴于我的程序有效(忽略镜像纹理),这似乎是一个像素的大小。这总是真的吗?另外:仍然缺少订购信息...
  • 回到我自己的问题...这似乎很有用:opengl.org/wiki/Pixel_Transfer#Pixel_layout

标签: c++ jpeg soil


【解决方案1】:

您是否尝试过以不同方式映射纹理,例如:

glBegin(GL_QUADS);
glTexCoord2f(1, 1); glVertex3f(0, 798, 0); // 0, 1
glTexCoord2f(1, 0); glVertex3f(0, 0, 0); // 0, 0
glTexCoord2f(0, 0); glVertex3f(1280, 0, 0); // 1, 0
glTexCoord2f(0, 1); glVertex3f(1280, 798, 0); // 1, 1
glEnd();

这里我把 glTexCoord2f(第一个参数)中的 x 坐标换成了相反的,所以 glTexCoord2f(1, 1) 会变成 glTexCoord2f(0, 1)。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2012-01-14
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多