【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坐标
}
相关推荐
数字融合12 小时前
透明化视频孪生虚实映射一体化融合技术
人工智能·python·数码相机
LabVIEW开发1 天前
IMAQdx 报 0xBFF69011 取属性失败
数码相机·labview·labview知识·labview功能·labview程序
AttosTek1 天前
产品推荐|500万像素短波红外相机SWIR035AU
数码相机
I Am a robert girl2 天前
从最后一帧反推世界:LIFT 如何用布局控制视频生成
深度学习·数码相机·计算机视觉·音视频·视频生成·可控生成·布局控制
虾..2 天前
三维渲染数学基础:从相机坐标系到投影变换
数码相机
田里的水稻2 天前
EP_ROS2的相机视频流传递说明
数码相机·机器学习
加载力科技2 天前
Mac 打开 ISO 文件完整教程:3 种方法挂载与解压,挂载失败也能提取文件
macos·命令模式·磁盘工具·mac打开iso·hdiutil·iso解压·mac技巧
田里的水稻2 天前
EP_ROS框架---相机视频流交互二
人工智能·深度学习·数码相机·机器学习·迁移学习
光电的一只菜鸡2 天前
相机光学(五十六)——DCIAF
数码相机
Zldaisy3d2 天前
北京理工大学 l 金属激光增材制造在线监测技术研究进展
数码相机·3d·制造