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

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

作者头像
用户1148525
发布于 2019-06-11 03:21:25
发布于 2019-06-11 03:21:25
1.5K0
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 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为投影平面的宽高比,则透视投影矩阵为:

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
docker离线安装配置
这里下载docker-20.10.8.tgz,如果无法下载可以在网盘下载: docker安装包下载 提取码:qw9f 将docker-20.10.8.tgz文件上传到系统上:
全栈程序员站长
2022/11/09
9470
docker离线安装配置
开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)
开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论,总结出安装部署Datahub最新版本的部署手册,希望能帮助到大家。
用户6070864
2023/09/06
1.9K0
开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)
Linux 离线安装docker的过程
有时候会遇到服务器不能联网的情况,这样就没法用yum安装软件,docker也是如此,针对这种情况,总结了一下离线安装docker的步骤
用户4464623
2020/09/10
3.5K0
Docker离线安装(支持GPU)
https://download.docker.com/linux/static/stable/x86_64/
拉爷
2024/02/27
1.7K0
Docker离线安装教程「建议收藏」
上传portainer包https://download.csdn.net/download/qq_27884227/85501735
全栈程序员站长
2022/11/10
8210
Docker离线安装教程「建议收藏」
docker 离线安装及命令整理[通俗易懂]
1. 从官方下载Docker安装包并上传至虚拟机 https://download.docker.com/linux/static/stable/x86_64/
全栈程序员站长
2022/11/09
4.3K0
Docker 离线安装_docker官方中文文档
1、访问docker安装包离线网址:https://download.docker.com/linux/static/stable/x86_64/,下载对应版本 2、上传安装包到指定路径,执行命令 tar -zxvf 安装包.tgz 3、进入docker目录,将目录下的所有文件拷贝至“/usr/bin/” [root@CentOS opt]# cd docker/ [root@CentOS docker]# cp * /usr/bin/ 4、执行“vim /etc/systemd/system/docker.service”命令,然后在文件中添加以下内容,然后按“esc”,退出编辑状态,输入“:qw”退出文件编辑。 [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target 5、给文件增加可执行权限 chmod +x /etc/systemd/system/docker.service systemctl daemon-reload 6、开机启动 systemctl enable docker.service 7、启动docker systemctl start docker.service
全栈程序员站长
2022/11/09
1.4K0
Docker - 离线安装
概述 公司有一个项目需要使用Docker进行部署。 客户公司网络不能连接外网。 系统为centos7,内核为3.10.0。 具体内容 一、下载Docker安装包 下载地址 二、上传解压 tar -xvf docker-18.06.3-ce.tgz 三、将解压出来的docker文件内容移动到 /usr/bin/ 目录下 cp docker/* /usr/bin/ 四、将docker注册为service vim /etc/systemd/system/docker.service [Unit] Descrip
断痕
2021/01/21
1.7K0
【Docker】专题五:Docker 配置文件详解
docker.service 是 Docker 守护进程(Docker Daemon)在 Linux 系统上使用 systemd 作为初始化系统时的服务单元文件,它定义了 Docker 服务启动、停止和管理的方式。
行者Sun
2024/09/02
1.5K0
【Docker】专题五:Docker 配置文件详解
Linux中安装部署docker
Docker是一个开源的容器化平台,用于帮助开发者更轻松地构建、打包、分发和运行应用程序。它基于容器化技术,利用操作系统层级的虚拟化来隔离应用程序和其依赖的环境。通过使用Docker,开发者可以在不同的主机上快速部署和扩展应用程序,而不需要担心环境配置和依赖问题。
九仞山
2023/10/14
3K0
Linux中安装部署docker
Harbor离线部署
docker安装包地址:https://download.docker.com/linux/static/stable/x86_64/ docker-compose安装包地址:https://github.com/docker/compose/releases harbor安装包地址:https://github.com/goharbor/harbor/releases
范一刀
2021/09/29
1.3K0
Docker安装harbor仓库、更改端口、跨服务器访问
添加如下配置: –insecure-registry 192.168.2.4:自己的端口
gang_luo
2020/08/13
4.4K0
Docker安装harbor仓库、更改端口、跨服务器访问
kubernetes 二进制安装(v1.20.16)(三)容器运行时
本集群选择 docker 作为容器运行时。 文章目录 创建docker管理文件 分发文件 核对文件 启动docker 创建docker管理文件 #在k8s-master上进行操作,为了方便操作,将可执行文件和配置文件进行了分离 #可执行文件放在/opt/TLS/download/docker/bin下 #配置文件放在/opt/TLS/download/docker/cfg下 ​ cd /opt/TLS/download mkdir -p bin mv docker/* bin mv bin docker m
看、未来
2022/06/09
3480
k8s部署之kubesphere安装与配置使用教程
Docker-Compose下载路径:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
小炜同学
2022/11/12
7.3K0
k8s部署之kubesphere安装与配置使用教程
CentOS7 安装 Trilium Notes 中文版 折腾记
仓库:https://github.com/Nriver/trilium-translation
独立观察员
2023/12/26
9790
CentOS7 安装 Trilium Notes 中文版 折腾记
Docker入门之安装Docker
本文操作基于CentOS7,其它Linux发行版本可能存在差异,分基于yum的在线安装和基于二进制包的离线安装(实际还有基于rpm包的离线安装),离线安装可以更多地了解Docker及相关体系。
一见
2020/01/15
2.4K0
Centos离线安装docker
下载tagbao tar -xvf docker-18.06.1-ce.tgz cp docker/* /usr/bin/ vim /etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=netw
用户10325771
2023/03/01
1.7K0
统信服务器操作系统【docker 介绍及部署安装】
Docker是一个基于go语言开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何支持Docker的Linux或Windows操作系统上。Docker基于内核的轻量级虚拟化技术,使用沙箱机制,容器之间相互隔离。通过容器来打包应用、解耦应用和运行平台Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
Kevin song
2024/05/11
2.7K0
统信服务器操作系统【docker 介绍及部署安装】
Docker容器入门操作介绍
Docker是一个C/S结构的项目,有Docker Client、RESTAPI、Docker Server、images、container、 volumes、network组成。
王先森sec
2023/04/24
4380
Docker容器入门操作介绍
ARM架构鲲鹏主机BClinux离线安装docker步骤
脚本参考自 https://github.com/docker/docker-ce
雪人
2024/10/18
3140
相关推荐
docker离线安装配置
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • OpenGL的渲染流水线:
  • OpenGL的坐标系
  • OpenGL的矩阵和向量结合方式
  • OpenGL的各个空间的变换矩阵
    • 世界变换矩阵
      • (1)缩放矩阵 (ScaleMatrix)
      • (2)旋转矩阵
      • 一,绕X轴顺时针旋转Θ度数
      • 三,绕Z轴顺时针旋转Θ度数
      • (3)移动矩阵(TranslateMatrix)
  • 二,相机变换矩阵(ViewMatrix)
  • 三,透视投影矩阵(PerspectiveMatrix)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档