Trackball rotate的OSG实现(一)(不是manipulator那种~是动物体那种!)

本文详细介绍了使用OpenSceneGraph(osg)实现Trackball Rotate的过程,从鼠标点击模型的拾取,到屏幕点映射到球面上,再到计算旋转参数。通过分析,解释了为何在相机坐标系下进行计算以解决透视投影带来的问题,以及映射点与实际点不一致导致的旋转速度感觉缓慢的修正方法。
摘要由CSDN通过智能技术生成

先写一下我的大致实现流程
鼠标单击模型,调用pick函数,来判断是否pick到了物体,并且获取模型的包围球中心和半径来作为我们这个virtual trackball的方程,哦,还要获取当前模型的位置。
然后将屏幕上的点映射到世界坐标下的球面上。

Created with Raphaël 2.1.0 开始 获取屏幕上的点 (x,y) 得出球面上映射出来的z坐标 求出rotateParameter 结束


详细叙述将鼠标位置映射到球面(或曲面,当鼠标超出球的范围时的过程)
首先得到的是屏幕空间的点A,将该点转换到相机坐标系下A’(x,y,0),再将获取到的物体包围球(在世界坐标系下的)中心O,转换到相机坐标系下O’,为什么要这么做稍后再讲。然后根据O’和半径在相机空间中虚拟了trackball和曲面,然后用A’(x’,y’,z’)去求解下列方程获得z”值。于是得到在相机空间中的A’映射到球面(曲面)上的点V=(x’,y’,z”)。再将这个点V转换到世界坐标中得到V’,用V’- O(世界坐标下的包围球中心)得到映射点到trackball球心的向量V’O。

z(x,y)=
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值