zoukankan      html  css  js  c++  java
  • opengl 学习之 14

    opengl 学习 之 14 lesson

    简介

    生成一个纹理??其实看到这里有点看不懂了。哭

    link

    http://www.opengl-tutorial.org/uncategorized/2017/06/07/website-update/

    http://www.opengl-tutorial.org/cn/intermediate-tutorials (还有中文版在一直没有察觉)

    https://www.cnblogs.com/icyhusky/p/10645581.html (渲染管线)

    看不懂了先看看渲染管线吧

    图形渲染管线包含很多部分,每个部分都将在转换顶点数据到最终像素这一过程中处理各自特定的阶段。我们会概括性地解释一下渲染管线的每个部分,让你对图形渲染管线的工作方式有个大概了解。

    首先,我们以数组的形式传递3个3D坐标作为图形渲染管线的输入,用来表示一个三角形,这个数组叫做顶点数据(Vertex Data);顶点数据是一系列顶点的集合。一个顶点(Vertex)是一个3D坐标的数据的集合。而顶点数据是用顶点属性(Vertex Attribute)表示的,它可以包含任何我们想用的数据,但是简单起见,我们还是假定每个顶点只由一个3D位置(译注1)和一些颜色值组成的吧。

    1,顶点着色器

    它把一个单独的顶点作为输入。顶点着色器主要的目的是把3D坐标转为另一种3D坐标(后面会解释),同时顶点着色器允许我们对顶点属性进行一些基本处理。

    2,图元装配阶段

    将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状;本节例子中是一个三角形。

    3,几何着色器

    图元装配阶段的输出会传递给几何着色器(Geometry Shader)。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。例子中,它生成了另一个三角形。

    4,光栅化阶段

    几何着色器的输出会被传入光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。

    5,片段着色器

    片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。

    6,测试与混合

    在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。


    引用于iCyhuSky

    可以看到里面有两个很熟悉的东西一个是顶点着色器,另一个是是片段着色器,分别对应着两个文件。

    TIPS

    static const GLfloat g_quad_vertex_buffer_data[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        -1.0f,  1.0f, 0.0f,
        -1.0f,  1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        1.0f,  1.0f, 0.0f,
    };
    

    这里是两个三角形。所以6个点。两个三角形构成一个四边形,即整个显示区域

    #version 330 core
    
    in vec2 UV;
    
    out vec3 color;
    
    uniform sampler2D renderedTexture;
    uniform float time;
    
    void main(){
    	color = texture( renderedTexture, UV + 0.005*vec2( sin(time+1024.0*UV.x),cos(time+768.0*UV.y)) ).xyz ;
    }
    

    这里渲染片段,随着时间变化,会进行波动。类似于水波纹的效果。

    FBO:帧缓存对象。

    image

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    Qt uchar * 转 QImage
    WIN10 蓝牙连接音箱之后,音量调节无效,音量从1-100,声音一样大,都是最大声,可以静音(解决方案)
    OpenGL 保存bmp图像
    Qt 使用自带的OpenGL模块开发程序
    OpenCVSharp介绍
    OpenCV介绍
    OpenAL介绍
    OpenCL介绍
    OpenGL介绍
    Qt 无法打开包括文件:“QGLWidget”: No such file or directory
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14091449.html
Copyright © 2011-2022 走看看