首页 > 学院 > 开发设计 > 正文

Opengl程序(5)

2019-11-06 08:04:41
字体:
来源:转载
供稿:网友

1.void glGenTextures(GLsizei n,GLuint* textures) 在数组textures中返回n个用于纹理对象的当前没有使用的名称。Textures中返回的名称不一定是整数的连续集合。 标记textures中的名称为被使用,它们只有在第一次绑定的时候,才能获取到纹理状态和维数(例如1D,2D或者3D). 0是保留的纹理名,从来不会被glGenTextures()返回。

2.void glBindTexture(GLenum target,GLuint texture) glBindTexture()做三件事。第一,当第一次使用无符号整数值texture而不是0时,创建一个新的纹理对象并赋给那个名称。第二,当绑定先前创建的纹理对象时,将激活这个纹理对象。第三,当绑定texture值为0时,OpenGL将删除与激活的纹理单元特定目标关联的所有的绑定,不留下任何绑定。 当纹理对象初始被绑定的时候,假设目标(target)的维数必须是以下之一:GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D,GL_TEXTURE_1D_ARRAY,GL_TEXTURE_2D_ARRAY,GL_TEXTURE_RECTANGLE,GL_TEXTURE_BUFFER,GL_TEXTURE_CUBE_MAP,GL_TEXTURE_CUBE_MAP_ARRAY,GL_TEXTURE_2D_MULTISAMPLE和GL_TEXTURE_2D_MULTISAMPLE_ARRAY. 初始绑定后,纹理对象的状态重置为特定目标的默认状态。在初始状态中,纹理和采样器属性,例如边界截取(wrapping)模式和最小或最大滤波将设置为默认值,这些可以在OpenGL规范的状态表中找到。 如果texture或者glGenTextures()先前创建的名称不是零,那么将生成GL_INVALID_OperaTION错误。如果texture是已经存在的纹理对象的名称(例如它已经被绑定到任意目标),并且如果texture的维数与target的维数不匹配,那么将生成GL_INVALID_OPERATION错误。

3.void glActiveTexture(GLenum texture) 选择当前被纹理函数改变的纹理单元。texture是形式为GL_TEXTUREi的符号常量,其中i在0到k-1范围内,其中k是纹理单元的最大数目。GL_TEXTUREi的值等于GL_TEXTURE0+i.

4.GLboolean gllsTexture(GLuint texture) 如果texture是已经被绑定的纹理的名称并且还没有被删除,将返回GL_TRUE,如果texture是零或者是一个已经不存在的纹理的名称的非零值,将返回GL_FALSE.

5.void glDeleteTextures(GLsizei n,const GLuint* textures); 删除n个使用数组textures的元素来命名的纹理对象,被释放的纹理名可以重新使用(例如,被glGenTextures()释放) 如果删除当前绑定的纹理, 那么绑定变为默认纹理,即使glBindTexture()使用texture的值为零时被调用。在删除不存在的纹理名称或者纹理的名称为零时,这些尝试将被忽略而不生成错误。

6.void glTexStorage1D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width) void glTexStorage2D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height); void glTexStorage3D(GLenum target,GLsizei levels,GLenum internalFromat,GLsizei width,GLsizei height,GLsizei depth) 为当前绑定到target的纹理对象设置(immutable)纹理存储。用glTexStorage1D()为1维纹理设置存储,对于这个函数,target必须是GL_TEXTURE_1D.用glTexStorage2D()来设置存储,如果target必须是GL_TEXTURE_1D_ARRAY,则为1维纹理数组设置存储,如果target是GL_TEXTURE_2D,则为2维纹理设置存储。对于1维纹理数组,width设置纹理的范围,而height设置数组中切片的数目。对于2维纹理,width和height设置纹理大小。用glTexStorage3D()来设置存储存储,如果target是GL_TEXTURE_2D_ARRAY,则为2维数组纹理设置存储,如果target是GL_TEXTURE_3D,则为3维纹理设置存储。对于2维数组纹理,width和height为每个切片设置大小,depth设置数组中切片的数目。对于3维纹理,width,height和depth为纹素数组设置大小。

