openGL之API学习(四十六)opengl图形管线

3D图形渲染管线 对图形渲染管线的各个阶段到底做了些什么,总是不甚清楚,每次翻书查阅,但是过了一阵遇到还是翻书,这次看Cg教程里写的不错,特地摘下来,以备查阅。    -by shenzi/2010.3.25 3D图形渲染管线 什么是渲染(Rendering)    渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景(如图 阅读详情

管线详解

下面这个图取自《OpenGL ES 3.0编程指南》,此流程为可编程管线。

1.VBO/VAO(顶点缓冲区对象或顶点数组对象):

VBO/VAO(到底是啥,下回讲解)是cpu提供给GPU的顶点信息,包括了顶点的位置、颜色(只是顶点的颜色,和纹理的颜色无关)、纹理坐标(用于纹理贴图)等顶点信息。

2.VertexShader(顶点着色器):

顶点着色器是处理VBO/VAO提供的顶点信息的程序。VBO/VAO提供的每个顶点都执行一遍顶点着色器。Uniforms(一种变量类型)在每个顶点保持一致,Attribute每个顶点都不同(可以理解为输入顶点属性)。执行一次VertexShader输出一个Varying和gl_positon。

3.PrimitiveAssembly(图元装配):

顶点着色器下一个阶段是图元装配,图元(prmitive)是三角形、直线或者点精灵等几何对象。这个阶段,把顶点着色器输出的顶点组合成图元。

4.rasterization光栅化):

光栅化是将图元转化为一组二维片段的过程,然后,这些片段由片段着色器处理(片段着色器的输入)。这些二维片段代表着可在屏幕上绘制的像素。用于从分配给每个图元顶点的顶点着色器输出生成每个片段值的机制称作插值(Interpolation)。这句不是人话的话解释了一个问题,就是从cpu提供的分散的顶点信息是如何变成屏幕上密集的像素的,图元装配后顶点可以理解成变为图形,光栅化时可以根据图形的形状,插值出那个图形区域的像素(纹理坐标v_texCoord、颜色等信息)。注意,此时的像素并不是屏幕上的像素,是不带有颜色的。接下来的片段着色器完成上色的工作。

在光栅化阶段会做透视分割(或透视除法,即除以第四个分量)

5.FragmentShader(片段着色器):

片段着色器为片段(像素)上的操作实现了通用的可编程方法,光栅化输出的每个片段都执行一遍片段着色器,对光栅化阶段生成每个片段执行这个着色器,生成一个或多个(多重渲染)颜色值作为输出。

