前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenGL ---渲染流水线之世界矩阵,相机变换矩阵,透视投影变换矩阵

OpenGL ---渲染流水线之世界矩阵,相机变换矩阵,透视投影变换矩阵

作者头像
用户1148525
发布2019-07-02 10:39:22
2.5K0
发布2019-07-02 10:39:22
举报

https://blog.csdn.net/qq_29523119/article/details/78577246

OpenGL的渲染流水线:

OpenGL的坐标系

在3D图形学里,OpenGL为右手坐标系(准确来说,OpenGL的世界空间和相机空间是右手坐标系)。随便提一下,D3D11为左手坐标系。

(1) 右手坐标系

(2) 左手坐标系

OpenGL的矩阵和向量结合方式

OpenGL的向量为列向量,矩阵和向量采用的方式为“矩阵X列向量”的方式,而D3D11为"行向量X矩阵"的方式。OpenGL的向量矩阵结合如下所示:

当多个矩阵乘以向量时,应该从右向左计算,比如存在三个矩阵:Proj,View,Model 向量:Pos

Proj*View*Model*Pos 代表 向量Pos先进行Model的变换,然后在进行View的变换,最后进行Proj的变换

OpenGL的各个空间的变换矩阵

世界变换矩阵

我一般称世界矩阵为SRT矩阵,SRT分别是"Scale","rotate","translate"三个单词的缩写,也就是世界矩阵由缩放矩阵,旋转矩阵,平移矩阵构成的

(1)缩放矩阵 (ScaleMatrix)

假设在X轴缩放Sx倍,在Y轴缩放Sy倍,在Z轴缩放Sz倍,缩放如下所示:

顶点乘以矩阵的公式如下:

(2)旋转矩阵

在说明旋转矩阵之前,我得说明一下,在右手坐标系如何判断哪个方向为顺时针方向旋转。

先来看下面的图,我们先用右手的拇指朝向Y的正方向,则四指所绕的方向也就是饶Y轴渲染的顺时针方向了,其它轴的顺时针方向同理也就是这样判断。

一,绕X轴顺时针旋转Θ度数

二,绕Y轴顺时针旋转Θ度数

三,绕Z轴顺时针旋转Θ度数
(3)移动矩阵(TranslateMatrix)

假设某个顶点在X轴方向移动dx个单位,Y轴移动dy个单位,在Z轴移动dz个单位

二,相机变换矩阵(ViewMatrix)

在此之前看看UVN相机模型,如图所示:

注视向量N的方向跟相机空间(ViewSpace)的Z轴方向是一致的,而竖直向量V的方向与相机空间(ViewSpace)的Y轴方向是一致的,右向量U的方向与相机空间(ViewSpace)的X轴方向是一致的。

计算UVN向量的公式如下:

这里的“X”为叉乘的意思,并且一样可以通过右手规则(OpenGL世界空间为右手坐标系)得到叉乘向量的方向,也就是用右手从叉乘符号左边那个向量绕向叉乘符号右边的那个向量,拇指所指方向即为叉乘得到向量的方向。

相机矩阵如下所示:

具体推导见文章:推导相机变换矩阵,当然这篇博客对于OpenGL的相机矩阵计算是有些错误的。

三,透视投影矩阵(PerspectiveMatrix)

在推导透视投影矩阵前先看看视截体(Frustum)是怎么样的:

视截体在YZ平面的投影如下面图所示,

n为原点到近截面的距离,f为原点到远截面的距离,α为视截体在YZ平面投影的FOV视角,r为投影平面的宽高比,则透视投影矩阵为:

具体推导参见文章:

深入探索透视投影变换深入探索透视投影变换(续)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenGL的渲染流水线:
  • OpenGL的坐标系
  • OpenGL的矩阵和向量结合方式
  • OpenGL的各个空间的变换矩阵
    • 世界变换矩阵
      • (1)缩放矩阵 (ScaleMatrix)
      • (2)旋转矩阵
      • 一,绕X轴顺时针旋转Θ度数
      • 三,绕Z轴顺时针旋转Θ度数
      • (3)移动矩阵(TranslateMatrix)
  • 二,相机变换矩阵(ViewMatrix)
  • 三,透视投影矩阵(PerspectiveMatrix)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档