osg orbitManipulator拖拽位置不精确的问题解决。

2023-11-19

实际上,就是个焦距和视距的问题。

摄像机在不同的位置,远近切面会改变,但是fovy和aspectRatio不改变,这样,也会导致近切面的宽高发生改变。就类似于一个无限延伸的视锥体滑梯,远近切面就在这滑梯上滑动。由于最终物体要投影到近切面,而近切面是可以不断发生变化的,这样就会在拖拽时,可能划过的实际距离不相等。也就是说,起点和终点的像素差即使相等,也会实际距离可能不等。这样造成的现象,就是,在近切面太小时,托拽不动。

怎么解决呢?不同的远近切面的拖拽程度有没有一个比率呢?有的,根据相似三角形,zNear/_distance可以作为系数。因为最终要投射到近切面,而物体在_distance处是客观存在的。(当然,如果_distance如果太小了,可以再单独处理)

拖拽过程:一个push->N个Drag,->1个release组成
可以在Push的时候记录屏幕坐标
startptInViewport = ea.getX(), ea.getY()

在拖拽过程或者release的时候,再记录一个值
endPtInViewPort = ea.getX(),ea.getY(),

根据屏幕坐标转换为世界坐标公式,或者叫矩阵级联,获取世界坐标系的起点startPt和终点endPt
这两者的向量差是
deltaVec = -(endPt - startPt)/ratio,
为什么是负数呢?
因为向左拖拽,视口会向右移,所以要加负号。
这个ratio就是近切面和焦距的比值,即
ratio = zNear / _distance;
改变_center,即
_center = _center + deltaVec。

当然,在_distance很小时,也会拖拽不动,这时候可以乘以一个系数,比如
if(_distance < 0.5)
{
_ratio = _ratio/_distance;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

osg orbitManipulator拖拽位置不精确的问题解决。 的相关文章

随机推荐

  • Vue使用高德地图报 INVALID_USER_SCODE 错误

    项目场景 通过地点名称搜索并更新地图位置没有反应 搜索功能失效 问题描述 输入地点后点击搜索报错 原因分析 自2021年12月02日升级 升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 解决方案 通过在高德开放平台创建并
  • Linux stat 命令及示例

    介绍 该stat命令打印有关文件和文件系统的详细信息 该工具提供有关所有者是谁 修改日期 访问权限 大小 类型等信息 该实用程序对于故障排除 在更改文件之前获取有关文件的信息以及例行文件和系统管理任务至关重要 本文stat通过实际示例解释了
  • 跨平台游戏引擎 Axmol-2.0.0 正式发布

    下载 https github com axmolengine axmol releases tag v2 0 0 更新日志 添加实验性的 WebAssembly 构建支持 WebGL 2 0 由 nowasm 贡献 已知问题 WebGL
  • C++:压缩算法1.0

    题目描述 某压缩算法的基本思想是用一个数值和一个字符代替具有相同值的连续字符 例如 输入字符串 RRRRRGGBBBBBBC 压缩后为 5R2G6B1C 请编写程序实现上述功能 输入 输入共一行 一串待压缩的字符 输出 输出共一行 压缩后的
  • uniapp实现猜数字小游戏

    一个uniapp的样例 超级简单 效果图在最后 外观 首先定义文字区块 用来告诉玩家现在改干什么以及猜的数字是猜大了还是猜小了
  • C++ STL迭代器相关

    map 迭代器 以下代码在编译时出错 提示c map报错 map set iterators incompatible map
  • 客户端无法连接腾讯云服务器Redis

    一 问题 使用Redis Desktop Manager 昨天可以连接上Redis服务器 今天却不可以 二 解决方案 1 确保IP地址 端口号 输入密码正确 1 1 redis conf 文件中port 1 2 redis conf文件中r
  • mysql执行计划固定_Oracle固定SQL的执行计划(一)---SQL Profile

    我们都希望对于所有在Oracle数据库中执行的SQL CBO都能产生出正确的执行计划 但实际情况却并非如此 由于各种各样的原因 比如目标SQL所涉及的对象的统计信息的不准确 或者CBO内部一些成本计算公式的先天缺陷等 导致有时CBO产生效率
  • Java使用for循环和while循环分别实现实现任意一个正整数逆序输出

    使用for循环将任意位数的正整数逆序 import java util Scanner public class ForNiXuTest public static void main String args System out prin
  • LSTM时间序列预测代码超通俗解释(MATLAB)

    数据在评论区 可以查看这一篇博客有更好的代码和可视化 多序列 http t csdn cn a4pM0 单序列 https blog csdn net m0 62526778 article details 128996795 clc cl
  • 微信小程序 picker选择器 表单验证 源码

    微信小程序表单验证 这是自己写的 比较low 下篇附上公司大佬的源码 嘿嘿 所在城市带选择城市的功能 比较懒笨 附上的代码是完整的 把接口数据换成自己的就可以用了 样式需要自己调 请在评论区夸我 附上要用的API的路径 https deve
  • OCR目前的发展现状综述

    本文目的是为了总结OCR各类技术的发展 从搜集资料到整理 可以看出OCR技术目前的一个大致发展趋势 目前还处于随时添加状态 敬请期待 更新时间 2019年9月26日 很好的参考资料 这个GitHub收集了文本检测 文本识别 端到端的论文以及
  • Dynamics CRM2011 同一个FORM表单同一个字段可以摆放多次

    这是一个很细微的问题 细微到很容易被忽略 可能其他人没有但我确实是忽略了 红框中的勾默认是勾选的 可能有人会像我一样 从没关心过这个地方还有个勾也从没关心过要把这个勾去掉 所以在表单上A B两个节中需要同一个C字段 而不同条件下A B只有一
  • 【数据库入门】关系型数据库为什么这么受欢迎?

    个人主页 个人主页 系列专栏 数据库入门 新人博主 喜欢就关注一下呗 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 其以行和列的形式存储数据 以便于用户理解 关系型数据库这一系列的行和列被称为表 一组表组成了数据库 用户
  • 关于wav文件读取的一个小问题(librosa和soundfile)

    今天在跑melgan时候 发现GPU使用率低的感人 原本以为是pytorch的dataloader的问题 之后把num worker改为0 用主进程进行读取数据 发现主要卡在了librosa的load上 from librosa core
  • Docker 之Harbor 初步使用

    1 命令行登陆 harbar 镜像仓库 root node1 harbor docker login 192 168 27 134 9901 Username admin Password WARNING Your password wil
  • LSM详解

    关于LSM结构的相关介绍 这篇文章比较好 特此纪录一下https yq aliyun com articles 767772
  • python服务器开发debug_如何使用PyCharm开发和调试服务器上的代码

    0x00 前言 之前调试Python程序的时候一直都使用的是pdb 一个Python内置的调试模块 然后拿本地的源码进行比对 偶然听 周佩雨 ph师傅提到可以使用PyCharm对远端服务器上的代码进行调试 同时还可以对多进程类程序进行调试
  • 蓝牙打开流程

    通常两种打开方式 一个是在菜单Setting上打开 一种就是自动打开 default on 两种都是最终调用IBluetooth enable 来打开的 启动蓝牙BluetoothService frameworks base servic
  • osg orbitManipulator拖拽位置不精确的问题解决。

    实际上 就是个焦距和视距的问题 摄像机在不同的位置 远近切面会改变 但是fovy和aspectRatio不改变 这样 也会导致近切面的宽高发生改变 就类似于一个无限延伸的视锥体滑梯 远近切面就在这滑梯上滑动 由于最终物体要投影到近切面 而近