zoukankan      html  css  js  c++  java
  • 浮点纹理 opengl

    原文地址:http://wangqingyun84.blog.163.com/blog/static/790836172010323113604/

    因为 glsl部分 绑定fbo 看到要用浮点纹理,搜了一下看了,此地 留意下

    、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里指定纹理的大小不一致时,也会出现内存错误。

    (james: glTexImage3D是个函数指针, 这里直接使用是可以的. 但看到有的文章里是先定义, 再使用:

       PFNGLTEXIMAGE3DPROC glTexImage3D;
       glTexImage3D = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("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),不多说了。

  • 相关阅读:
    Java 缩放图片工具类,创建缩略图、伸缩图片比例
    93、App Links (应用程序链接)实例
    92、App Permissions(权限管理)实例
    MAC系统教程网站
    Android MVP 详解
    Android开发中,那些让你相见恨晚的方法、类或接口
    用Ultra ISO制作启动U盘装系统
    DB2 Magazine 中文版: 访问 iSeries 数据
    Eclipse快捷键大全
    同步灵无线锂电鼠G11-580HX独特“五灵键”
  • 原文地址:https://www.cnblogs.com/dragon2012/p/3235603.html
Copyright © 2011-2022 走看看