OpenGL基础概念(一)

图元和片元_OpenGL渲染流水线中顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)的含义... 顶点(vertexs)图元(primitives)片元(fragments,又叫片断)像素(pixels)阶段1.顶点->图元几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。阶段2.图元->片元图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪... 阅读详情

顶点(vertexs) 图元(primitives) 片元(fragments片断) 像素(pixels)

阶段1.  顶点 ->图元

几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。

阶段2.  图元  ->片元

图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。

1) 裁剪

在裁剪时点,线段和多边形处理略微不同。对于点,要么保留原始状态(在裁剪体内部),要么被裁掉(在裁剪体外部)。对于线段和多边形来说,如果部分在裁剪体外部,则需要在裁剪点生成新的几何顶点。对于多边形,还需要在新增的顶点间增加完整的边。不论裁剪了线段还是多边形,都需要给新增几何点赋予边界标志、法线、颜色和纹理坐标信息。

裁剪过程时两步:

a 应用程序指定裁剪(Application-specific clipping),一旦组合图元完成后,如果在程序中用glClipPlane()函数定义了任意的裁剪面,就进行裁剪。

b 视景体裁剪(View volume clipping),随后,图元被投影矩阵投影(进入裁剪坐标系),被相应的视景体裁剪。投影矩阵可以由glFrustum() 或者glOrtho()定义,投影矩阵的操作和上面其他矩阵变换的操作相同。

2) 转换到窗口坐标

裁剪坐标在转换为窗口坐标之前,要除以规格化设备坐标(normalized device coordinates)的w值进行规范化。然后对这些规范化数据进行视口变换(viewport)计算生成窗口坐标。可以用glDepthRange()和glViewport()控制视口大小,决定屏幕上显示图象的区域。

3) 光栅化

光栅化是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元(fragment)。(yuyu注:这就是片元和像素之间的关键区别,虽然两者的直观印象都是的像素,但是片元比像素多了许多信息,在光栅化中纹理映射之后图元信息转化为了像素)在这个阶段,对象素绘制和位图进行操作需要用到当前栅格位置(用glRasterPos*()定义)。正如上面讨论的,三种图元的光栅化方法是不同的,另外,象素块和位图也需要光栅化。

a)图元

采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函数可以选择图元的光栅化维数和模式。另外,还可以用glCullFace(), glFrontFace()和glPolygonMode()控制多边形正反面不同的光栅化效果。

b)象素

有几个函数实现象素保存和转换。函数glPixelStore*()用于内存中的象素是如何保存的。glPixelTransfer*() and glPixelMap*()用于象素在写入帧缓冲区前是如何处理的。glDrawPixels()定义了一个象素矩形。用glPixelZoom()实现象素的缩放。

c)位图

位图是具有特定片元模式的0和1的矩形。每个片元有相同的相关数据。可以用glBitmap()定义。

d)纹理存储

纹理贴图是将指定的部分纹理图象映射到每个图元上。每个片元(fragment)具有的纹理坐标属性,该坐标与纹理图象坐标对应,得到纹理图象该位置的颜色值来修改片元的RGBA颜色,从而完成这个映射过程。用glTexImage2D()或glTexImage1D()来定义纹理图象。glTexParameter*()和glTexEnv*()来控制纹理如何解释和应用到一个片元上。

e)雾

已经光栅化的片元具有纹理贴图修正后颜色,可以采用融合因子再融合雾颜色,该融合因子大小根据视点和片元间的距离来定。用glFog*()指定雾化颜色和融合因子。

 

 

阶段3.  片元->像素

 

OpenGL允许光栅化生成一个片元,只要该片元通过一系列检测就可以修改帧缓冲区中对应象素。如果它通过测试,片元数据可以直接替换帧缓冲区中的已有值,或者和已有值合并,这取决于设置的模式。

1)象素所有权(ownership)检测

第一个测试是判断在帧缓冲区中的象素所对应的某个片元是否属于当前OpenGL上下文。如果属于,片元进行下一个测试。如果不属于,窗口系统决定是否忽略该片元,或者是否进行下一步片元操作。

2)裁剪检测

用glScissor()函数,可以定义一个任意屏幕校准矩形,在该矩形外的片元将被忽略。

3)Alpha检测

Alpha测试只能在RGBA模式下进行,如果片元的alpha值超出一个固定参照值,片元将被忽略,这个比较函数可以用glAlphaFunc()实现并设定参考值。

4)模版检测