6.Per-Fragment Operations(逐片段操作

在此阶段,每个片段上执行如下功能:

OpenGL学习笔记】--图像管线 图像管线(Image Pipeline)是计算机图形学中一个核心概念,尤其是在图形处理和渲染的上下文中。它是一个用于处理和渲染图像的流程,其中包括从场景数据的输入到最终图像输出的各个阶段。 阅读详情

相关推荐

3.OpenGL学习笔记 - 着色器

(1)顶点着色器通过2种方式来配置顶点数据: 第一种方式: layout (location = 0) in vec3 aPos; // 位置变量的属性位置值为0 第二种方式: 通过在OpenGL代码中使用glGetAttribLocation查询属性位置值(Location)。 (2)当顶点着色器定义一个输出,着色器定义一个输入,两个变量类型和名字都一样的时候,可以用来传递数据,如...

周洪伟的博客 1037

openGL学习—Layout

通过在OpenGL代码中使用glGetAttribLocation 查询属性位置值(Location)或。顶点着色器接收的是特殊形式的输入,从顶点数据中直接接收输入。为了定义顶点数据如何管理,使用loaction指定输入变量。glBindAttriblocation查询属性。layout标识可以将其连接到顶点数据。

qq_75066978的博客 645

图形渲染基础-常用渲染管线介绍

常用渲染管线介绍

Hanson的博客 2637

OpenGL教程(五)

正如之前章节所提到的,着色器就是运行在GPU上的小程序,简单来说,着色器就是仅仅是一个将输入数据经过一定转换然后输出的过程,着色器之间是非常独立的,彼此之间除了输入输出之外没有其他交流,这篇文章将会详细介绍着色器以及编写着色器的语言GLSL。编写、编译和管理着色器十分的繁琐,为了方便管理我们通过建立一个着色器的类从硬盘读取着色器,然后编译并且链接它们,检查是否有错误,十分方便使用。出于学习的目的,我们将着色器的类定义在一个头文件内,其结构如下{public:// 项目ID。

QStack的博客 950

OpenGL学习随笔(五)——2022.2.7

通过前面的学习,已经了解了OpenGL渲染的主要流程和基础的数学知识,接下来继续学习如何管理3D图形数据,在本回中将会绘制一个立方体。

weixin_59876363的博客 1777

OpenGL-曲面细分

曲面细分名词 TCS(细分控制着色器) Tessellation control shader细分控制着色器 TES(细分曲面计算着色器) Tessellation EValuation shader 控制点 这些被称为控制点的顶点定义了一个曲面 patch 一组控制点被称为一个patch 上图就是由16个控制点组成的patch TLs(曲面细分精细程度) Tessellation Levels 对这一个 patch 需要生成多少个三角形 例如,我们可以定义如果光栅化之后的三角形将会覆盖的像素点的个数小

qq_43535469的博客 1762

OpenGL学习笔记②】——OpenGL基础【渲染管线 顶点着色器 片元着色器 VAO VBO 万字总结】

关键字:OpenGL、顶点着色器、片元着色器(或片段着色器)、着色器程序、链接顶点属性、顶点缓冲对象(VBO)、顶点数组对象(VAO) 、绘制三角形。

Wang_Dou_Dou_的博客 2万+

openGL贝塞尔曲面细分

openGL系列文章目录 文章目录openGL系列文章目录前言一、贝塞尔曲面细分原理二、代码1.主程序c++效果 前言 现在让我们扩展我们的程序,使它将我们简单的矩形网格转换为贝塞尔曲面。细分网格 应该为我们提供了足够的顶点来对曲面进行采样(如果我们想要更多的话,我们可以增加 内部/外部细分级别)。我们现在需要的是通过管线发送控制点,然后使用这些控制点执行计 算以将细分网格转换为我们所需的贝塞尔曲面。 假设我们希望建立一个立方体贝塞尔曲面,我们将需要16 个控制点。我们可以通过VBO 从C++端发送它们,或

aoxuestudy的专栏 2546

OpenGL-渲染管线的实现

666

Asura_____的博客 628

openGLAPI学习(四十七)layout作用详解

原文在https://www.khronos.org/opengl/wiki/Layout_Qualifier_(GLSL) GLSL语言规范中也有对此的详细说明https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf 这里大致翻译如下: 布局限定符(GLSL除了这个限定符,还有很多其它限定符,比如存储限定符、...

hankern的专栏 2万+

图形管线基础(一)

图形管线基础

weixin_39289457的博客 1333

计算机图形学与opengl C++版 学习笔记 第2章 OpenGL图像管线

计算机图形学与opengl C++版 学习笔记 第2章 OpenGL图像管线

Doggerlas的博客 2104

OpenGL基础41:几何着色器

在顶点着色器之后,片段着色器之前,还有几何着色器,它是可选的,在《OpenGL基础3:渲染管线》这一章中就有提到了,有了几何着色器后可以做很多骚操作,更容易实现很多有意思的效果 一、最简单的几何着色器(Geometry Shader) 几何着色器的输入:一个或多个表示单独基本图形(primitive)的顶点,这个基本图形可以是点、线或者三角形 输出:处理过后的基本图形顶点,这些顶点无论是大小还是位置,甚至是数量、基本图形单元都可以被改变、拼装 最“简单”的几何着色器如下: #version...

加载中... 1302

OpenGL ES】渲染管线

渲染管线是指:将模型的顶点序列、颜色系列、纹理序列、法线序列等数据输入到 OpenGL ES 中,到输出屏幕,这个阶段数据所经历的流程。裁剪:进行透视分割,并剔除视锥体外面的顶点,根据 x, y, z 的值是否在 [-1, 1] 之间判断是否淘汰顶点; 屏幕映射:根据视口(Viewport)大小,将近平面上的点映射到屏幕上 图元装配:根绝输入顶点序列和和图元类型(mode)组装图元; 光栅化:对图元内部进行插值,使其与屏幕中的像素一一对应; 裁剪测试:指定一个矩形的剪裁区域,当启用剪裁测试后,只有在这个区域

little_fat_sheep 7218

OpenGL学习笔记(十三)

OpenGL 高级篇(四)

weixin_42050609的博客 635

OpenGL:渲染管线

顶点着色器->曲面细分着色器->几何着色器->光栅化->片段着色器->像素操作

zhang_shuaifeng的博客 1081

OpenGL学习总结-基本渲染流程(三)

一、OpenGL 渲染管线(Rendering Pipeline)的发展 1. 固定功能管线时代 在早期的 OpenGL(1.x 和 2.x 版本),渲染管线是固定的,开发者只能使用一组预定义的图形处理函数来进行渲染。这包括了顶点处理、光照计算、纹理映射、裁剪、混合等功能。这种管线的限制使得开发者无法对渲染过程进行深度控制,限制了创意和渲染效果的多样性。 缺点: 由于所有渲染处理都是硬件固定的,开发者无法自由定制处理过程。 光照模型、材质和效果都有限,无法实现复杂的现代渲染效果(如

pplander的专栏 2514

OpenGL学习笔记(十五)

目录应用纹理 应用纹理 我们需要告知OpenGL如何采样纹理,所以我们必须使用纹理坐标更新顶点数据: float vertices[] = { // ---- 位置 ---- ---- 颜色 ---- - 纹理坐标 - 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // 右上 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // 右下 -0.5f, -0.

u012043391的专栏 332
上一篇: openGL之API学习(四十五)正向渲染和延迟渲染
下一篇: openGL之API学习(四十七)layout作用详解
hankern
博客等级 码龄19年 907粉丝 1016原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值