首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL纹理分色

OpenGL纹理分色
EN

Stack Overflow用户
提问于 2013-07-05 19:04:07
回答 2查看 1.4K关注 0票数 3

我在OpenGL环境中使用CImg。当我尝试添加纹理时,每种颜色似乎在纹理中分离成单独的瓷砖。例如,当我尝试使用如下的纹理时:

它在我的程序中如下所示:

我加载的纹理是一个512x512的.bmp文件,保存在Gimp中,颜色深度为24位。我尝试过Gimp允许的其他一些格式,但这些格式只会导致CImg出错。

这是我加载纹理的方式:

代码语言:javascript
运行
复制
glBindTexture(GL_TEXTURE_2D, 13);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

CImg<unsigned char> src("MilkyWay.bmp");
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, src.width(), src.height(), 
    0, GL_RGB, GL_UNSIGNED_BYTE, src);

这就是我显示纹理的方式:

代码语言:javascript
运行
复制
glEnable (GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, 13);
glBegin (GL_QUADS);         
    glTexCoord2f (0.0, 1.0);
    glVertex3f (-120.0, 120.0, 0.0);
    glTexCoord2f (1.0, 1.0);
    glVertex3f (120.0, 120.0, 0.0);
    glTexCoord2f (1.0, 0.0);
    glVertex3f (120.0, -120.0, 0.0);
    glTexCoord2f (0.0, 0.0);
    glVertex3f (-120.0, -120.0, 0.0);
glEnd ();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-05 20:23:14

CImg以非交错(或“平面”)方式存储通道,但GL期望的是相反的情况。结果就是你所看到的。

你可以重新排列数据(或者让CImg为你做这件事),但是由于通道也倾向于在源格式中交错,让图像库只对它们进行去交错处理,以便在将它们移交给GL之前进行一些中间步骤的重新交错,效率将会很低。相反,我建议使用不同的方法加载您的图像数据,这样它就可以直接使用。

有许多库可以做到这一点,尽管BMP是一种非常容易直接读取的格式。

票数 1
EN

Stack Overflow用户

发布于 2021-04-16 15:38:31

根据here,您还可以使用:

代码语言:javascript
运行
复制
src.permute_axes("cxyz");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17487391

复制
相关文章

相似问题

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