首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DevIL图像渲染不正确

DevIL图像渲染不正确
EN

Stack Overflow用户
提问于 2014-04-21 07:41:20
回答 1查看 388关注 0票数 0

我正在使用OpenGL,我可以正确地加载tga文件,但是由于某种原因,当我呈现jpg文件时,我没有正确地看到它们。

这张照片应该是这样的--

这就是它的样子..。它为什么会被拉伸?是因为坐标吗?

这是我用于绘图的代码。

代码语言:javascript
复制
void Renderer::DrawJpg(GLuint tex, int xi, int yq, int width, int height) const
{
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex2i(0+xi,   0+xi);
glTexCoord2i(0, 1); glVertex2i(0+xi,   height+xi);
glTexCoord2i(1, 1); glVertex2i(width+xi, height+xi);
glTexCoord2i(1, 0); glVertex2i(width+xi, 0+xi);
glEnd();
}

我就是这样加载图像的..。

代码语言:javascript
复制
imagename=s;
ILboolean success;
ilInit();
ilGenImages(1, &id);
ilBindImage(id);
success = ilLoadImage((const ILstring)imagename.c_str());
if (success)
{
    success = ilConvertImage(IL_RGB, IL_UNSIGNED_BYTE); /* Convert every colour component into
                                                         unsigned byte. If your image contains alpha channel you can replace IL_RGB with IL_RGBA */
    if (!success)
    {
        printf("image conversion failed.");
    }
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D, id);

    width = ilGetInteger(IL_IMAGE_WIDTH);
    height = ilGetInteger(IL_IMAGE_HEIGHT);

    glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
                 ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
                 ilGetData());
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);       // Linear Filtered
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);       // Linear Filtered
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

我可能应该提到这一点,但是有些图像被正确地渲染了,我认为这是因为宽度!=高度。但事实并非如此,宽度为!=高度的图像也会很好地加载。但是对于其他的图片,我仍然会遇到这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 13:53:46

你可能需要打电话

代码语言:javascript
复制
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

在用glTexImage2D上传纹理数据之前。

来自参考页

GL_UNPACK_ALIGNMENT 指定内存中每个像素行开始时的对齐要求。允许的值是1(字节对齐)、2行(行对偶数字节)、4行(字对齐)和8行(行从双字边界开始)。

对齐的默认值是4,您的图像加载库可能会返回带有字节对齐行的像素数据,这解释了为什么有些图像看起来没问题(当宽度是4的倍数时)。

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

https://stackoverflow.com/questions/23193080

复制
相关文章

相似问题

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