函数如下:
glTexImage2D( GLenum target,  
  GLint level,  
  GLint internalformat,  
  GLsizei width,  
  GLsizei height,  
  GLint border,  
  GLenum format,  
  GLenum type,  
  const GLvoid * data); 资料中,24位的RGB图像是这样设置的:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, imageW, imageH, 0, GL_RGBA, GL_UNSIGNED_BYTE, h_Src);1.我的图像是8位或者16位的灰度图像,应该怎么设置呢?
2.二维纹理的宽和高,要求至少64纹理宽,是什么意思?

解决方案 »

  1.   

    glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, imageW, imageH, 0, GL_LUMINANCE8, GL_UNSIGNED_BYTE, h_Src);
    具体的你试一下,平时都是用彩色的
    或者你干脆转成RGBA的灰度图不就行了
      

  2.   

    程序可以运行:
       输入的是8位灰度图像,运算时也是8位灰度图像,输出显示时,把8位灰度图像转换成RGBA(就是R,G,B三个通道的值是一样的),最后显示的结果是正确的。但我觉得这样处理还是比较麻烦,如果不想把8位灰度图像转换为RGBA,应该怎么理解以下问题:
    void glTexImage2D(GLenum target, GLint level, GLint internalFormat,
    GLsizei width, GLsizei height, GLint border,
    GLenum format, GLenum type, const GLvoid *texels);
    1.GL_LUMINANCE8与GL_LUMINANCE有什么区别,format参数只有GL_LUMINANCE格式,没有GL_LUMINANCE8格式
    2.从openGL3.0开始,interformat增加了一些浮点参数,像GL_R16F,GL_R32F,分别表示16位的浮点数据,32位的浮点数据,为什么没有GL_R8F呢,8位浮点怎么表示呢?
    3.在《openGL编程指导-第七版》中看到:纹理映射只支持RGBA模式(Keep in mind that texture mapping works only in RGBA mode. Texture
    mapping results in color-index mode are undefined)怎么理解呢?