OSG应用:坐标变换

本文拟从应用方面分析OSG坐标变换。

一、坐标变换原理

在OSG中, 局部坐标\boldsymbol{x}经过模型矩阵\boldsymbol{M}、观察矩阵\boldsymbol{V}、投影矩阵\boldsymbol{P}、窗口矩阵\boldsymbol{W}等变换之后,转换为屏幕窗口坐标\boldsymbol{y},即

\boldsymbol{y}= \boldsymbol{x}\cdot\boldsymbol{M}\cdot \boldsymbol{V}\cdot\boldsymbol{ P}\cdot \boldsymbol{W}

二、应用1:视图基本操作

视图用于用户浏览OSG场景,涉及平移、旋转、缩放等三种基本操作。基于OSG坐标变换原理,可以非常轻松的实现这三种基本操作。

操作正交投影透视投影
平移观察矩阵观察矩阵
旋转观察矩阵观察矩阵
缩放投影矩阵观察矩阵

 从视图浏览操作实现原理来看,对于透视投影,通过修改观察矩阵便可完成三种基本操作;对于正交投影,平移、旋转可以通过修改观察矩阵来实现,缩放则需要修改透视投影。

需要指出的是,对于正交投影,投影矩阵也是仿射变换矩阵;对于透视投影,投影矩阵通常并不是仿射变换矩阵。

三、应用2:定点缩放

在CAx软件视图中,一个基本功能是实现场景围绕世界坐标{\boldsymbol{x}}'=\boldsymbol{x}\cdot\boldsymbol{M}进行缩放。不失一般性,考虑通过构造修正矩阵\Delta \boldsymbol{V}来实现缩放,

\left\{\begin{matrix} \begin{align*} \boldsymbol{y} &={\boldsymbol{x}}'\cdot \boldsymbol{V}\cdot\boldsymbol{ P}\cdot \boldsymbol{W} \\ \boldsymbol{y}{}'&= {\boldsymbol{x}}'\cdot \Delta \boldsymbol{V}\cdot \boldsymbol{V}\cdot\boldsymbol{ P}\cdot \boldsymbol{W} \end{align*} \end{matrix}\right.

若取{\boldsymbol{x}}'为中心缩放,为实现定点缩放,需要{\boldsymbol{y}}'=\boldsymbol{y}

因此,修正矩阵\Delta\boldsymbol{V}需要满足{\boldsymbol{ x}}'={\boldsymbol{x}}'\cdot \Delta\boldsymbol{ V}

{\boldsymbol{x}}'=\begin{pmatrix} t_{x}, & t_{y}, & t_{z} \end{pmatrix},缩放因子\boldsymbol{s}=\begin{pmatrix} s_{x}, & s_{y}, & s_{z} \end{pmatrix},可构造如下的修正矩阵\Delta\boldsymbol{ V}

\Delta\boldsymbol{ V}=\begin{pmatrix} 1 & & & \\ & 1 & & \\ & & 1 & \\ -t_{x}& t_{y} & t_{z} & 1 \end{pmatrix}\cdot \begin{pmatrix} s_{x} & & & \\ &s_{y} & & \\ & & s_{z} & \\ & & & 1 \end{pmatrix}\cdot \begin{pmatrix} 1 & & & \\ &1 & & \\ & &1 & \\ t_{x}& t_{y} & t_{z} &1 \end{pmatrix}

很容易验证,上述\Delta\boldsymbol{ V}矩阵满足定点缩放的要求。

四、应用3:S.R.T分解

对于某些应用,需要实现观察矩阵\boldsymbol{V}变换过程中,部分几何模型保持缩放比例不变。

考虑如下的变换:

\begin{align*} \boldsymbol{y}_{1}&= \boldsymbol{x}_{1}\cdot\boldsymbol{M}_{1}\cdot \boldsymbol{V}_{1}\cdot\boldsymbol{ P}_{1}\cdot \boldsymbol{W}_{1}\\ \boldsymbol{y}_{2}&= \boldsymbol{x}_{1}\cdot\boldsymbol{M}_{1}\cdot \boldsymbol{V}_{2}\cdot\boldsymbol{ P}\cdot \boldsymbol{W}_{1} \end{align*}

通常,可将观察矩阵\boldsymbol{V}分解成缩放矩阵\boldsymbol{S}、旋转矩阵\boldsymbol{R}、平移矩阵\boldsymbol{T},即

\begin{align*} \boldsymbol{V}_{1}&= \boldsymbol{S}_{1}\cdot\boldsymbol{R}_{1}\cdot\boldsymbol{T}_{1}\\ \boldsymbol{V}_{2}&= \boldsymbol{S}_{2}\cdot\boldsymbol{R}_{2}\cdot\boldsymbol{T}_{2} \end{align*}

S.R.T分解算法可以参见Shoemake K 1992的文章。

为了观察矩阵变化不影响模型的显示尺寸,可以通过构造模型矩阵\Delta \boldsymbol{M}

\boldsymbol{y}_{2}^{'}= \boldsymbol{x}_{1}\cdot\boldsymbol{M}_{1}\cdot\Delta \boldsymbol{M}\cdot \boldsymbol{V}_{2}\cdot\boldsymbol{ P}\cdot \boldsymbol{W}_{1}

其中,\Delta \boldsymbol{M}\cdot \boldsymbol{V}_{2}=\boldsymbol{S}_{1}\cdot\boldsymbol{R}_{2}\cdot\boldsymbol{T}_{2}

由此可以推出\Delta \boldsymbol{M}=\boldsymbol{S}_{1}\cdot\boldsymbol{R}_{2}\cdot\boldsymbol{T}_{2}\cdot \boldsymbol{V}_{2}^{-1}=\boldsymbol{S}_{1}\cdot \boldsymbol{S}_{2}^{-1}

参考文献

Shoemake K ,  Duff T . Matrix animation and polar decomposition.  1992.

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值