【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坐标
}
相关推荐
学术小李15 小时前
图形学中的世界、相机、Clip(裁剪)、NDC等坐标系
数码相机
2601_9574188015 小时前
如何开发一个相机照片传输App?从设备连接到图片上传完整流程解析
数码相机
浪里镖客3 天前
Python调用海康MV-CU013-AUOM(USB3.0连接)工业相机录制视频
数码相机
QYR-分析4 天前
手持声学相机行业增速稳健 国产突围开启产业新格局
数码相机
gaosushexiangji4 天前
基于高速3D-DIC的风力叶片旋转工况下应变测量与振动模态分析
数码相机
格林威5 天前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
XMAIPC_Robot6 天前
RK3588四路1080P工业MIPI相机视觉网关,同时支持RK3588+FPGA的24路相机同步方案
人工智能·数码相机
吐了啊取名字太难6 天前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
科技圈快迅7 天前
科美锐(Komery)新手入门数码相机产品梳理:百元到千元,不同价位实际能买到什么
数码相机
OAK中国_官方7 天前
OAK相机 IMU 和外壳标定
数码相机