当前位置:编程学习 > wap >>

QImage写图片后再做为二维纹理使用,该怎么做?以及GLSL中应该怎么访问这里个纹理的R、G、B、A值呢?

如题。
我现在已经
QImage TransferImage(QSize(256, 256), QImage::Format_ARGB32_Premultiplied);

自己新建了一个图片,然后在里面写入每个像素的R、G、B、A信息,之后使用如下代码加载之前写的图片。:
if(buf.load("Transfer2DTex.bmp"))    tex = QGLWidget::convertToGLFormat(buf);

然后就用在OPENGL代码段里绑定tex这个纹理
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, tex.width(), tex.height(), 0,
                      GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());   

最后绑定纹理是成功了,首先我想问的是,我这样的方法能不能把我把写入的图片的像素的不透明度给穿进去,顺序是A、R、G、B还是R、G、B、A呢?
第二个问题是,如果我绑定纹理成功了,那么在GLSL着色器里面:
texture2D(tex2D, vec2(a,b));

依靠(a,b)来访问二维纹理里的值,那么a,b的范围应该是多少呢?0~1还是0~255呢?

问题比较长~~求耐心指导~~~谢谢了~~ 图片 OpenGL 2d GLSL --------------------编程问答-------------------- 共同学习……
1、设置QGLWidget的时候要指定QGL::AlphaChannel为好。此外如果你使用tex.bits( )会发现纹理是上下颠倒的,应使用tex.mirrored( ).bits( )。
2、不可能是0~255。因为vec2是浮点型的向量。它的取值范围不局限于0~1,因为纹理坐标ST的取值范围不局限于0~1。 --------------------编程问答-------------------- 第一个问题:
Format QImage::format () --------------------编程问答-------------------- 在glsl里面,vec4 basecolor = texture2D(texture, texc.st);
basecolor中的 x y z w,分别对应rgba;
texture2D()的第二个参数应该是一组纹理坐标,通常是0~1,应该是和顶点坐标对应起来的一组值。
对一张图片来说的话,在opengl中通常是:

建议楼主去看一下opengl中glsl相关的书籍.
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,