7.void glTexStorage2DMultisample(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations) void glTexStorage3DMultisample(GLenum target,GLsizei samples,GLenum internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsample locations); 为当前绑定到target的多重采样纹理对象设置纹理存储。对于glTexStorage2DMultisample(),target必须是GL_TEXTURE_2D_MULTISAMPLE,它被用来设置2维多重采样纹理的存储。Width和height设置纹理的大小。 用glTexStorage3D()来为2维多重采样数组纹理设置存储。target必须是GL_TEXTURE_2D_MULTISAMPLE_ARRAY.对于2维多重采样数组纹理,width和height设置每个切片的大小,depth设置数组中切片的数目。在这两个函数中,samples设置纹理采样的数目。如果fixedsamplelocations是GL_TRUE,那么OpenGL为纹理中每个纹素的相同样本使用相同的子纹素位置。如果是GL_FALSE,那么OpenGL为每个纹素给定的样本选择空间变化的位置。

8.void glTexImage1D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei border,GLenum format,GLenum type,const void* data) void glTexImage2D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei height,Glint border,GLenum format,GLenum type,const void* data); void glTexImage3D(GLenum target,Glint level,Glint internalFormat,GLsizei width,GLsizei height,GLsizei depth,Glint border,GLenum format,GLenum type,const void* data); 函数glTexImage1D()、glTexImage2D()和glTexImage3D()用来设置可变的存储,也可以分别为1D、2D或者3D纹理的一个mipmap级选择性的提供初始图像数据。另外,glTexImage2D()和glTexImage3D()也可以用来为1D或者2D数组纹理的一个mipmap级设置存储的图像数据。 参数width、height和depth(如果提供)设置纹素中纹素数组的宽度、高度和深度。对于数组纹理,height设置ID数组纹理中切片的数目,depth设置2D数组纹理中切片的数目。 internalFormat设置OpenGL用来存储纹理中纹素使用的格式。Data设置内存中初始纹素数据的位置。如果将一个缓冲绑定到GL_PIXEL_UNPACK_BUFFER绑定点,则从这个缓冲对象读出纹素数据,data被解释为从缓冲对象读取数据的偏移。如果没有缓存绑定到GL_PIXEL_UNPACK_BUFFER,那么data被解释为应用程序内存中的数据指针,如果它为空指针,这种情况下纹理的初始内容是未定义的。初始纹素数据的格式用format和type的组合来指定。OpenGL将把设置的数据从这个格式转换为internalFormat设置的内部格式。

9.void glTexImage3DMultisample(GLenum target,GLenum samples,Glint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLboolean fixedsamplelocations); void glTexImage2DMultisample(GLenum target,GLenum samples,Glint internalFormat,GLsizei width,GLsizei height,GLboolean fixedsamplelocations) 函数glTexImage2DMultisample()和glTexImage3DMultisample()分别为2维和2维数组多重采样纹理设置存储。对于glTexImage2DMultisample(),target必须是GL_TEXTURE_2D_MULTISAMPLE.对于glTexImage3DMultisample(),target必须是GL_TEXTURE_2D_MULTISAMPLE_ARRAY.与非多重采样纹理不同的是,不需要为多重采样纹理设置初始数据,并且多重采样纹理没有mipmap.width和height设置纹理的宽度和高度。对于glTexImage3DMultisample()设置的2维数组纹理,depth设置数组中切片的数目。 如果fixedsamlelocations是GL_TURE,那么每个纹素中的样本位置对于给定的样本数量通常是相同的,不随纹素数组的位置而变化。如果fixedsamlelocaions是GL_FALSE,那么OpenGL对于纹素中样本基于数组中的位置或者一些其他的准则将使用一组不同的位置。

10.void glTexSubImage1D(GLenum target,Glint level,Glint xoffset,GLsizei width,GLenum format,GLenum type,const void* data) void glTexSubImage2D(GLenum target,Glint level,Glint xoffset,Glint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const void* data); void glTexSubImage3D(GLenum target,Glint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const void* data) 用data中设置的新数据替换纹理的一个区域。参数level,format和type与glTexImage1D()到glTexImage3D()中的参数有相同的含义。Level是mipmap级数。Format和type描述指针data指向的纹理图像数据的格式和类型。 data包含子图像的纹理数据。width、height和depth(如果有)是将要替换当前纹理图像的全部或者部分区域的大小。xcoffset,yoffset和zoffset分别表示x,y,z方向上的纹素偏移。target表示纹理对象已经绑定的纹理目标。如果target表示一维数组纹理,那么target是2维数组纹理、cubemap映射或者cubemap映射数组纹理,那么zoffset和depth分别表示将要更新的第一层和层数,否则他们被看做纹素坐标。 设置的区域可能不包括在原来定义的纹理数组的范围之外的任意纹素。

