问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

OpenGL入门 - 1

发布网友 发布时间:2022-09-05 23:34

我来回答

1个回答

热心网友 时间:2024-11-03 10:40

简单来说就是实现图形的底层渲染
A. 比如在游戏开发中,对于游戏场景/游戏人物的渲染
B. 比如在音视频开发中,对于视频解码后的数据渲染
C. 比如在地图引擎,对于地图上的数据渲染
D. 比如在动画中,实现动画的绘制
E. 比如在视频处理中,对于视频加上滤镜效果
OpenGL/OpenGL ES/Metal在任何项目中解决问题的本质就是利用GPU芯片来高效渲染图形图像。
图形APIios开发者唯一接近GPU的方式。

OpenGL 阶段:

OpenGL ES 阶段:

Metal 阶段:

固定管线/存储着⾊器

顶点数据是由CPU/GPU来处理?
顶点缓存区:区域(不在内存!->显卡显存中。)
片元着色器
像素着色器
片元函数
GPUImage

[-1,1]标准化设备坐标系(NDC)

物体/世界/照相机空间->右手系
规范化设备坐标:左手系。
x,y,z => 0,1,2
注意OpenGL中坐标系 OpenGL中的物体,世界,照相机坐标系都属于右手坐标系,而规范化设备坐标系(NDC)属于左手坐标系。笼统的说OpenGL使用右手坐标系是不合适的

OpenGL希望每次顶点着色后,我们的可见顶点都为标准化设备坐标系(Normalized Device Coordinate, NDC)。也就是说每个顶点的x,y,z都应该在-1到1之间,超出这个范围的顶点将是不可见的。
通常情况下我们会自己设定一个坐标系范围,之后再在顶点着色器中将这些坐标系变换为标准化设备坐标,然后这些标准化设备坐标传入光栅器(Rasterizer),将他们变换为屏幕上的二维坐标和像素。

将坐标变换为标准化设备坐标,接着再转化为屏幕坐标的过程通常是分布进行的,也是类似于流水线那样。在流水线中,物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系系统(Coordinate System)。将物体的坐标变到几个过渡坐标系(Intermediate Coordinate System)的优点在于 在这些特定的坐标系统中,一些操作或运算更加方便和容易,这一点很快就变得明显。对我们来说比较重要的总共有5个不同的坐标系统。

这是一个顶点在最终被转化为片段之前需要经历的所有不同的状态。为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。
物体顶点的起始坐标在局部空间(Local Space),这里称为局部坐标(Local Coordinate),他在之后在变成世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后转为屏幕坐标(Screen Coordinate)
的形式结束。

物体坐标系:每个物体都有他独立的坐标系,当物理移动或者改变方向时。该物体相关联的坐标系将随之移动或改变方向。
物体坐标系是以物体本身而言,比如,我先向你发指令,”向前走一步“,是向你的物体坐标系发指令。我并不知道你会往哪个绝对的方向移动。比如说,当你开车的时候,有人会说向左转,有人会说向东。但是,向左转是物体坐标系的概念,而向东则是世界坐标系概念。
在某种情况下,我们可以理解物体坐标系为模型坐标系。因为模型顶点的坐标都是在模型坐标系中描述的。

照相机坐标系:照相机坐标系是和观察者密切相关的坐标系。照相机坐标系和屏幕坐标系相似,差别在于照相机坐标系处于3D空间中,而屏幕坐标系在2D平面里。

为什么要引入惯性坐标系?因为物体坐标系转换到惯性坐标系只需要旋转,从惯性坐标系转换到世界坐标系只需要平移。

OpenGL最终的渲染设备是2D的,我们需要将3D表示的场景转换为最终的2D形式,前面使用模型变换和视觉变换将物体坐标转到照相机坐标系后,需要进行投影变换,将坐标从照相机坐标系转换为裁剪坐标系,经过透视除法后,变换到规范化设备坐标系(NDC),最后进行视口变换后,3D坐标才变换到屏幕上的2D坐标,这个过程入下图:

