OpenGL学习——基础概念

本文介绍了OpenGL的图形渲染管线,包括3D坐标到2D像素的转换过程,顶点数组对象、顶点缓冲对象和索引缓冲对象的概念,以及着色器在GPU中的作用。还提到了图元、标准化设备坐标和基本数据类型,并展示了管线的各个阶段,包括顶点着色器、几何着色器、光栅化和测试与混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图形渲染管线(Graphics Pipeline)
一堆原始图形数据途径一个输送管道,期间经过各种变化处理最终出现在屏幕的过程。OpenGL中是将3D空间坐标转换成为2D像素坐标。

在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线管理的。

图形渲染管线实际上指的是一堆原始图形数据途径一个输送管道,期间经过各种变化处理最终出现在屏幕的过程;图形渲染管线可以被划分为两个主要部分:第一部分把开发者的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际带有颜色的像素

顶点数组对象(Vertex Array Object,VAO)

顶点缓冲对象(Vertex Buffer Object,VBO)

索引缓冲对象(Element Buffer Object,EBO或Index Buffer Object,IBO)

着色器(Shader)
当前显卡都有成千上万的小处理核心,它们在GPU上为每一个(渲染管线)阶段运行各自的小程序,从而在图形渲染管线中快速处理你的数据,这些小程序叫做着色器(Shader)

图元(Primitive)
提示我们所想渲染的类型,如GL_POINTS、GL_TARIANGLES、GL_LINE_STRIP

标准化设备坐标(Normalized Device Coordinates,NDC)

一旦顶点坐标已经在顶点着色器中处理过,它们就是标准化设备坐标了,标准化设备坐标是一个X、Y和Z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在屏幕上。与通常的屏幕坐标不同,y周正方向为向上,(0,0)坐标是图像的中心,而不是左上角。

接着标准化设备坐标会变换为屏幕空间坐标(Screen-space Coordinates),这是使用通过glViewport函数提供的数据,进行视口变换(Viewport Transform)完成的。所得的屏幕空间坐标又会被变换为片段输入到片段着色器中

基本数据类型
Vec2:包含了两个浮点数的向量
Mat2:2*2的浮点数矩阵
Sampler2D:用于访问浮点型的二维数组
Vec3 position[20]:声明了一个包含20个vec3的数组,索引从0开始
Vec3 va = vec3(0.5,0.5,0.5):声明了一个vec3向量va
Vec4 myVec4 = vec4(1.0):myVec4的每一个分量值都是1.0

一个图形渲染器管线的每个阶段抽象流程展示:
1、顶点数据(Vertex Data[])
2、顶点着色器(Vertex Shader):把3D坐标转换成为另一种3D坐标
3、形状(图元)装配(Shape assembly):将所有的点装配成指定图元的形状(三角形、点、线)
4、几何着色器(geometry Shader):产生新顶点构造出新的或者是其它的图元来生成其它形状
5、光栅化(rasterization):把图元映射为最终屏幕上相应的像素,生成供片段着色器使用的片段,在片段着色器运行之前会执行裁剪(Clipping)
6、测试与混合(tests and blending):检测片段的深度

小技巧:

OpenGL使用
GLSurfaceView.queueEvent(new Runnable(){
    //GL线程做的事情
}):
可以将操作放到GLThread线程中进行执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值