11.void glCopyTexImage1D(GLenum target,GLint level,GLint internalFormat,Glint x,Glint y,GLsizei width,GLint border) void glCopyTexImage2D(GLenum target,GLint level,GLint internalFormat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border) 从当前帧缓存中拷贝绑定到激活的纹理单元target的纹理的纹素。x和y设置从帧缓存中拷贝源区域的水平和垂直偏移。width和height(如果有)分别设置为区域的高度和宽度。internalFormat设置结果纹素存储使用的格式。border是保留值,必须是零。

12.void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width) void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height) void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLint y,GLsizei width,GLsizei height) 使用来自帧缓存的图像数据替换全部或者部分当前存在的,在绑定到激活纹理单元的target纹理对象的纹理图像连续的子区域。x和y设置帧缓存中要拷贝的区域的x,y偏移。width和height(如果有)分别要设置拷贝的区域高度和宽度。xoffset,yoffset和zoffset(如果有)设置目标纹理中目标区域的原点。如果target是1维数组纹理,那么yoffset是纹素的1维区域将写入纹理的层数,否则它是目标区域原点的y坐标。如果目标是2维数组、立方体贴图或者立方体贴图数组纹理,那么zoffset是包括目标区域的纹理层数的索引,否则是3维纹理中目标区域的z坐标。

