Trackball rotate的OSG实现(二)(不是manipulator那种~是动物体那种!)
来源:互联网 发布:淘宝修图兼职 编辑:程序博客网 时间:2024/05/16 18:38
接上篇,这是篇水数量的博客。
bool TrackballRotate::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa){viewer = dynamic_cast<osgViewer::Viewer*>(&aa);if (!viewer) return false;switch (ea.getEventType()){case osgGA::GUIEventAdapter::PUSH:{int button = ea.getButton();if (button == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON){lbuttonDown = true;pick(ea.getX(), ea.getY());if (PickObject){old_world_point = screen2World(ea.getX(), ea.getY());//old_world_point = { ea.getX(), ea.getY() ,0};std::cout << "old_world_point.x(): " << old_world_point.x() << " old_world_point.y(): " << old_world_point.z() << std::endl;center = picked->getBound().center();std::cout << "center: " << center.x() << " " << center.y() << " " << center.z() << std::endl;originPos = picked->getMatrix();sphere_radius = picked->getBound().radius();std::cout << "sphere_radius: " << sphere_radius << std::endl;std::cout << "radius" << sphere_radius << std::endl;}}else{lbuttonDown = false;}return false;}case osgGA::GUIEventAdapter::DRAG:{if (PickObject&&lbuttonDown){osg::Vec3 new_world_point = screen2World(ea.getX(), ea.getY());//osg::Vec3 new_world_point = { ea.getX(), ea.getY(), 0 };std::cout << "new_world_point.x(): " << new_world_point.x() << " new_world_point.y(): " << new_world_point.z() << std::endl;osg::Quat rotateParameter = GetRotateParameter(new_world_point, old_world_point);std::cout << "rotateParameter: " << rotateParameter.x() <<" "<< rotateParameter.y()<<" " << rotateParameter.z() << std::endl;picked->setMatrix(originPos*osg::Matrix::translate(-center)*osg::Matrix::rotate(rotateParameter)*osg::Matrix::translate(center));originPos = picked->getMatrix();center=picked->getBound().center();old_world_point = new_world_point;}return false;}case osgGA::GUIEventAdapter::RELEASE:{PickObject = false;lbuttonDown = false;return false;}default:return false;}}
1 0
- Trackball rotate的OSG实现(二)(不是manipulator那种~是动物体那种!)
- Trackball rotate的OSG实现(一)(不是manipulator那种~是动物体那种!)
- “是啊,不是姓朱的那种败类就好,
- Service的是那种模式
- 如何不安装opencvManager运行opencv软件(不是那种简单的jni方式)
- 小游戏(名字不知道叫什么好,反正是好像打靶的那种游戏)
- 那种Hash算法是最好的?
- Apache 2.0上 HTTPS 实现CA认证, 不是HTPASSWD的那种.
- asp.net 实现邮箱验证(注册的时候发送邮件激活链接的那种)
- goLang实现一个控制台的输入和输出(最简单的那种)
- 如何实现那种流行的平面按钮
- oracle安装版本的区别(标准版,企业版那种版本)
- 关于用户打分的,不是直接弹出框的那种
- OpenGL Object Mouse Trackball 三维物体的trackball旋转实现原理
- 联系人那种的listView
- 那种关不掉的网页
- 创建 osg manipulator 的关键
- 是你心目中一直喜欢的那种款式
- 微信小程序 this和that用法
- 类中const函数及非const函数的调用规则
- 修改Centos7的网卡名称ens160、eno16777984改为eth0
- 将一个double型数值保留两位小数
- 计算机基础知识
- Trackball rotate的OSG实现(二)(不是manipulator那种~是动物体那种!)
- 官方指定版本《梅迪辛哈特学院毕业》MHC证书工艺一模一样
- 分布式文件系统 FastDFS 5.09 配置
- 【error】hibernate + mysql timestamp类型处理
- 官方指定版本《尼古拉河谷理工学院毕业》SFU证书工艺一模一样
- 官方指定版本《圣杰罗姆大学毕业》TWU证书工艺一模一样
- 斐波那契博弈(hdu 2516)
- java--==号和equals的区别
- Lucas定理