当模版缓冲区的值超出一个参照值,模版测试将有条件的忽略该片元。这个比较函数和固定值可以用glStencilFunc()实现。不论图元通过或没有通过模版测试,模版缓冲区中的值会根据glStencilOp()函数进行修改。

5)深度检测

当深度缓冲区的值与参照值的比较失败,深度测试忽略该片元。GlDepthFuc()用来执行这个比较命令。如果模版启用,深度比较的结果会影响模版缓冲区值的更新。

6)融合

融合合并了一个片元R、G、B和A值和存储在帧缓冲区对应位置的这些值。融合只能在RGBA模式下实现,它的实现需要片元的alpha值和对应当前存储象素,还需要RGB值。用glBendFun()控制,可以修改融合因子的源和目标。

7)抖动

如果启动抖动,片元的颜色或者颜色索引采用抖动算法。这个算法只需要片元的颜色值和它的x和y坐标。

8)逻辑操作

最后,在片元和帧缓冲区对应值之间要进行一个逻辑操作,结果将替换当前帧缓冲区的值。用glLogicOp定义想要的逻辑操作。这个逻辑操作只能在颜色索引模式下运行,而不能在RGBA模式运行。

 

象素

   在OpenGL流水线的上个阶段,片元转换为帧缓冲区中的象素。帧缓冲区实际上是一组逻辑缓冲区——包括颜色缓冲区、深度缓冲区、模版缓冲区和累积缓冲区。颜色缓冲区包括左、前右、后左、后右和一些辅助缓存值(auxiliary buffers)。可以直接从中读取或者复制。对于OpenGL不同上下文,这些缓冲区可能不全

1)帧缓冲区操作

用glDrawBuffer为绘图选择一个颜色缓冲区。另外在预片元化(per-fragment)操作后,可以用四个不同函数保留写入这些逻辑缓冲区的操作,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()对累积缓冲区进行操作。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().对不同缓冲区中指定相对应的颜色值、颜色索引值、深度值、模板值和累积值。

2)读取和复制象素

用glReadPixel()从帧缓冲区中把象素读到内存中,进行各种操作,保存处理结果。另外,可以用glCopyPixel()从帧缓冲区中复制一块象素到另一个帧混存。glReadBuffer()可以读取和复制颜色缓冲区中的象素。


Opengl编程学习笔记(五)——从FRAGMENT到PIXEL(framebuffer 帧缓存) 1.帧缓存包括颜色、scissor、alpha、stencil、depth这些缓存,所以帧缓存不是一片缓存,而是所有这些缓存的组合,帧缓存它对应了屏幕上的每一个pixel(不是真正的pixel,而是一个fragment所对应的位置)的各种这些信息(颜色、ZBUFFER、等等),几何体的fragment时没有帧缓存的,帧缓存时屏幕上的,一个缓存的一位就对应一个位片面。Colorbuffer是最终 阅读详情

相关推荐

Opengl入门基础-基础知识

opengl入门基础知识,包括:视口创建,着色器编写,光栅化解释等等内容,本文对opengl整体流程进行了简单介绍,通过代码来描述,并具体解释了opengl的相关图形知识,便于初学者对opengl整体上有大概印象,后面的opengl知识会在此基础中进行深度和广度的扩展。

qq_40779012的博客 1万+

3D绘图过程及原理简介

3D绘图过程及原理简介 收藏 Standard Primitives(标准几何体) 在创建命令面板的Geometry(几何体)对象类型中有如下几个次级分类项目: • Standard Primitives(标准几何体):相对简单的几何体,如立方体、球体和锥体等。 • Extended Primitives(扩展几何体):相对复杂的几何体,如倒角柱体和纺锤体等。 • Compound O...

wjlgryx的专栏 1008

OpenGL基础教程

OpenGL基础教程

qq_33934427的博客 1万+

顶点图元片元像素Shader学习

摘自:https://www.jianshu.com/p/e0c7c64bac22 顶点、图元、片元、像素在讨论GPU渲染流程的时候经常提到,并且容易混淆,这里简述一下他们之间的区别。 首先他们的生成是有先后顺序的: 顶点>图元>片元>像素 概念区别: 顶点。模型的最小划分 图元。图元是由顶点组成的。一个顶点,一条线段,一个三角形或者多边形都可以成为图元。 片元。片元是在图元经过光栅化阶段后,被分割成一个个像素大小的基本单位。 片元其实已经很接近像素了...

Deveuper的博客 6737

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3116

