OpenGL坐标系转换

转换过程

在opengl中,一个坐标的完整转换过程,从结构层、渲染管线、坐标空间三个层级的划分如下:
结构层:顶点——>图元——> 片元——>缓冲(FBO)
图像渲染管线:顶点着色器 ——>图元装配——>裁剪 ——>几何着色器
——>栅格化 ——>片段着色器——> 测试与混合
坐标空间:Model/Local —
(ModelTransform)
—> World —(ViewTransform)—> eye/view/camera —(视椎体裁剪,椎体范围转为正方体范围)—>Clip ———(PerspectiveDivide)—>NDC(clip/w)——(ViewportTransform)——>Screen——(ScanConversion)——>Window**

顶点的三个状态
顶点(vertex), 一些点
图元(primitives), 顶点组合成图元。根据渲染模式(点、线、面)对三角面进行细分,复杂结构增加物体的三角面数以拆解成基本图元。
片元 (Fragment),表示基本图元映射到二维平面上的映射区域,通常一个Fragment对应屏幕一个像素。
栅格化是把点线三角形映射到屏幕上的像素点的过程。

图像渲染管线各过程详解

  • 顶点着色器:MVP变换,光照计算。与顶点相关的全部属性完全确定。输出camera space下的顶点。
  • 图元装配:顶点数据被结合成完整图元。输出图元。
  • 几何着色器:输入图元,对三角面进行细分,产生一些新顶点,构造一些新图元。
  • 裁剪:(只有图元才能裁剪,顶点没有几何意义。不裁剪,视线范围无限远)用相机视椎体裁剪世界坐标 ,视椎体视线范围转为正方体视线范围。输出Clip space 图元。
  • 透视除法:四维齐次坐标通过透视除法转换为三维NDC。NDC的意义在于顶点最后要输出到屏幕空间。
  • 视口变换, 三维坐标转为二维像素坐标。输出Screen space 图元。
  • 剔除:背面剔除
  • 光栅化:将图元的几何定义转为图像空间的离散点,生成片元集合。输出Screen space。
  • 片元着色器:
  • 测试与混合
    • 深度剔除
    • 遮挡剔除
    • 透明物体融合
坐标系转换过程

w分量
左右手坐标系转换?
![](https://img-blog.csdnimg.cn/img_convert/8a612cc69330963eff4ccb221034aa4b.webp?x-oss-process=image/format,png#clientId=u698db15f-1df0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=ucc0162e6&margin=[object Object]&originHeight=1046&originWidth=600&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u2d346de2-eaae-441c-90eb-fb0640ba54c&title
Eye坐标系如何转成NDC坐标系?
在这里插入图片描述

  1. 非齐次坐标(x,y,z,1)转为齐次坐标(xe,ye,ze,w);
  2. Eye Space的点e 映射到 视椎体Near平面 的点p,再映射到 NDC空间 点ndc,到此,视线范围确定为xh,yh,zh ∈[-w,w]
  3. 透视除法后,得到真正的NDC坐标系。 ndc.xyz = clip.xyz / clip.w;

第二步详细过程:
1.Eye Space的点e在两个二维平面 (ZX平面 ZY平面)上映射到视椎体Near平面 的点p,得到点e和点p的映射关系。
2.视椎体Near平面映射到NDC空间的[-1,1], 求出 点ndc和点p的关系
最后得到点e和点ndc的关系,
三维NDC坐标系转为二维像素坐标系
最终,模型要显示在二维平面上,其范围与视口相关。NDC空间很接近窗口,NDC的xy坐标与窗口坐标之间的线性关系被称为视口变换。NDC的z值理解为深度值。

参考文档
gl_FragColor的含义
从顶点到片元
OpenGL投影矩阵(Projection Matrix)构造方法 - lxycg - 博客园

游戏开发技术杂谈3:OpenGL投影矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值