如果不想继承OSG漫游器而直接控制漫游,这里记下一种思路 一,首先更改默认漫游器的handle()函数,将其设置为什么都不处理。 二,通过函数viewer->getCameraManipulator()->setHomePostion(eye2, centre2, up2);设置自己计算得到的漫游器位置和朝向
PS:使用Viewer::addEventHandler()把MatrixManipulator的派生类传递到视景器是没有意义的,因为用于表达相机观察方位的getMatrix()和getInverseMatrix()函数永远不会被
Viewer调用,因而也就无法改变照相机
osg
GA::CameraManipulator是一个支持自定义相机操作的操作器,支持用户自己定义鼠标、键盘操作来操作相机。常见的自定义鼠标键盘操作需求,比如:
使用键盘
控制
相机旋转、平移
使用鼠标操作相机旋转、平移
控制
场景绕某个视点旋转
第一人称视角的的相机操作
参考https://blog.csdn.net/u012501459/article/details/36666305
因为要用camera显示点云的正视图,但是默认相机参数会导致默认视图是右视图。参考https://blog.csdn.net/u012501459/article/details/36666305修改相机参数,让初始视图改为正视图。
使用MFC_
OSG
类实现
osg
显示,在InitCameraConfig函数内添加如下代码:
//设置相机参数
osg
::Vec3d eye, center,
1. 非立体模式下动态修改相机远近裁剪面
class GLB_DLLCLASS_EXPORT CGlbGlobeClipHandler : public
osg
::NodeCallback {
struct CustomProjClamper : public
osg
::CullSettings::ClampProjectionMatrixCallback {
temp...
#include <
osg
EarthUtil/EarthManipulator>
//---------------------------------------------------------------------------------------------
//定义视点类对象
osg
Earth::Viewpoint vp;
//设置视点参数,focalPoint()函数返回的是一个点_point,然后调用set()函数进行设置,第一个参数是空间参考参数,第二个
#pragma comment(lib, "
osg
.lib")
#pragma comment(lib, "
osg
DB.lib")
#pragma comment(lib, "
osg
Viewer.lib")
#include "
osg
Viewer/Viewer"
#include "
osg
DB/ReadFile"
#include "
osg
/Node"
#include "
osg
/Shape"
#include "
osg
/Geode"
#include "
osg
/ShapeDrawable"
若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/96973379
Demo运行效果
初始化模型代码
事件管理器代码
工程模板:对应版本号1.14.0
OSG
三维开发...
一般在相机里面进行设置
camerasetReferenceFrame(
osg
::Transform::ABSOLUTE_RF_INHERIT_VIEWPOINT);//设置为绝对位置后,方可生效
//设置相机视点
osg
::Vec3d eyev(avgx-100,avgy-100,800);
osg
::Vec3d centerv(centerx,centery,100);
osg
::V
osg
::ref_ptr<
osg
Viewer::Viewer> viewer = new
osg
Viewer::Viewer;
osg
::ref_ptr<
osg
::Camera> camera = viewer->getCamera();
// 获取相机的位置、方向和上方向
osg
::Vec3d eye, center, up;
camera->getViewMatrixAsLookAt(eye, center, up);
// 输出相机的位置、方向和上方向
std::cout << "Eye: " << eye.x() << ", " << eye.y() << ", " << eye.z() << std::endl;
std::cout << "Center: " << center.x() << ", " << center.y() << ", " << center.z() << std::endl;
std::cout << "Up: " << up.x() << ", " << up.y() << ", " << up.z() << std::endl;
这将输出当前相机的位置、方向和上方向。你可以根据这些值来计算当前相机的视角。