【VTK 】 02 锥体旋转起来获取到相机位置

物体旋转起来,是相机位置发生变化,实现的,其实物体没有运动

代码如下所示

cone2.h

cpp 复制代码
#ifndef CONE2_H
#define CONE2_H

#include <QWidget>
#include <QTimer>
#include <QDebug>
#include <QString>
#include <QTextBrowser>
#include "QVTKOpenGLNativeWidget.h"               //新版本,旧版QVTKWidget
#include "vtkAutoInit.h"
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkCommand.h"
namespace Ui {
class Cone2;
}



//  VTK回调类 vtkMyCallback
class vtkMyCallback : public vtkCommand
{
public:
    // 静态工厂方法,用于创建类的实例
    static vtkMyCallback *New()
    {
        return new vtkMyCallback;  // 返回新创建的 vtkMyCallback 对象
    }
    // 重写 Execute 方法,当 VTK 事件触发时会被调用
    void Execute(vtkObject *caller,unsigned long,void*) override;

    // 指向 QTextBrowser 的指针,用于在 GUI 中显示文本
    QTextBrowser *textBrowser = nullptr;

private:


};



class Cone2 : public QWidget
{
    Q_OBJECT

public:
    explicit Cone2(QWidget *parent = nullptr);
    ~Cone2();
    void outputMessage(double temp);

private:
    Ui::Cone2 *ui;
    vtkConeSource *cone = nullptr;                  //声明椎体

    vtkPolyDataMapper *coneMapper = nullptr;        //声明映射器

    vtkActor *coneActor = nullptr;                  //声明Actor

    vtkRenderer *coneRender = nullptr;              //声明渲染器

    QTimer *rotationTimer = nullptr;                //声明定时器,用于旋转椎体

    vtkMyCallback *myCallBack = nullptr;
};

#endif // CONE2_H

cone2.h

cpp 复制代码
#include "cone2.h"
#include "ui_cone2.h"

Cone2::Cone2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Cone2)
{
    ui->setupUi(this);
    cone = vtkConeSource::New();    //新建对象

    cone->SetHeight(3.0);           //设置高度
    cone->SetRadius(1.0);           //设置半径
    cone->SetResolution(10000000);        //翻译为设置分辨率,不过实际应该不是

    coneMapper = vtkPolyDataMapper::New();          //新建映射器
    coneMapper->SetInputConnection(cone->GetOutputPort());  //设置Cone输出coneMapper数据输入

    //新建Actor,并设置映射器
    coneActor = vtkActor::New();
    coneActor->SetMapper(coneMapper);
    //新建渲染器并设置Actor和背景颜色
    coneRender = vtkRenderer::New();
    coneRender->AddActor(coneActor);
    coneRender->SetBackground(0.1,0.2,0.3);

    //  添加CallBack事件回调函数,添加到coneRender渲染器中
    myCallBack = vtkMyCallback::New();
    myCallBack->textBrowser = ui->textBrowser;
    coneRender->AddObserver(vtkCommand::StartEvent,myCallBack);

    //获取渲染窗口
    ui->openGLWidget->renderWindow()->AddRenderer(coneRender);


    //    while (1) {
    //        ui->widget->GetRenderWindow()->Render();
    //        coneRender->GetActiveCamera()->Azimuth(1);
    //    }
    //旋转椎体  每秒触发40次,每次旋转一个角度
    rotationTimer = new QTimer();
    connect(rotationTimer,&QTimer::timeout,this,[=](){
        coneRender->GetActiveCamera()->Azimuth(1);
        ui->openGLWidget->renderWindow()->Render();            //注意这句话,要加上呀,不然人不给你转,惰性渲染。
    });

    rotationTimer->start(25); 

}

Cone2::~Cone2()
{
    rotationTimer->stop();
    delete ui;
}
//  这个回调函数监听相机位置变化,每当用户与3D视图交互(旋转、平移等)时,
//  就会触发执行,将当前的相机坐标输出到UI中,帮助开发者或用户了解当前的观察视角。
void vtkMyCallback::Execute(vtkObject *caller, unsigned long, void *)
{
    vtkRenderer *renderer = reinterpret_cast<vtkRenderer*>(caller);
    textBrowser->append("Camera Position:");
    // 分别输出X、Y、Z坐标
    textBrowser->append(QString::number((renderer->GetActiveCamera()->GetPosition()[0]),'g',6)); // X坐标
    textBrowser->append(QString::number((renderer->GetActiveCamera()->GetPosition()[1]),'g',6)); // Y坐标
    textBrowser->append(QString::number((renderer->GetActiveCamera()->GetPosition()[2]),'g',6)); // Z坐标
}
相关推荐
胖咕噜的稞达鸭10 小时前
如何写好一个skill
人工智能·数码相机
Hello-FPGA10 小时前
CameraLink相机模拟器 信号源加速激光雷达系统算法开发
数码相机
双翌视觉12 小时前
机器视觉系统为何离不开光学滤光片?
人工智能·数码相机·视觉检测·制造
3DVisionary19 小时前
XTDIC-VG视频引伸计技术原理解析:金属疲劳测试的“非接触革命“
python·数码相机·音视频·非接触测量·xtdic-vg·视频引伸计·金属疲劳测试
_李小白1 天前
【智能驾驶:视觉感知后处理 阅读笔记】Day4: 相机成像模型与畸变
笔记·数码相机
Hello-FPGA2 天前
基于VU13P VU系列FPGA的高性能CoaXpress 图像采集系统
数码相机
ctrl_v助手2 天前
VisionPro (R) QuickBuild相机的连接
服务器·笔记·数码相机·c#
工头阿乐2 天前
相机坐标系标定与外参矩阵求解
数码相机·线性代数·矩阵
问道财经2 天前
Pocket 4爆火,索尼富士慌了
数码相机
Hello-FPGA2 天前
CoaXPress 相机触发设置
数码相机