Hello Tiger的专栏

Sitting,Waiting,Wishing

给新手的opengl纹理使用小心得

     1、glGenTextures(GLsizei n,GLuint  *textures)返回n个未用的纹理对象标识符,将标识符存在textures这个数组中。返回的标识符大于0即有效。如果标识符过大也是无效。我曾经获得一个特别大的标识符,因为我在构造函数里调用了,此时没有RC(render context),即渲染上下文。

2、glDeleteTextures(GLsizei n,GLuint  *textures),和glGenTextures中参数对应,删除textures开始的n个标识符相关联的纹理对象,释放显存。

3、glTexImage3D不是opengl1.1标准里的,要使用,首先要获得函数入口地址: glTexImage3D = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");否则,会出现内存错误,Access Violation at 0xC0000005或者Access Violation at 0xC0000000,很好理解,因为这时候 glTexImage3D 等于NULL。数组大小和glTexImage3D里指定纹理的大小不一致时,也会出现内存错误。

4、我们知道非GL_TEXTURE_RECTANGLE_ARB纹理,纹理坐标都要归一化。其实纹理的数值也被归一化了。比如   glTexImage3D(GL_TEXTURE_3D,
                                              0,          
                                             GL_RGBA16,    
                                             staticInfo->DataSize[0],
                                             staticInfo->DataSize[1],
                                             staticInfo->DataSize[2],     
                                             0,                 
                                            GL_RGBA,
                                            GL_UNSIGNED_SHORT,
                                            data);

这里data在[0,65535]之间,在显存里对应的是在[0/65535,65535.0/65535]之间。type参数GL_UNSIGNED_SHORT表示的是像素数据在主内存中的存储格式,一个像素在显存里如何储存仅由internal format参数决定。这里internal format如果设置为GL_RGBA16,则表示象素存储为16位整数的RGBA格式。如果要表示浮点纹理,可以使用GL_ARB_texture_float扩展,包括GL_RGB16F_ARB, GL_RGBA16F_ARB, GL_RGB32F_ARB, GL_RGBA32F_ARB等。其中16F表示半精度浮点数。

glTexImage3D(GL_TEXTURE_3D,
                                              0,          
                                             GL_RGBA16F_ARB,    
                                             staticInfo->DataSize[0],
                                             staticInfo->DataSize[1],
                                             staticInfo->DataSize[2],     
                                             0,                 
                                            GL_RGBA,
                                            GL_FLOAT,
                                            data);

要表示浮点纹理当然还可以通过帧缓冲对象(FBO),不多说了。

阅读更多
个人分类: opengl
想对作者说点什么? 我来说一句

GPU-FBO-1【转】

GPU-FBO-1

hongqiang200 hongqiang200

2010-08-01 16:16:00

阅读数:1154

没有更多推荐了,返回首页

不良信息举报

给新手的opengl纹理使用小心得

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