• 浮点纹理 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根据WSDL生成request的SOAP报文模板
    【转】HttpClient使用Post和Get提交参数
    Java解析Soap XML
    HttpClient示例
    【转】C++标准库和标准模板库
    Capacitor 新一代混合应用“神器” 会代替Cordova吗??
    学习总结之 WebApi 用户登录和匿名登录,及权限验证
    angular9 学习笔记
    Angular Service(服务)
    Angular的启动过程
  • 原文地址:https://www.cnblogs.com/dragon2012/p/3235603.html
Copyright © 2020-2023  润新知