osg中实现如果AutoCAD中左下角的坐标轴
2015-11-03 16:32
1041 查看
在场景左下角显示一个表示当前场景坐标轴向,它只是对相机旋转有反应,对场景缩放和移动不起效果,采取方法:将一个坐标轴模型节点放在一个Projection下或放在Matrixtransform下设置为绝对坐标模式,让后再回调剔除移动变换。
class HUDAxis:public Camera { public: HUDAxis(); HUDAxis(HUDAxis const& copy, CopyOp copyOp = CopyOp::SHALLOW_COPY); META_Node(osg, HUDAxis); inline void setMainCamera(Camera* camera){ _mainCamera = camera;} virtual void traverse(NodeVisitor& nv); protected: virtual ~HUDAxis(); observer_ptr<Camera> _mainCamera; }; /////////////////////////////////////cpp/////////////////////////////////////////////////// HUDAxis::HUDAxis() { //可以在这直接读取axes.osgt; // this->addChild(osgDB::readNodeFile("axes.osgt")); } HUDAxis::HUDAxis(HUDAxis const& copy, CopyOp copyOp /* = CopyOp::SHALLOW_COPY */):Camera(copy, copyOp), _mainCamera(copy._mainCamera) { } void HUDAxis::traverse(NodeVisitor& nv) { double fovy, aspectRatio, vNear, vFar; _mainCamera->getProjectionMatrixAsPerspective(fovy, aspectRatio, vNear, vFar); this->setprojectionMatrixAsOrtho(-10.0*aspectRatio, 10.0*aspectRatio, -10.0, 10.0, 2.0, -2.0); Vec3 trans(8.5*aspectRatio, -8.5, -8.0); if(_mainCamera.valid() && nv.getVisitorType() == NodeVisitor::CULL_VISITOR) { Matrix matrix = _mainCamera->getViewMatrix(); matrix.setTrans(trans); this->setViewMatrix(matrix); }//if osg::Camera::traverse(nv); } HUDAxis::~HUDAxis() { } ////使用这个类代码///// ref_ptr<HUDAxis> hudAxes = new HUDAxis; ref_ptr(Node) _axes = osgDB::readNodeFile("axes.osgt"); hudAxes->addChild(_axes); hudAxes->setMainCamera(camera); hudAxes->setRenderOrder(Camera:OST_RENDER); hudAxes->setClearMask(GL_DEPTH_BUFFER_BIT); hudAxes->setAllowEventFocus(false); hudAxes->setReferenceFrame(Transform::ABSOLUTE_RF); scene->asGroup()->addChild(hudAxes); |
相关文章推荐
- 用同理心颠覆你的产品设计流程
- Server.UrlEncode、HttpUtility.UrlDecode的区别
- C# arcgis globecontrol 三维地图 基础操作 加载地图 缩放 漫游
- 首次运行AndroidStudio
- 关于Fragment中getActivity为Null的问题
- C++单元测试一:并非看上去那么简单——几个很实际的问题
- Django静态文件配置
- DES加密(单倍长、双倍长、三倍长)
- learn Netty
- Received lower prio advert, forcing new election (KEEP ALIVED)
- Spring定时器的配置(注解+xml)方式
- sql2008常用语句
- android 选择照片(相册/拍照/切图)
- android 网络判断工具类(APN+WIFI)
- Stitch Fix是如何做到大规模定制(mass customization)的?
- mysql创建视图中使用union报错1064
- RunLoop 和 线程加锁 atomic 的特性
- JAVA-p257 T7.17
- 我的iPhone设置
- 【软件理论】MVC概念