QOpenGLWidget渲染流程

QOpenGLWidget渲染涉及到从三维坐标输入到最终显示在屏幕上的各个步骤。 

  1. 三维坐标输入:这是整个渲染流程的起点。在这一步定义了物体在三维空间中的位置、大小和形状。这些坐标通常是通过数学模型(如顶点、边、面等)来表示的。
  2. 顶点着色器(Vertex Shader
    • 顶点着色器是图形管线的第一步。它接收三维坐标,并对其进行处理。
      • 变换:将坐标从模型空间转换到相机空间,再从相机空间转换到裁剪空间。这个过程中,坐标会被缩放、旋转和移动,以适应观察者视角。
      • 裁剪:去除那些在视锥体(即摄像机能看到的区域)之外的顶点,减少计算量。
      • 透视除法:将裁剪空间的坐标转换到归一化设备坐标(NDC),为后续的光栅化做准备。
    • 顶点着色器的输出是经过处理的顶点坐标。
  3. 图元装配(Primitive Assembly在顶点着色器处理完顶点后,图元装配会将这些顶点组合成图元(如三角形、线段等)。这一步是将单独的顶点连接起来,形成可以被进一步处理的几何形状。
  4. 几何着色器(Geometry Shader
    • 几何着色器是可选的,它接收图元,并可以生成新的图元。
      • 细分:将一个图元细分成多个更小的图元,增加细节。
      • 变形:改变图元的形状,实现如褶皱、波浪等效果。
    • 几何着色器的输出是新的图元,这些图元会被送入下一阶段。
  5. 光栅化(Rasterization
    • 光栅化是将图元转换为像素的过程。它将图元的几何形状映射到屏幕上的像素点。
      • 三角形填充:将三角形的边缘映射到像素点,并填充内部。
      • 线段生成:生成线段的像素点。
    • 光栅化的输出是一组像素点,每个像素点对应屏幕上的一个像素。
  6. 片段着色器(Fragment Shader
    • 片段着色器是处理光栅化后生成的像素点的着色器。它决定每个像素的颜色和属性。
      • 颜色计算:根据光照模型计算像素的颜色。
      • 纹理映射:将纹理图像映射到像素上,增加细节和真实感。
      • 透明度处理:处理像素的透明度,实现如半透明效果。
    • 片段着色器的输出是每个像素的颜色值。
  7. Alpha测试Alpha测试是一种在片段着色器之后进行的测试,用于决定一个像素是否应该显示。它检查像素的透明度值(Alpha值),并决定是否保留或丢弃这个像素。如果Alpha值低于某个阈值,则该像素会被丢弃。
  8. 混合(Blending
    • 混合是将片段着色器输出的颜色与屏幕上已有的颜色进行混合的过程。这个过程决定了最终显示在屏幕上的颜色。
      • 加权混合:根据像素的Alpha值,将新颜色与旧颜色按比例混合。
      • 特殊效果:如加亮、变暗等效果。
    • 混合的最终结果就是屏幕上显示的颜色。

各步骤间的联系

  • 输入到顶点着色器:三维坐标输入是整个流程的基础,顶点着色器对其进行初步处理。
  • 顶点着色器到图元装配:顶点着色器处理后的顶点被图元装配组合成图元。
  • 图元装配到几何着色器:图元装配生成的图元可以被几何着色器进一步处理,生成新的图元。
  • 几何着色器到光栅化:几何着色器生成的新图元被光栅化,转换为像素点。
  • 光栅化到片段着色器:光栅化生成的像素点被片段着色器着色,决定颜色和属性。
  • 片段着色器到Alpha测试:片段着色器输出的像素通过Alpha测试,决定是否显示。
  • Alpha测试到混合:通过Alpha测试的像素通过混合,最终显示在屏幕上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值