在上面的图中,注意,OpenGL只定义了裁剪坐标系、规范化设备坐标系、屏幕坐标系,而局部坐标系、世界坐标系、照相机坐标系都是为了方便用户设计而自定义的坐标系,他们的关系如下图:

OpenGL然后对裁剪坐标执行透视除法从而将他们变换到标准化设备坐标。OpenGL会使用glViewPort内部的参数来将标准化设备坐标映射到屏幕坐标,每个坐标关联一个屏幕上的点。这个过程称为视口变换

局部坐标系(模型坐标系)是为了方便构造模型而设立的坐标系,建立模型时我们无需关心最终对象显示在屏幕那个位置。
模型变换的主要目的是通过变换使得用顶点属性定义或者3d建模软件构造的模型,能够按照需要,通过缩小、平移等操作放置到场景中合适的位置,通过模型变换后,物体放置在一个全局的世界坐标系中,世界坐标系是所有物体交互的一个公共坐标系

视变换是为了方便观察场景中物体而建立的坐标系,在这个坐标系中相机是个假设的概念,是为了便于计算而引入的。相机坐标系中的坐标,就是从相机的角度来解释世界坐标系中的位置

OpenGL中相机始终位于原点,指向 -Z轴,而以相反的方式来调整场景中物体,从而达到相同的观察效果。例如要观察-Z轴方向的一个立方体的右侧面,可以有两种方式:

GLShaderManager的初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...证时买房合同及购房发票,契税发票全部被收走了应该吗 ...用后来也没有还回来,马上要交付了没有发票怎么办,急急 应对疫情,作为普通公众,我该怎么办? 河北金融学院硕士点是什么 河北金融学院怎样 法院判决书上配偶只承诺共同还款怎么办 到底哪个牌子的螺旋藻好? 绿矿螺旋藻可以减肥吗? 没有谁知道螺旋藻哪个品牌最好啊?你们有没有亲身体验过呢? 我姐姐患有乳腺增生,我给她买了两袋绿矿牌螺旋藻,她可以吃吗?对她的... OpenGL-渲染流程 OpenGL 图片从文件渲染到屏幕的过程 电脑在OPENGL模式下特别卡,CPU100% 广西师范大学音乐系文化类成绩是多少 广西师范大学2010艺术类文化录取分数线是多少 想问一下艺术分220分+300文化分在广西能上师范大学吗? 黄帝内经24节气养生原文 黄帝内经五味养生原文 帮忙翻译一段摘要 measures to rectify livestreaming 这段英文怎么翻译?请高手指点 胶片如何保管 小沈阳好兄弟这首歌表达的是什么 悍跳、双爆狼战术探讨 狼人杀拍刀只能刀神吗 狼人杀“拍刀”是一种怎样的体验? 最后一神最后一狼可以拍刀吗 狼人拍刀买单买双什么条件 2023大学生母亲节活动策划方案5篇 余额转入余额宝的钱不能提现到银行卡里么 炒鱼肉怎么做好吃,辣椒炒鱼肉的家常做法 被烟头烫掉一层皮,这时怎么办?我用了牙膏涂了下 管中流是什么电影 口译和笔译 水浒108魔星的卡片叫什么名字 108张卡片,甲比乙少了18张,丙比乙多12张,各几张 怎样使用油画颜料 当一个男人问你想他不,你怎么回答他为好? 男生问你想他了没 该怎么回答好 崔玉涛育儿知识 2020幼儿园春季工作计划【六篇】 高中生军训决心书 高中军训决心书 苍之女武神重氪怎么玩? switch上怎么下载龙珠世界2dlc 带DLC的卡带怎么还要下载 白木耳烧好可以放速冻保存吗? 春季幼儿园保教工作计划 橡胶手套和乳胶手套有什么区别 橡胶手套和乳胶手套有哪些不同 什么颜色与什么颜色搭配才能调出粉色?