首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Boost.GIL加载opengl纹理

使用Boost.GIL加载opengl纹理
EN

Stack Overflow用户
提问于 2016-11-19 13:41:31
回答 1查看 350关注 0票数 2

我写了一个简单的应用程序,使用OpenGL,Assimp和Boost.GIL加载模型。

我的模型包含一个PNG纹理。当我使用GIL加载它并通过OPENGL渲染它时,我得到了一个错误的结果。感谢codeXL的鲍威尔,我发现加载到OpenglGL中的纹理与图像本身完全不同。

这里有一个类似的问题,我遵循了它的步骤,但仍然得到了同样的错误。

以下是我的代码:

代码语言:javascript
复制
// --------- image loading
std::experimental::filesystem::path path(pathstr);
gil::rgb8_image_t img;
if (path.extension() == ".jpg" || path.extension() == ".jpeg" || path.extension() == ".png")
{
    if (path.extension() == ".png")
        gil::png_read_and_convert_image(path.string(), img);
    else
        gil::jpeg_read_and_convert_image(path.string(), img);

    _width = static_cast<int>(img.width());
    _height = static_cast<int>(img.height());

    typedef decltype(img)::value_type pixel;

    auto srcView = gil::view(img);
    //auto view = gil::interleaved_view(
    //  img.width(), img.height(), &*gil::view(img).pixels(), img.width() * sizeof pixel);

    auto pixeldata = new pixel[_width * _height];

    auto dstView = gil::interleaved_view(
        img.width(), img.height(), pixeldata, img.width() * sizeof pixel);

    gil::copy_pixels(srcView, dstView);
}

// ---------- texture loading
{
    glBindTexture(GL_TEXTURE_2D, handle());
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
        image.width(), image.height(),
        0, GL_RGB, GL_UNSIGNED_BYTE,
        reinterpret_cast<const void*>(image.data()));
    glGenerateMipmap(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, 0);
}

我的纹理是:

当它运行时,我的codeXL调试器报告我纹理变成:

这个模型的所有其他纹理也都出错了。

EN

回答 1

Stack Overflow用户

发布于 2016-11-19 18:34:24

从技术上讲,这是一个常见问题,已经问了好几次了。从本质上讲,你遇到了一个对齐问题。默认情况下(您可以更改它),OpenGL要求图像行在4字节边界上对齐。如果您的图像数据与此不匹配,则会得到这个倾斜的结果。在调用glTexImage…之前添加一个对glPixelStorei(GL_UNPACK_ALIGNMENT, 1);的调用将为您完成此任务。当然,您应该从图像元数据中检索实际的对齐方式。

图像“倒置”是由于OpenGL将纹理的原点放在左下角(如果所有转换矩阵都默认保留或具有正行列式)。这与大多数图像文件格式(但不是所有格式)不同,图像文件格式的左上角有它。只要翻转垂直纹理坐标,你就是金色的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40689625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档