智慧城市项目实战:如何将你的地理数据从城市坐标系(如上海2000)转换到国家CGCS2000?

本文详细介绍了智慧城市项目中地理数据坐标系转换的全流程解决方案,重点讲解如何将城市坐标系(如上海2000)转换到国家CGCS2000。通过七参数布尔莎模型、ArcGIS Pro、QGIS开源方案及Python编程实现,帮助实施团队解决坐标系不统一的技术难题,确保空间分析精度。

weixin_28725949的博客 307

计算机图形学中的顶点、图元、片元和像素的含义和区别

片元已经非常接近像素了,但是它仍不是像素,片元包含了比像素更多的信息,比如深度值、法线、纹理坐标等等信息,片元需要通过一定的测试(比如深度测试),才能最终成为我们所看到图像的像素。:先解释一下什么是光栅化,在计算机三维场景中,将三维模型投影成二维平面,也就是将图元投影在屏幕上,比如将三维场景中的三角形投影到屏幕上(它投影到屏幕也是一个三角形),然后确定这个投影的三角形在屏幕上的投影区域覆盖了哪些像素,该过程称为。计算机图形学中的顶点、图元、片元和像素特别容易混淆,尤其是片元和像素的含义非常接近。

weixin_42420306的博客 3966

STM32硬件SPI驱动ADS1255/1256避坑指南:从Cube MX配置到稳定采样实战

本文详细解析了使用STM32硬件SPI驱动高精度ADC芯片ADS1255/1256的完整流程与关键陷阱。重点阐述了Cube MX中SPI模式(必须为CPOL=1, CPHA=1)、数据帧格式(MSB First)及波特率(建议从256kHz起)的正确配置,并提供了分步读写时序的代码实现与逻辑分析仪调试方法,帮助开发者避开常见坑点,实现稳定可靠的高精度数据采样。

weixin_29193259的博客 361

OpenGL入门一:基础知识及概念

OpenGL:open graphic library,即开发图形库。它被定义为“图形硬件的一种软件接口”。实质上是3D图形和模型库,它具有高度可移植性,并且具有非常快的速度。可以创建优雅漂亮的3D图形,具有出色的视觉质量。并且速度远快于光线追踪仪或软件渲染引擎。本文介绍了OpenGL相关的知识:OpenGL历史、OpenGL发展、OpenGL应用等,并且介绍了OpenGL需要掌握的知识,OpenGL变换原理及投影成像原理。

轻口味的专栏 1778

BALM2深度解析 | 港大MARS实验室如何用点簇革新激光BA?

本文深度解析了港大MARS实验室提出的BALM2方案如何通过点簇技术革新激光BA(Bundle Adjustment)处理。BALM2将点云数据聚合为点簇,显著提升计算效率,实测显示其计算耗时仅为传统方法的1/20。文章详细介绍了点簇的核心原理、二阶优化方法及与传统方法的性能对比,展示了其在激光SLAM领域的突破性应用。

weixin_29212867的博客 153

论文阅读:2024 ACM CCS “Do Anything Now”: Characterizing and Evaluating In-The-Wild Jailbreak Prompts on

大语言模型(LLMs)的滥用问题引起了公众和大语言模型供应商的高度关注。有一种特殊的对抗性提示,叫做越狱提示,它已成为绕过防护措施、让大语言模型生成有害内容的主要攻击手段。在这篇论文中,作者使用新框架JailbreakHub,对2022年12月至2023年12月期间的1405个越狱提示进行了全面分析。作者识别出131个越狱提示社区,发现了越狱提示的独特特征以及主要攻击策略,比如提示注入和权限提升。

CSPhD-winston的博客 1414

OpenGL学习(一)——基础知识与概念

目录 一、图形技术与术语 二、入门指南 2.1 什么是OpenGL 2.2 使用OpenGL 2.2.1 GLUT 2.2.2 GLEW 2.2.3 GLTools 2.3 OpenGL API特性 三、第一个程序 一、图形技术与术语 变换和投影:变换(transformation)和投影(projection)分别通过一种称为变换矩阵和投影矩阵的数学结构来进行旋转和讲3D坐...

lixiangsheng2012的博客 1503

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1024

【OpenGL ES系列 】基础概念(一)

Open GL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。

cainiaoshileyuan的博客 909

某勾网之登录过程逆向

拉勾网的登录过程逆向,包含请求头(X-S-HEADER、X-K-HEADER、X-SS-REQ-HEADER等) 以及 请求参数/返回数据的加解密。

shanf7921的博客 3万+

