原文地址: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),不多说了。

浮点纹理 opengl的更多相关文章

  1. OpenGL: 纹理采样 texture sample

    Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...

  2. OpenGL ES: 纹理采样 texture sample

    Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...

  3. openGL 纹理05

    纹理(Texture) 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分. 这样每个顶点就会关联着一个纹理坐标(Texture Coordinate) 用来标 ...

  4. OpenGL ES 详解纹理生成和纹理映射步骤以及函数

    通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...

  5. Android OpenGL ES(七)----理解纹理与纹理过滤

    1.理解纹理 OpenGL中的纹理能够用来表示图像.照片,甚至由一个数学算法生成的分形数据.每一个二维的纹理都由很多小的纹理元素组成.它们是小块的数据,类似于我们前面讨论过的片段和像素.要使用纹理,最 ...

  6. KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2796 上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的Op ...

  7. opengl纹理映射总结

    大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...

  8. LearnOpenGL学习笔记(五)——纹理

    在设计物体表面时,很多时候我们不满足于一种颜色或者几种简单颜色,我们希望是丰富多彩的图案,或者说我们提供给它的图片.这样一个顶点一个顶点的去指定那是行不通了,我们不可能把所有顶点用数字去表达出来,必须 ...

  9. 初试PyOpenGL四 (Python+OpenGL)GPU粒子系统与基本碰撞

    这篇相当于是对前三篇的总结,基本效果如下: 在初试PyOpenGL一 (Python+OpenGL)讲解Pyopengl环境搭建,网格,球体,第一与第三人称摄像机的实现.在初试PyOpenGL二 (P ...

随机推荐

  1. Kafka剖析:Kafka背景及架构介绍

    <Kafka剖析:Kafka背景及架构介绍> <Kafka设计解析:Kafka High Availability(上)> <Kafka设计解析:Kafka High A ...

  2. maven(2)------maven构建项目

    一  下载maven 官网地址: http://maven.apache.org/download.cgi 如图: 可以下载历史版本. 二 windows下maven配置 1. 解压下载后的包,解压后 ...

  3. linux下调试core的命令

    在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开 ...

  4. Along with all the above benefits, you cannot overlook the space efficiency and performance gains in using DataFrames and Dataset APIs for two reasons.

    Of all the developers’ delight, a set of APIs that makes them productive, that are easy to use, and ...

  5. JS转换HTML转义符,防止javascript注入攻击,亲测可用

    function removeHtmlTab(tab) {  return tab.replace(/<[^<>]+?>/g,'');//删除所有HTML标签 } functi ...

  6. hive 启动 Specified key was too long; max key length is 767 bytes解决办法

    解决方案: 在mysql机器的上命令行中运行: alter database hivemanual character set latin1; 问题解决.

  7. hud1700(计算几何——求等边三角形)

    题意:圆心在原点,一个坐标(x,y)在圆上,通过这个点画一个三角形在圆内,三角形其顶点都在圆上,要求三角形的周长最大,输出满足这样条件的三角形的另两个坐标..... 思路:有一个公式是把一个向量平移多 ...

  8. C#处理文本文件TXT实例详解(转)

    作者:安静平和 字体:[增加 减小] 类型:转载 时间:2015-02-02我要评论 这篇文章主要介绍了C#处理文本文件TXT的方法,以实例形式详细分析了txt文本文件的读取.修改及打印等功能的实现技 ...

  9. iOS-打包成ipa的4种方法

    打包ipa的前提 1.证书的申请和设置和上面文章的一样 从第一步到第四步都是一样的http://www.cnblogs.com/sunfuyou/p/5900592.html2.还有第六步的 1-3都 ...

  10. oracle中普通视图和实体试图的区别

    Oracle普通视图和实体化视图比较 来源:茂盛博客|2013-07-30 Oracle普通视图和实体化视图比较 相对于普通的视图来说,实体化视图的不同之处在于实体化视图管理存储数据,占据数据库的物理 ...