博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浮点纹理 opengl
阅读量:6365 次
发布时间:2019-06-23

本文共 1437 字,大约阅读时间需要 4 分钟。

原文地址:

 

因为 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),不多说了。

转载地址:http://jiama.baihongyu.com/

你可能感兴趣的文章
JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html...
查看>>
getParameter和getAttribute的区别
查看>>
自动工作负载库理论与操作(Automatic Workload Repository,AWR)
查看>>
Redis两种方式实现限流
查看>>
CentOS 7 中使用NTP进行时间同步
查看>>
在MongoDB数据库中查询数据(上)
查看>>
Python import其他文件夹的文件
查看>>
Jvm(22),回收策略-----标记清除算法
查看>>
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
查看>>
UNIX 高手的 10 个习惯
查看>>
传值与传引用
查看>>
HDU 1538 A Puzzle for Pirates(海盗分金问题)
查看>>
C# Web Forms - Using jQuery FullCalendar
查看>>
H5移动端知识点总结
查看>>
Sublime-Text-2-pydocstring --- 自动生成python docstring的插件
查看>>
初涉c#设计模式-Observer Pattern-从公司管理系统删单提醒开始
查看>>
UNIX进程环境
查看>>
命名空间和定义和使用
查看>>
学习面试题Day03
查看>>
我最喜欢的jQuery插件模板
查看>>