精华内容
下载资源
问答
  • OpenGL运动模糊

    2021-03-20 15:40:40
    OpenGL运动模糊OpenGL运动模糊简介源代码剖析主要源代码 OpenGL运动模糊简介 模糊(运动模糊)是用于快速3D游戏的一种非常流行的技术,其思想是向运动的对象添加模糊。这增强了玩家的真实感。可以用几种方法进行模糊...

    OpenGL运动模糊简介

    模糊(运动模糊)是用于快速3D游戏的一种非常流行的技术,其思想是向运动的对象添加模糊。这增强了玩家的真实感。可以用几种方法进行模糊处理。可能是基于相机运动的模糊相机,也可能是基于对象的模糊相机。在本教程中,我们将介绍一种实现。

    模糊背后的想法是,我们可以为2帧之间的每个渲染像素计算运动矢量。从当前颜色缓冲区中沿该向量取平均值,我们得到代表相应对象运动的像素。就这样。让我们深入研究细节。下面是所需步骤的简要说明,之后我们将继续进行代码本身。

    该方法分为2个阶段-渲染阶段和模糊阶段。
    在渲染过程中,我们渲染到2个缓冲区-常规颜色缓冲区和运动矢量缓冲区。彩色缓冲区存储原始图像,就好像没有模糊一样。运动向量是每个像素的向量,实际上是在当前帧和先前帧之间在屏幕上移动它。
    通过将前一帧的WVP矩阵应用于VS来计算运动矢量。我们使用当前的WVP和上一个WVP将每个顶点的位置从本地空间转换为将两个结果都传递给FS的时间。我们将在FS的裁剪器空间中获取插值位置,然后将它们除以相应的W坐标,将其转换为NDC,这样就完成了它们在屏幕上的投影,现在我们可以从当前位置减去前一个位置并获得运动矢量。矢量将被写入纹理。
    模糊渲染是通过渲染矩形以填充屏幕来实现的。我们为FS中的每个像素获取一个运动矢量,然后沿着该矢量从颜色缓冲区中获取颜色(从当前像素开始)。
    我们计算每个样本的总和,为当前像素分配最大

    展开全文
  • opengl纹理过滤

    2019-09-13 16:45:14
    当三维空间里面的多边形经过坐标变换、投影、光栅化等过程,变成二维屏幕上的一组象素的时候,对每个象素需要到相应纹理图像中进行采样,这个过程就称为纹理过滤。 II.纹理过滤通常分为2种情况: a) 纹理被缩小 GL_...

    I.纹理过滤:

    当三维空间里面的多边形经过坐标变换、投影、光栅化等过程,变成二维屏幕上的一组象素的时候,对每个象素需要到相应纹理图像中进行采样,这个过程就称为纹理过滤。

    II.纹理过滤通常分为2种情况: 
    a) 纹理被缩小 GL_TEXTURE_MIN_FILTER 
    比如说一个8 x 8的纹理贴到一个平行于xy平面的正方形上,最后该正方形在屏幕上只占4 x 4的象素矩阵,这种情况下一个象素对应着多个纹理单元。
    b) 纹理被放大 GL_TEXTURE_MAG_FILTER 
    纹理被放大这种情况刚好跟上面相反,假如我们放大该正方形,最后正方形在屏幕上占了一个16 x 16的象素矩阵,这样就变成一个纹理单元对应着多个象素。

    III.几种不同的纹理过滤方式: 
    1.最近点采样 GL_NEAREST
    2.线性纹理过滤(双线性过滤)GL_LINEAR
    3.mipmap纹理过滤(三线性过滤) GL_LINEAR_MIPMAP_LINEAR
    4.各向异性过滤

    a) 最近点采样
    最近点采样,不进行任何过滤操作的速度最快也最简单,只是针对每一个象素对最接近它的纹理单元进行采样,可用于上面两种情况。但是这种纹理过滤方法的效果最差,在屏幕显示的图像会显得十分模糊。
     

    b)双线性过滤 Bilinear Interpolation 
    线性过滤也比较简单,每个象素要对最接近它的2 x 2的纹理单元矩阵进行采样,取4个纹理单元的平均值,也可用于上面的两种情况。这种纹理过滤方法的效果比上面的要好很多。
    这是一种较好的材质影像插补的处理方式,会先找出最接近像素的四个图素,然后在它们之间作差补效果,最后产生的结果才会被贴到像素的位置上,这样不会看到“马赛克”现象。这种处理方式较适用于有一定景深的静态影像,不过无法提供最佳品质。其最大问题在于,当三维物体变得非常小时,一种被称为Depth Aliasing artifacts(深度赝样锯齿),也不适用于移动中的物件。
     

    c)三线性过滤 Trilinear Interpolation 
    三线性过滤相对的比较复杂,它只能用于纹理被缩小的情况,需要先构造纹理图像的mipmap,mip的意思是“在狭窄的地方里的许多东西”,mipmap就是对最初的纹理图像构造的一系列分辨率减少并且预先过滤的纹理图。对于一个8 x 8的纹理来说需要为它构造4 x 4、2 x 2、1 x 1这三个mipmap。如果正方形被缩小到在屏幕上占6 x 6的象素矩阵,一个象素的采样过程就变成这样,首先是到8 x 8的纹理图中进行对最接近它2 x 2的纹理单元矩阵进行采样(也就是上面的线性过滤);其次是到4 x 4的纹理图中重复上面的过程;接着把上面两次采样的结果进行加权平均,得到最后的采样数据。可以看出整个过程一共进行了三次的线性过滤,所以这种方法叫做三线性过滤,它的效果是三种纹理过滤方法里面最好的。
    这是一种更复杂材质影像插补处理方式,会用到相当多的材质影像,而每张的大小恰好会是另一张的四分之一。例如有一张材质影像是512×512个图素,第二张就会是256×256个图素,第三张就会是128×128个图素等等,总之最小的一张是1×1.凭借这些多重解析度的材质影像,当遇到景深极大的场景时(如飞行模拟),就能提供高品质的贴图效果。一个“双线过滤”需要三次混合,而“三线过滤”就得作七次混合处理,所以每个像素就需要多用21/3倍以上的计算时间。还需要两倍大的存储器时钟带宽。但是“三线过滤”可以提供最高的贴图品质,会去除材质的“闪烁”效果。对于需要动态物体或景深很大的场景应用方面而言,只有“三线过滤”才能提供可接受的材质品质。

    d)各向异性过滤 Anisotropic Interpolation 
    各向异性过滤是最新型的过滤方法,它需要对映射点周围方形8个或更多的像素进行取样,获得平均值后映射到像素点上。对于许多3D加速卡来说,采用8个以上像素取样的各向异性过滤几乎是不可能的,因为它比三线性过滤需要更多的像素填充率。但是对于3D游戏来说,各向异性过滤则是很重要的一个功能,因为它可以使画面更加逼真,自然处理起来也比三线性过滤会更慢。
    各异向性纹理过滤不是单独使用而是和前面所述的其他过滤方法结合一起使用的。它在取样时候,会取8个甚至更多的像素来加以处理,所得到的质量最好。
    假设Px为纹理在x坐标方向上的缩放的比例因子;Py为纹理在y坐标方向上的缩放的比例因子;Pmax为 Px和Py中的最大值;Pmin为Px和Py中的最小值。当Pmax/Pmin等于1时,也就是说Px等于Py,纹理的缩放是各同向的;但是如果Pmax /Pmin不等于1而是大于1,Px不等于Py,也就是说纹理在x坐标方向和在y坐标方向缩放的比例不一样,纹理的缩放是各异向的,Pmax/Pmin代表了各异向的程度。
    举个例子来说,64 x 64的纹理贴到一个开始平行于xy平面的正方形上,但是正方形绕y轴旋转60度,最后投影到屏幕上占了16 x 32的象素矩阵。纹理在x坐标方向上缩放的比例因子为64/16等于4,在y坐标方向缩放的比例因子为64/32等于2,Pmax等于4,Pmin等于 2。缩放的各异向程度为2。当把各异向性过滤和线性过滤结合起来的时候,应该是对最接近象素的4 x 2的纹理单元矩阵采样才合理,因为一个象素在x坐标方向上对应了更多的纹理单元(Px > Py)。即使是纹理在一个轴方向上缩小而在另一个轴方向上放大,处理的过程也是一样的(注意的是如果纹理在一个轴方向上缩小而在另一个轴方向上放大,OpenGL仍然把它当作是纹理被缩小的情况,将采用为纹理缩小情况设置的过滤方法为基本过滤方法,然后再加上各异向性过滤)。假设被贴图的正方形最后在屏幕上占了一个128 x 32 的象素矩阵,纹理在x坐标方向上缩放的比例因子为64/128等于0.5,在y坐标方向缩放的比例因子为64/32等于2,由于Py > Px 且 Pmax/Pmin等于4,所以当把各异向性过滤和线性过滤结合起来的时候,应该对最接近象素的2 x 8的纹理单元矩阵进行采样。三线性过滤和各异向性过滤结合的过滤方法的步骤跟前面单独的三线性过滤方法大致是一样的,只是前面两步采用了各异向性过滤和线性过滤结合的方法。
    通常情况下采取线性过滤或者三线性过滤就可以得不错的效果,但是在某些特殊的情况下,特别是把一个都是线状条纹的纹理图贴到一个绕x或者是y轴旋转角度很大的多边形上的时候,比如将人的头发纹理贴到构成人的头顶的多边形,即使是三线性过滤的效果也不能令人满意,只有将各异向过滤方法和三线性过滤或者线性过滤的方法结合起来才能得到完美的效果。

      //用OpenGL实现支持的最大各异向程度设置最大各异向程度参数
      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, xxx);
      // 注意:这里的 xxx 代表 各向异性过滤 的异向程度参数
      // 你可以设置为:4 , 8 , 16 等。这里也可以在 InitGL() 驱动 OpenGL 函数里写上
      int LrgSupAni;
      glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &LrgSupAni);
      那么 xxx 就得小于或等于 LrgSupAni。


    转载于:https://my.oschina.net/u/172686/blog/517568

    展开全文
  • 用VB.net OpenTK写的一个GLSL版本330 + VAO的使用方法DEMO。可以简单了解着色模型ShaderModel的DEMO。并且shader实现了一个模糊效果。
  • opengl纹理缩放的原理

    2020-07-14 10:46:18
    OpenGL处理3dlut映射的时候,lut滤镜数据输入到纹理后,不经过任何处理直接输出,图像两边会有错误的像素点出现,如下(更换了图片,以便验证结果的一般性) 如上图,在边缘出现了模糊的颜色 二、原因 在我的测试...

    一、背景

    用OpenGL处理3dlut映射的时候,lut滤镜数据输入到纹理后,不经过任何处理直接输出,图像两边会有错误的像素点出现,如下(更换了图片,以便验证结果的一般性)
    在这里插入图片描述如上图,在边缘出现了模糊的颜色

    二、原因

    在我的测试demo中有以下代码设置纹理的属性

    // 当纹理坐标超出范围时,重复当前纹理
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);	
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);	
    // 纹理放大和缩小均使用线性化插值
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    

    然后我生成了一个只有四个像素的图片,将其输入到OpenGL,放大到400*400,然后输出,原图和输出结果如下
    在这里插入图片描述
    原因已经渐渐清晰了,再看下图
    在这里插入图片描述如上图所示,可以很清晰的看到,图像放大的原理是先把四像素图片填充到原图部分对应的四个位置,然后以这四个位置为基准,剩余的未填充像素做插值,边缘部分的像素插值需要利用插值部分的像素点,因此纹理重复设置会影响到图片放大后的效果。再结合上面的代码可知,glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 这行代码决定了插值部分是直接重复原图部分。glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);决定了图像放大后的插值是线性插值,当然,GL_LINEAR也可以换成其他值,比如GL_NEAREST,表示直接取临近点像素,不插值

    三、拓展

    关于缩小的原理,可以在这个网站去看,原理类似
    https://webgl2fundamentals.org/webgl/lessons/webgl-3d-textures.html

    展开全文
  • OpenGL纹理、多级渐远纹理

    千次阅读 2018-12-22 11:15:16
    每个顶点都需要知道自己对应着纹理的那个部分,从而可以进行纹理采样,这就是通过为顶点设置纹理坐标来实现的。 之后对于图形的其它片段来说,根据片段插值来得到自己的采样坐标。 纹理坐标起始于(0,0),在纹理...

    一.基础概念讲解

    纹理坐标

    每个顶点都需要知道自己对应着纹理的那个部分,从而可以进行纹理采样,这就是通过为顶点设置纹理坐标来实现的。

    之后对于图形的其它片段来说,根据片段插值来得到自己的采样坐标。

    纹理坐标起始于(0,0),在纹理图片的左下角,终于(1,1),纹理图片右上角。那么当我们为顶点指定了纹理坐标的时候,如果不在(0,1)这个范围区间会怎样,这里就需要提到纹理环绕方式了,

    也就是OpenGL是如何处理不在(0,1)内的纹理坐标的,主要有两种思路,一种是重复纹理图像,从而衍生出两种方式,

    GL_REPERAT:默认,重复纹理图像,

    GL_MIRRORED_REPEATED:以镜像的方式重复

    还有一种方式是讲纹理坐标截取到(0,1),也就是小于0的视为0,大于1的视为1,这种时候,大于(0,1)的纹理坐标就会被取图片的边界,或者是可以用指定颜色进行填充。

    GL_CLAMP_TO_EDGE/GL_CLAMP_TO_BORDER,

    纹理方式的设置可以通过glTexParameter*来对单独的一个坐标轴进行设置,这个函数是针对纹理来设置纹理的参数的,而且当它设置以后就会保持状态直到被再次修改。

    举例:void glTexParameterf(GLenum target,GLenum pname,GLfloat param);

    第一个参数是指定目标类型,有1D,2D,等等

    第二个参数是指定修改的参数类型,像纹理环绕方式:GL_TEXTURE_WRAP_S|GL_TEXTURE_WRAP_T

    第三个参数是参数类型的值,以纹理环绕中的重复举例:GL_REPEAT

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_MIRRORED_REPEAT);

    纹理过滤(纹理滤波)

    纹理坐标,它不是离散的,它可以是任意浮点值,而纹理就是一个个像素点组成的图片,纹理采样就是根据纹理坐标去提取相应的纹理像素,但是纹理坐标不是离散的,而纹理像素是离散的,它们怎么能够对应起来呢,纹理过滤其实就是纹理采样时纹理坐标和纹理像素之间的一种映射方式(简单来说,它使得同一个纹理可以被用于不同的形状,尺寸和角度,同时尽可能减少显示时的模糊和闪烁)。我们可以把纹理像素看成一个个小的正方形,讨论一下OpenGL最常用的两种方式,

    GL_NEAREST,邻近过滤,这是OpenGL默认的过滤方式,它是选择中心点即小正方形中心点距离纹理坐标最近的那个纹理像素作为采样结果。

    GL_LINEAR,线性过滤,它会基于纹理坐标附近的纹理像素计算一个插值,而纹理像素中心距离纹理坐标越近,那么该纹理像素在采样结果中占有的权重就越大。

    当进行放大缩小操作的时候,可以设置纹理过滤的选项。

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    多级渐远纹理

    在一个场景中,远处的物体和近处的物体有相同高的分辨率,由于远处的物体只能产生很少的片段(这个很好理解吧,透视投影中,近大远小,非常远的物体看起来就像一个点),OpenGL使用高分辨率纹理为这些片段后去正确的颜色值是很困难的,它需要对一个跨过纹理很大部分的片段只拾取一个颜色,这一句话可能不太好理解,举个例子,场景中有两个大小相同的正方体A,B,A距离相机比较近,B距离相机比较远,那么A占有的片段就比较多,要知道一个片段是只能取一个颜色的(想一想片段处理器逐片段处理的时候每次返回一个颜色值),B占有的片段就比较少,我们讨论一下极限值,B假如就占有一个片段,那这个片段就只能有一个颜色值,此时B占有的片段是对应着整个纹理的,那它如何来拾取纹理颜色呢,而与B相比,A在进行纹理采样时就比较好采集。所以,对B来说它应该选用一个低分辨率的图片,假设它只有一个片段,而B的纹理是一个只有一个像素的图片,那么颜色不就正好对应上了吗,而且低分辨率的图片还大大节省了内存资源。

    OpenGL使用多级渐远纹理(Mipmap)来解决这个问题,它就是一系列的纹理图像,后一个纹理是前一个纹理的1/2,依次类推。

    它的原理就是把摄像机到物体的距离与阙值作比较,在不同的距离空间内选用不同的纹理图像。

    OpenGL有一个生成Mipmap的函数,glGenerateMipmap();

    在渲染中切换多级渐远纹理级别(Level)时,OpenGL在两个不同级别的多级渐远纹理层之间会产生不真实的生硬边界,生硬边界到底什么意思呢:这个通常在阙值处出现,比如纹理级别2和3在它对应的阙值距离处就会因为两张纹理不同的分辨率产生生硬边界,切换多级渐远纹理级别时,我们也可以在两个纹理级别之间进行NEAREST和LINEAR过滤。

     

    二、纹理对象的生成

    图片资源的加载:

    stb_image.h是一个非常流行的单头文件图像加载库,并且很容易加载到工程中,下载地址

    下载之后要将它添加到工程中,之后还需要再创建一个相同名称的cpp文件,输入一下代码即可。

    #define STB_IMAGE_IMPLEMENTATION
    #include "stb_image.h"

    通过第一个宏定义,预处理器变会修改头文件,等于把头文件变成一个cpp文件,至此配置就完成了,还是很简单方便的。

    int width, height, nrChannels;
    unsigned char* data=stbi_load("res/snow.jpg",&width,&height,&nrChannels,0);

    使用stbi_load函数加载图片,并存储到一个char*类型的变量data中供后面使用。

    纹理的生成:

    纹理对象和之前的缓冲对象等等都是使用一样的思路,先生成纹理对象的名字,也就是它的ID,然后将其绑定到相应的对象类型上,绑定完成以后就可以使用一些配置函数来配置我们这个纹理对象了。

    unsigned int texture;
    glGenTextures(1,&texture);
    glBindTexture(GL_TEXTURE_2D,texture);
    
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_MIRRORED_REPEAT);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    
    if (data) {
    	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    	glGenerateMipmap(GL_TEXTURE_2D);
    }
    else {
    	cout << "Failed to load texture!" << endl;
    }
    
    stbi_image_free(data);

    注意最后一句代码,生成了纹理和相应的多级渐远纹理后,要释放图像的内存。

    应用纹理

    将纹理应用到着色器,准确的说是片段着色器,首先我们需要传入纹理坐标,也就是为顶点数据添加纹理坐标,这一部分和之前的位置数据和颜色数据一样,就不细讲了,不知道的可以参考:https://learnopengl-cn.github.io/01%20Getting%20started/04%20Hello%20Triangle/

    有了纹理坐标以后,我们得拿到纹理才能得到正确的颜色。

    GLSL有一个供纹理对象使用的内建数据类型,叫做采样器,Sampler,它以纹理类型做后缀,如sampler2D。

    在这里,我们需要先声明一个uniform sampler2D的变量到片段着色器中,之后把纹理赋值给它。

    如果我们在片段着色器声明了多个纹理变量,那么我们如何把程序中的纹理对象和着色器的各个纹理变量对应起来呢。

    纹理单元:

    一个纹理的位置通常称为一个纹理单元。如果程序中只有一个纹理,它的默认纹理单元为0,它是默认的激活的纹理单元。我们通过把纹理单元赋值给采样器来使用相应的纹理,我们一次可以绑定多个纹理,但是要激活对应的纹理单元,举个例子,如果我们要使用两个纹理,我们先通过glUniform1i,将这些纹理单元赋值给相应的采样器,也就是shader里的纹理的名字,让shader里的各个纹理名和纹理单元对应起来,这里tex1和tex2代表shader里声明的两张纹理的变量,然后分别对应第一个和第二个纹理单元。

    ourShader.SetInt("tex1", 0);
    ourShader.SetInt("tex2",1);

    之后,我们在循环中,把GL_TEXTURE0和GL_TEXTURE1激活,然后将纹理对象绑定到纹理单元中,现在这些纹理单元里就有了我们想要的纹理, 这就可以把纹理数据传入到shader的变量中。 

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture1);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, texture2);

    第二个参数0就代表GL_TEXTURE0,如果是1就代表GL_TEXTURE1。

    三、爬坑总结

    纹理的效果总会出现一些不正确的结果,这里对我自己遇到的问题做一个总结。

    图像格式:宽高都必须是2的幂次方,不然会出现错误采样效果,至于为什么必须是2的幂,可以看一下这里:为何传到显卡的纹理最好是2的幂

    glTexImage2D:这里的参数,里面有个internal format和format,去看一下官方文档就知道了,有的是要用GL_RGB,有的是要用GL_RGBA,至于什么时候用,我还不太清楚的,如果出现颜色上的异常,可以尝试修改一下这里。

    四、参考资料:

    https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/

    展开全文
  • 关于OPENGL纹理

    2010-11-12 11:19:00
    纹理的基本概念纹理坐标纹理过滤纹理资源纹理环绕纹理混合表面 以下主题将更详细地介绍另外的纹理功能。 Mipmap的自动生成自动纹理管理压缩纹理资源使用纹理时需要考虑的硬件问题立体纹理资源 要提高性能,可以...
  • NO.6 OpenGl 纹理

    2020-06-11 12:54:44
    一般我们使用OpenGl绘制一个图片不能直接用图片资源,为什么呢,因为一般的图片像PNG、JPEG他们都是经过压缩的图片格式,我们不能直接使用这种压缩的图片格式,所以我们一般会用到Bitmap进行解压缩。 如下所示,...
  • 像素在bmp中图像中以BGR方式进行存储的,GL_BGR_EXT方式进行纹理创建 glTexImage2D(GL_TEXTURE_2D, 0, 3, mp_width, mp_Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, lpcBuffer); 解决了颜色偏差的问题。 ...
  • OpenGL简单模糊效果

    千次阅读 2015-09-01 00:19:18
    这里实现简单的模糊效果,具体做法是在片段着色器中,从图像中读取样本时对纹理坐标进行偏移,从图像中抽出左上右下四个样本,然后在着色器中取平均值。 原图效果: 模糊系数 0.001 模糊系数...
  • OpenGL纹理映射与环绕模式

    千次阅读 2019-03-13 18:34:40
    转载自 OpenGL超级宝典笔记——纹理映射 基础过滤 在纹理映射过程中,纹理元素与屏幕上的像素几乎不是一一对应的。一般情况下,在把纹理映射到几何图形的表面上时,我们需要对其进行拉伸或收缩。 根据一个纹理贴图...
  • OpenGL高斯模糊

    2021-10-05 11:48:15
    高斯模糊简介描述高斯分布高斯函数模糊半径卷积运算卷积核原图像卷积结果细节高斯函数卷积核实现 简介 描述 高斯模糊:使用高斯函数求出的值来作为卷积核进行图像的卷积运算。 卷积核总结: 对图像进行降维以及特征...
  • 最近趁着空余时间把OpenGL纹理学习了,然后结合CameraX做了下滤镜效果,还是打算记录下学习效果。 关于纹理的介绍可以学习这篇文章 一、CameraRender 数据源使用CameraX,没有Camera2代码的复杂,CameraX的使用比较...
  • 首先介绍一下OpenGl (Graphics Library),它是一个图形硬件的软件接口,包含了许多关于三维彩色图像的处理函数。它的主要作用是将二维和三维的对象绘入一个帧缓冲区,对这些对象的数据进行处理后将其转换为像素,...
  • qt opengl mipmap纹理

    2018-10-06 22:35:28
     使用mipmap纹理可以使得近处的景物清晰,远处的景物模糊,符合现实生活情况。先看看示例效果  小窗口效果如下: 大窗口效果如下: 将地板也设置为mipmap的效果如下:    由此,我们可以看出,使用...
  • 1、 为什么在纹理采样时需要texture filter(纹理过滤)。 我们的纹理是要贴到三维图形表面的,而三维图形上的pixel中心和纹理上的texel中心并不一至(pixel不一定对应texture上的采样中心texel),大小也不一定一...
  • OPENGL ES 纹理

    2016-06-08 11:13:52
    纹素:当用一个图像初始化一个纹理缓存之后,在这个图像中的每个像素变成了纹理中 的一个纹素(texel)。从一个 1 像素高 64 像素 的图像初始化来的纹理会沿着整个T轴有1纹素 , 着S轴有64纹素 。片元:帧缓存中的颜色...
  • android opengles 纹理

    千次阅读 2017-01-08 19:43:11
    1. 纹理映射1.1 纹理映射就是将图片贴到...1.3 opengles对纹理做了归一化处理,坐标范围都是0.0~1.0 demo:import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import jav
  • 使用opengl做球形自动纹理映射,显示出来的图像没有原图清晰。 请问可能是什么原因? 下面是原图 ![图片说明](https://img-ask.csdn.net/upload/201612/19/1482118556_16404.jpg) 球形映射后的球体表面图如下。 !...
  • OpenGL ES 纹理过滤模式-glTexParameteri

    千次阅读 2020-01-25 07:46:40
    Android中GLES20.glTexParameteri函数表示对纹理的设置,函数结构如下: public static native void glTexParameteri( int target, int pname, int param ); 参数说明如下: target: 活动纹理单元的目标...
  • 最近在复习之前学习的OpenGL时,发现有些基本的概念比较模糊,于是对照着重新写了一遍,把每个比较重要的地方都加上了中文注释,方便以后自己查阅。此代码基于Linux下的Clion编写,项目目录如下:...
  • 转载知乎朱才MIUI 6已经实现了实时模糊,我来说说其技术实现吧。很久以前我们的文件夹打开和最近任务等几个地方就使用了毛玻璃效果,在技术上讲就是背景模糊。应该是比iOS 7的使用要早很多。不过那时候我们使用的是...
  • opengl拷贝纹理图像

    千次阅读 2019-06-12 18:51:27
    https://blog.csdn.net/weixin_34008805/article/details/86870790 ... 获取纹理再拷贝 unsigned char * data = new unsigned char[normal_texture.width*normal_texture...
  • Opengl es 纹理映射

    千次阅读 2012-02-17 16:19:30
    1、资源:首先你需要一张纹理图片,在OpenGL ES中的纹理图片的尺寸是有要求的,它的高度和宽度必须为2的n次方,比如32x32、256x512等。图片不等于纹理,有了图片,还要经过加工才能当做纹理使用。   public int ...
  • OpenGL超级宝典 纹理 纹理是一种能够应用到场景中的三角形上的图像数据. 为了能够把纹理映射(Map)到图形上,我们需要指定图形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture ...
  • OpenGL--多级纹理

    千次阅读 2015-04-21 10:50:32
    多级纹理(Mipmap):就是分辨率递减的同一纹理,根据距离观察点的距离选着最适合的分辨率纹理。 它主要解决两方面问题:一,闪烁,当屏幕上被渲染物体的表面与它所应用的纹理图像相比显得非常小时,就会出现闪烁。...
  • OpenGL】高斯模糊

    2021-08-08 10:59:32
    OpenGL环境搭建 glut+glew+linux开发环境搭建 实验效果: 原图: 6+6次水平垂直高斯模糊效果: 12+12次水平垂直高斯模糊效果: 50+50次水平垂直高斯模糊效果: gles中的算法实现: #version 130 out vec4 ...
  • opengl_纹理过滤

    千次阅读 2011-12-09 10:23:33
    当三维空间里面的多边形经过坐标变换、投影、光栅化等过程,变成二维屏幕上的一组象素的时候,对每个象素需要到相应纹理图像中进行采样,这个过程就称为纹理过滤。 II.纹理过滤通常分为2种情况:  a) 纹理被...
  • OpenGL ES 2.0 - 纹理映射

    千次阅读 2017-01-10 20:04:49
    OpenGL ES 2.0 - 纹理映射 拉伸 采样 mipmap 多重纹理 过程纹理
  • OpenGL基础9:纹理

    2020-05-13 19:55:47
    其实上一章就是在讲纹理了,不过上一章的目的仅是在想办法生成一张有纹理的矩形 一、纹理坐标与环绕方式 为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分,每个顶点都会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,335
精华内容 1,334
关键字:

opengl紋理模糊