搞懂 SAPUI5 Fiori 应用的 OData 授权维护:从 IWSG、IWSV 到 S_SERVICE 的完整实践

本文探讨了SAP Fiori项目中常见的授权问题及其解决方案。文章指出,开发人员常误将OData服务访问问题归咎于前端代码或配置,而实际上多因授权默认值未正确带入角色所致。详细分析了IWSG(前端服务组元数据)和IWSV(后端业务服务)两个关键对象的作用机制,强调应通过PFCG角色的Authorization Default入口维护服务对象,而非直接修改S_SERVICE授权对象。文章还提供了前后端授权配置的具体操作步骤,并特别提醒需同时配置前端和后端授权,才能确保应用完整可用性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 207

OpenGL 图形库使用(一) —— 概念基础

OpenGL ES基础 OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化。OpenGL被设计用来转换一组图形调用功能到底层图形硬件(GPU),由GPU执行图形命令,用来实现复杂的图形操作和运算,从而能够高性能、高帧率利用GPU提供的2D和3D绘制能力。 OpenGL ES规范本身不定义绘制表面和绘制窗口,因此ios为了使用它必须提供和创建一个...

zhangminjiezmj的博客 1659

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

图形学基础概念梳理以及OpenGL初识------计算机图形学高质量实时渲染(一)

1.复习计算机图形学基础2.复习GPU渲染管线3.OpenGL 和GLSL4.渲染方程5.相关微积分知识。

weixin_44683202的博客 596

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

opengl教程推荐

非常不错的教程! OpenGL教程 转载于:https://www.cnblogs.com/dongerlei/p/9061323.html

weixin_30338497的博客 93

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OpenGL 入门(一)—— OpenGL 基础

OpenGL(Open Graphics Library)是图形领域的工业标准,是一套跨编程语言、跨平台、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用方便的底层图形库。它与硬件无关,可以在不同的平台如 Windows、Linux、Mac、Android、IOS 之间进行移植。因此,支持 OpenGL 的软件具有很好的移植性,可以获得非常广泛的应用(比如 PS 在部分功能和操作中使用 OpenGL 加速,以提高图像处理和渲染的性能)。对于 Android 系统而言,它支持的是 Ope

tmacfrank 1万+

从零开始学习OpenGL ES之一 – 基本概念

我曾写过一些文章介绍iPhone OpenGL ES编程,但大部分针对的是已经至少懂得一些3D编程知识的人。 作为起点,请下载我的点击打开链接 OpenGL Xcode项目模板,而不要使用Apple提供的模板。你可以解压到下面位置安装此模板: /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templ

eqera的专栏 2946

OpenGL基础图形编程(十)真实感图形基本概念

由于真实感图形是通过景物表面的颜色和明暗色调来表现景物的几何形状、空间位置以及表面材料的,而一个物体表面所呈现的颜色是由表面向视线方向辐射的光能决定的。在计算机图形学中,常采用一个既能表示光能大小又能表示其颜色组成的物理量即光亮度(luminance)或光强(intensity of light)来描述物体表面朝某方向辐射光能的颜色。采用这个物理量可以正确描述光在物体表面的反射、透射和吸收现象,因而可以正确计算处物体表面在空间给定方向上的光能颜色。

heyuchang666的专栏 1万+

OpenGL ES之一——概念扫盲

一.OpenGL OpenGL概念:Open Graphics Library(开放图形库)。 1.1OpenGL到底是什么 OpenGL是一个规范,解释如下: OpenGL到底是什么?一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khr...

gongxiaoou的博客 5601

OpenGL 概念整理

OpenGL 概念整理 1. OpenGL 1.1 术语说明 概念 描述 版本 OpenGL Open Graphics Library Khronos 定义GPU功能实现的SPEC,标准API 4.6 OpenGL ES Embedded System 为嵌入式系统定义的相关补充接口 3.2 EGL 用于GPU渲染与机器原生窗口之间通信的API,独立于OpenGL ES各个版本 Vulkan Khronos组织新定义的接口,相比于OpenGL更加高效 1.2 1.2 Op

And乔的博客 1361

你需要了解的OpenGL基础概念

OpenGL(Open Graphics Library)是跨平台的。

jongden的专栏 696

【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

一、OpenGL 状态机概念、 二、OpenGL 矩阵概念

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1556
上一篇: 代码图形分析工具Understand
下一篇: 三点定位算法 -- 链接
技术在路上
博客等级 码龄16年 644粉丝 160原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值