浮点纹理 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),不多说了。
浮点纹理 opengl的更多相关文章
- OpenGL: 纹理采样 texture sample
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...
- OpenGL ES: 纹理采样 texture sample
Sampler (GLSL) Sampler通常是在Fragment shader(片元着色器)内定义的,这是一个uniform类型的变量,即处理不同的片元时这个变量是一致不变的.一个sampler和 ...
- openGL 纹理05
纹理(Texture) 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分. 这样每个顶点就会关联着一个纹理坐标(Texture Coordinate) 用来标 ...
- OpenGL ES 详解纹理生成和纹理映射步骤以及函数
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了ope ...
- Android OpenGL ES(七)----理解纹理与纹理过滤
1.理解纹理 OpenGL中的纹理能够用来表示图像.照片,甚至由一个数学算法生成的分形数据.每一个二维的纹理都由很多小的纹理元素组成.它们是小块的数据,类似于我们前面讨论过的片段和像素.要使用纹理,最 ...
- KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3
转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2796 上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的Op ...
- opengl纹理映射总结
大概步骤: 1.创建纹理对象,并为他指定一个纹理. 2.确定纹理如何应用到每个像素上. 3.启用纹理贴图 4.绘制场景,提供纹理和几何坐标 过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应, ...
- LearnOpenGL学习笔记(五)——纹理
在设计物体表面时,很多时候我们不满足于一种颜色或者几种简单颜色,我们希望是丰富多彩的图案,或者说我们提供给它的图片.这样一个顶点一个顶点的去指定那是行不通了,我们不可能把所有顶点用数字去表达出来,必须 ...
- 初试PyOpenGL四 (Python+OpenGL)GPU粒子系统与基本碰撞
这篇相当于是对前三篇的总结,基本效果如下: 在初试PyOpenGL一 (Python+OpenGL)讲解Pyopengl环境搭建,网格,球体,第一与第三人称摄像机的实现.在初试PyOpenGL二 (P ...
随机推荐
- CentOS使用EPEL YUM源
刚刚开始学习centos,感觉很不适应,因为好多软件,yum里面居然没有,让我很不爽,一阵狂搜. 原来centos还有一个epel源,果然,不熟悉的东东,处处是坑啊! EPEL (Extra Pack ...
- 【Android】17.1 Bound Services基本概念
分类:C#.Android.VS2015: 创建日期:2016-03-03 一.Bound Services—被绑定的服务 1.什么是Bound Service Bound Service是指通过接口 ...
- C++windows内核编程笔记day13 进程、线程与信号量
Windows进程 进程是一个容器,包括程序运行须要的代码.数据.资源等信息, windows进程的特点: 每一个进程都有自己的ID号 每一个进程都有自己的地址空间.进程之间无法訪问对方的地址空间. ...
- How to add elements to a List in Scala
Scala List FAQ: How do I add elements to a Scala List? This is actually a trick question, because yo ...
- svn show log 不显示作者等信息解决
原因很简单,只需要修改svnserver.conf文件里面:anon-access = read -->修改为 anon-access = none.很诧异吧...修改过后测试没有问题,log可 ...
- sqlserver 关于子查询的优化操作
在对条件需要用到子查询的时候,通常可以通过连接来代替子查询来完成操作,更加高效 SELECT t1.id,t2.columnName,t2.columnType,t1.rownum,t1.cellVa ...
- python爬取百思不得姐视频
# _*_ coding:utf-8 _*_ from Tkinter import * from ScrolledText import ScrolledText import urllib #im ...
- 创建一个动态链接库 (DLL),使用VS2010
在本演练中,您将创建一个动态链接库 (DLL),其中包含可供其他应用程序使用的有用例程.使用 DLL 是一种重用代码的绝佳方式.您不必在自己创建的每个程序中重新实现这些例程,而只需对这些例程编写一次, ...
- 【JS】通过JS实现超市小票打印功能——ActiveX控件
应客户的需求= = ,要在网页端实现打印小票的功能 先来一张打印出的小票效果图(合计明显不对,因为有修改订单功能,请各位忽略) 用什么方法实现呢: 我想应该是有三种吧 1.用第三方的浏览器控件(这个好 ...
- sqlserver被锁的表以及如何解锁
查看sqlserver被锁的表以及如何解锁 查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_en ...