13.void vglLoadImage(const char* filename,vglImageData* image) void vglUnloadImage(vglImageData* image) vglLoadImage()从磁盘的一个文件里载入一个图像。Filename设置要加载的文件的名字。Image是vglImageData结构的地址。如果成功,将用图像的参数来填充。如果失败,将清除图像。vglInloadImage()应该用来释放前面成功调用vglLoadImage()占用的所有资源。 struct vglImageMipData { GLsizei width; //mipmap级的宽度 GLsizei height; //mipmap级的高度 GLsizei depth; //mipmap级的深度 GLsizeiptr mipStride; //内存中mipmap级之间的距离 GLvoid* data; //数据的指针 }; struct vglImageData { GLenum target; //纹理目标(2D、立方体映射等) GLenum internalFormat; //推荐的内部格式 GLenum format; //内存中的格式 GLenum type; //内存中的类型 GLenum swizzle[4]; //RGB的swizzle特性 GLsizei mipLevels; //mipmap级的数目 GLsizei slices; //切片的数目 GLsizeiptr sliceStride; //数组纹理中切片之间的距离 GLSizeiptr totalDataSize; //为纹理分配的所有数据 vglImageMipData mip[MAX_TEXTURE_MIPS]; //实际的mipmap数据 }

14.GLuint vglLoadTexture(const char* filename,GLuint texture,vglImageData* image) 从磁盘载入纹理并且放进OpenGL纹理对象。Filename是要加载的文件名字。Texture是加载数据的纹理对象名称。如果texture是零,那么vglLoadTexture()将创建一个新的纹理对象来放置数据。Image是用来返回图像的信息,图像数据不会被释放。应用程序使用vglUnloadmage()来释放与图像关联的任意资源。如果image是NULL,则将使用内部数据结构来加载图像,并且结果的图像数据将被自动释放。如果成功,vglLoadTexture()将返回被加载进纹理图像的纹理对象。如果texture不是零,那么返回值将等于texture,否则是新创建的纹理对象。如果失败,vglLoadTexture()返回零。

15.void glGenTexImage(GLenum target,GLint lod,GLenum format,GLenum type,GLvoid* image) 从绑定到target的纹理中获取纹理图像。Target必须是GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D、GL_TEXTURE_1D_ARRAY、GL_TEXTURE_2D_ARRAY、GL_TEXTURE_CUBE_MAP_ARRAY,或者GL_TEXTURE_RECTANGLE。另外,目标GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_NEGTIVE_X、GL_TEXTURE_CUBE_MAP_POSITIVE_Y、GL_TEXTURE_CUBE_MAP_NEGTIVE_Y、GL_TEXTURE_CUBE_MAP_POSITIVE_Z和GL_TEXTURE_CUBE_MAP_NEGIVE_Z可以用来指示一个cubemap映射纹理的对应面。Lod是层次细节数。format和type是需要的数据像素格式和类型。Image可以解释为图像数据将存放的内存中的地址。如果将一个缓存绑定到GL_PIXEL_PACK_BUFFER目标,那么image解释为图像数据存放在缓存中的偏移。

16.void glPixelStorei(GLenum pname,GLint param) void glPixelStoref(GLenum pname,GLfloat param) 像素存储参数pname设置为param设置的值。Pname必须是Pixel Unpacking参数名(GL_UNPACK_ROW_LENGTH,GL_UNPACK_SWAP_BYTES,GL_UNPACK_SKIP_PIXELS,GL_UNPACK_SKIP_ROWS,GL_UNPACK_SKIP_IMAGES,GL_UNPACK_ALIGNMENT,GL_UNPACK_IMAHGE_HEIGHT,或者GL_UNPACK_LSB_FIRST)之一,或者是像素packing参数名(GL_PACK_ROW_LENGTH,GL_PACK_SWAO_BYTES,GL_PACK_SKIP_PIXELS,GL_PACK_SKIP_ROWS,GL_PACK_SKIP_IMAGES,GL_PACK_ALIGNMENT,GL_PACK_IMAGE_HEIGHT,或者GL_PACK_LSB_FIRST)之一。

17.void glGenSamplers(GLsizei count,GLuint* samplers) 为数组samplers中的采样器对象返回count个目前没有使用的名称。Samplers中返回的名称没有必要时连续的整数。 samplers中的名称标为被使用,但是当它们第一次被绑定的时候,需要采样器状态。 零是保留值,永远不会被glGenSamplers()返回

18.void glBindSampler(GLuint uint,GLuint samplers) 将名为sampler的采样器对象绑定到下标用unit给定的采样器单元。如果sampler是零,任何当前绑定到采样器单元的采样器对象被解除绑定并且没有对象绑定在它的位置。

19.GLboolean gllsSampler(GLenum id) 如果id是已经存在的采样器对象的名称,则返回GL_TRUE,否则返回GL_FALSE.

20.void glSamplerParameter{fi}(GLuint sampler,GLenum pname,Type param) void glSamplerParameter{fi}v(GLuint sampler,GLenum pname,const Type* param) void glSamplerParameter{I,ui}v(GLuint sampler,GLenum pname,const Type* param); 设置名称用sampler指定的采样器对象的pname给出的参数值为param给出的值。对于glSamplerParameteri(),param是一个整数。对于glSamplerParameterf(),param是一个浮点数。对于glSamplerParameteriv(),param是整数数组的地址。对于glSamplerParameterfv(),param是浮点数组的地址。

21.void glTexParameter{fi}(GLenum target,GLenum pname,Type param); void glTexParameter{fi}v(GLenum target,GLenum pname,const Type* param); void glTexParameterl{i ui}v(GLenum target,GLenum pname,const Type* param) 为当前绑定到激活(active)纹理单元的target纹理对象设置参数pname为param给定的值。对于glTexParameteri(),param是一个整数;对于glTexParameterf(),param是浮点值;对于glTexPartameteriv()和glTexParameterliv(),param是整数数组的地址;对于glTexParameterfv(),param是浮点数组的地址,最后,对于glTexParameterluiv(),param是无符号整数的数组地址。如果pname表示采样器对象的参数之一,那么访问纹理内部默认采样器对象。

22.void glDeleteSamplers(GLsizei count,const GLuint* samplers) 删除count个存储在数组samplers中的采样器名称。删除后,不再使用samplers中的名称,可能再后面的glGenSamplers()调用中返回。

23.Gvec4 texture(gsampler1D tex,float P[,float bias]); Gvec4 texture(gsampler2D tex,vec2 P[,float bias]); Gvec4 texture(gsampler3D tex,vec3 P[,float bias]); Gvec4 texture(gsamplerCube tex,vec3 P[,float bias]); Gvec4 texture(gsampler1D Array tex,vec2 P[,float bias]); Gvec4 texture(gsampler2D Array tex,vec3 P[,float bias]); Gvec4 texture(gsampler2DRect tex,vec2 P[,float bias]); Gvec4 texture(gsamplerCubeArray tex,vec4 P[,float bias]); tex表示的采样器以P表示的纹理坐标来采样纹素。如果启用mipmapping并且提供bias,它用来偏移确定采样mipmap的细节层次计算。返回值是包括采样的纹理数据的向量。


上一篇:VB6和VB.NET的区别

下一篇:MyBatis我来了

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表