国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt3D繪制旋轉(zhuǎn)立方體

這篇具有很好參考價值的文章主要介紹了Qt3D繪制旋轉(zhuǎn)立方體。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

近期用了款叫DesktopSpace,也想實現(xiàn)一下這款軟件實現(xiàn)的效果
具體實現(xiàn)步驟:

  1. 使用Qt3D繪制個旋轉(zhuǎn)的立方體(一)
  2. 使用快捷鍵控制立方體顯示面(二)
  3. 創(chuàng)建6個人虛擬桌面,截取不同虛擬桌面,顯示在不同的面上 (三)
  4. 在立方體上播放視頻

首先用Qt3D繪制一下桌面截圖旋轉(zhuǎn)的效果

Qt3D繪制旋轉(zhuǎn)立方體,桌面應(yīng)用程序開發(fā),qt,Qt3D,3d

Qt3D簡單介紹

Qt 3D 是一個用于創(chuàng)建交互式 3D 圖形應(yīng)用程序的框架。它提供了一組類和函數(shù),用于創(chuàng)建、渲染和操作 3D 場景。Qt 3D 在 Qt c++ 和 Qt Quick 應(yīng)用程序中支持 2D 和 3D 渲染,為近實時仿真系統(tǒng)提供了功能。

以下是 Qt 3D 中一些常用的類說明和代碼流程:

Qt3DCore:這是 Qt 3D 框架的核心模塊,包含了一些基本類和接口,用于構(gòu)建 3D 場景和實體。其中一些重要的類包括:

QEntity:表示 3D 場景中的實體,可以添加組件和子實體。
QTransform:表示實體的變換信息,用于控制實體的位置、旋轉(zhuǎn)和縮放等屬性。
Qt3DRender:這個模塊主要用于渲染圖形對象,包括定義材質(zhì)、紋理和著色器等。其中一些重要的類包括:

QMaterial:表示實體的材質(zhì),包含了表面屬性、紋理和渲染狀態(tài)等。
QEffect:定義了渲染效果的著色器程序。
QTexture:表示紋理,可以加載圖像并應(yīng)用于材質(zhì)。
Qt3DInput:這個模塊用于處理用戶輸入(例如鼠標和鍵盤事件),以及與用戶交互的功能。其中一些重要的類包括:

QMouseDevice:用于監(jiān)聽和處理鼠標事件。
QKeyboardDevice:用于監(jiān)聽和處理鍵盤事件。

下面是一個簡單的 Qt 3 D 代碼流程示例,展示了如何創(chuàng)建一個帶有實體、材質(zhì)和變換的場景:

#include <Qt3DCore/QEntity>   
#include <Qt3DRender/QMaterial>   
#include <Qt3DRender/QEffect>   
#include <Qt3DRender/QTexture>   
#include <Qt3DCore/QTransform>   
  
int main(int argc, char** argv) {  
    QApplication app(argc, argv);  
    // 創(chuàng)建場景根實體  
    Qt3DCore::QEntity sceneRoot;  
    // 創(chuàng)建一個實體  
    Qt3DCore::QEntity* entity = new Qt3DCore::QEntity(&sceneRoot);  
    // 創(chuàng)建材質(zhì)  
    Qt3DRender::QMaterial* material = new Qt3DRender::QMaterial(entity);  
    // 創(chuàng)建紋理  
    Qt3DRender::QTexture2D* texture = new Qt3DRender::QTexture2D(material);  
    // 設(shè)置紋理屬性  
    // 創(chuàng)建效果  
    Qt3DRender::QEffect* effect = new Qt3DRender::QEffect();  
    // ...  
}

這個示例只是 Qt 3 D 的一個簡單應(yīng)用,如果需要更深入了解和使用 Qt 3 D ,建議閱讀官方文檔和相關(guān)教程。

繪制旋轉(zhuǎn)立方體

主函數(shù)

#include "cubewidget.h"
#include <Qt3DExtras/QTextureMaterial>
#include <QImage>
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QCheckBox>
#include <Qt3DCore/QEntity>
#include <Qt3DCore/QTransform>
#include <Qt3DExtras/QCuboidMesh>
#include <Qt3DExtras/QPhongMaterial>
#include <Qt3DExtras/Qt3DWindow>
#include <Qt3DExtras/QOrbitCameraController>
#include <Qt3DExtras/QForwardRenderer>
#include <QTimer>
#include <Qt3DRender/QCamera>
#include <Qt3DCore/QComponent>
#include <Qt3DRender/QTextureImage>
#include <Qt3DRender/QTexture>
#include <QMatrix3x3>
#include <QRenderSurfaceSelector>
#include <QImage>
#include "rotatorutil.h"
#include "rotator.h"
#include "hotkeymanager.h"
#include "mymaterialimage.h"
#include "lazyutil.h"

#include "animationutil.h"

CubeWidget::CubeWidget(QWidget *parent)
    : QWidget{parent}
{
    // 創(chuàng)建3D窗口
    Qt3DExtras::Qt3DWindow *view = new Qt3DExtras::Qt3DWindow();
    view->defaultFrameGraph()->setClearColor(QColor(210, 210, 220, 0));
    view->setTitle("Qt3D C++ example: rotate cube");

    // 創(chuàng)建一個容器小部件和窗口布局
    QWidget *container = QWidget::createWindowContainer(view);
    container->setAttribute(Qt::WA_TranslucentBackground, true);

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(container, 1);

    // 創(chuàng)建一個用于窗口的小部件并設(shè)置其布局
    setLayout(layout);

    // 創(chuàng)建場景的根實體
    Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();

    // 創(chuàng)建相機實體并設(shè)置其位置和視圖中心
    Qt3DRender::QCamera *cameraEntity = view->camera();
    cameraEntity->setPosition(QVector3D(10.0f, 0, 0.0f));
    cameraEntity->setViewCenter(QVector3D(0, 0, 0));

    // 創(chuàng)建立方體實體并添加立方體網(wǎng)格組件和馮氏材質(zhì)組件
    Qt3DCore::QEntity *cubeEntity = new Qt3DCore::QEntity(rootEntity);
    Qt3DExtras::QCuboidMesh *cubeMesh = new Qt3DExtras::QCuboidMesh();
    cubeMesh->setXExtent(5.1f);
    cubeMesh->setYExtent(3.23f);
    cubeMesh->setZExtent(5.1f);

//    cubeMesh->setXYMeshResolution(QSize(300, 100));
//    cubeMesh->setXZMeshResolution(QSize(300, 100));
//    cubeMesh->setYZMeshResolution(QSize(100, 100));

    auto *image = new MyQPaintedTextureImage;
    image->setImage(LazyUtil::Instance()->grabScreenImage());
    auto *cubeMaterial = new Qt3DExtras::QTextureMaterial;
    cubeMaterial->texture()->addTextureImage(image);
#ifdef USE_OCV
    QTimer* timer = new QTimer(this);
    connect(timer, &QTimer::timeout, image, &MyQPaintedTextureImage::updateImage);
    timer->start(50); // 1000毫秒刷新一次
#endif
    // 將立方體網(wǎng)格組件和馮氏材質(zhì)組件添加到立方體實體
    cubeEntity->addComponent(cubeMesh);
    cubeEntity->addComponent(cubeMaterial);

    // 創(chuàng)建一個變換組件并將其添加到立方體實體
    Qt3DCore::QTransform *transform = new Qt3DCore::QTransform();
    cubeEntity->addComponent(transform);

#if 1
    // 定時旋轉(zhuǎn)
    Rotator *rotator = new Rotator();
    QObject::connect(rotator, &Rotator::rotationChanged, transform, &Qt3DCore::QTransform::setRotation);
#else
    // 快捷鍵旋轉(zhuǎn)
    RotatorUtil *rotator = new RotatorUtil();
    QObject::connect(rotator, &RotatorUtil::rotationChanged, transform, &Qt3DCore::QTransform::setRotation);

    QObject::connect(HotkeyManager::Instance(), &HotkeyManager::angleHorizontalChanged, rotator, &RotatorUtil::updateAngleHorizontal);
    HotkeyManager::Instance()->registerLeftRotateHotkey(rotator);
    HotkeyManager::Instance()->registerRightRotateHotkey(rotator);

    QObject::connect(HotkeyManager::Instance(), &HotkeyManager::angleVerticalChanged, rotator, &RotatorUtil::updateAngleVertical);
    HotkeyManager::Instance()->registerTopRotateHotkey(rotator);
    HotkeyManager::Instance()->registerBottomRotateHotkey(rotator);

    QObject::connect(HotkeyManager::Instance()->getWorker(), &RotateWorker::angleHorizontalChanged, rotator, &RotatorUtil::updateAngleHorizontal);
    QObject::connect(HotkeyManager::Instance()->getWorker(), &RotateWorker::angleVerticalChanged, rotator, &RotatorUtil::updateAngleVertical);
#endif

    // 設(shè)置窗口的根實體
    view->setRootEntity(rootEntity);

    setAttribute(Qt::WA_TranslucentBackground, true);

    AnimationUtil::AnimationSmaller(this);
}

動畫控制類文章來源地址http://www.zghlxwxcb.cn/news/detail-741736.html

#ifndef ROTATOR_H
#define ROTATOR_H

#include <Qt3DCore/QComponent>
#include <QTimer>
#include <QVector3D>
#include <QQuaternion>

// A custom component that controls the rotation of an entity
class Rotator : public Qt3DCore::QComponent
{
    Q_OBJECT
public:
    Rotator(Qt3DCore::QNode *parent = nullptr)
        : Qt3DCore::QComponent(parent)
        , m_angle(0.0f)
    {
        // Create a timer to update the angle every 10 ms
        QTimer* timer=new QTimer(this);
        connect(timer, &QTimer::timeout, this, &Rotator::updateAngle);
        timer->start(10);
    }

    // A function to get the current rotation as a quaternion
    QQuaternion rotation() const
    {
        // Calculate the rotation axis as the cross product of the up vector and the forward vector
        QVector3D axis = QVector3D(0.0f, 1.0f, 0.0f)
                             .crossProduct(QVector3D(0.0f, -1.0f, 0.0f),
                                           QVector3D(-1.0f, 0.0f, 1.0f));

        // Normalize the axis
        axis.normalize();

        // Return the rotation as a quaternion
        return QQuaternion::fromAxisAndAngle(axis, m_angle);
    }

private slots:
    // A slot to update the angle by 1 degree
    void updateAngle()
    {
        // Increment the angle by 1 degree
        m_angle += 0.2f;

        // Wrap the angle to [0, 360) range
        if (m_angle >= 360.0f) {
            m_angle -= 360.0f;
        }

        // Emit a signal to notify the change of rotation
        emit rotationChanged(rotation());
    }

signals:
    void rotationChanged(const QQuaternion &rotation);

private:
    float m_angle; // The angle of rotation in degrees
};

#endif // ROTATOR_H

到了這里,關(guān)于Qt3D繪制旋轉(zhuǎn)立方體的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【libGDX】立方體手動旋轉(zhuǎn)

    【libGDX】立方體手動旋轉(zhuǎn)

    ? 本文主要介紹使用 libGDX 繪制立方體,并實現(xiàn)手動觸摸事件控制立方體旋轉(zhuǎn)。 ? 為方便控制觸摸旋轉(zhuǎn),并提高渲染性能,我們通過改變相機的位置和姿態(tài)實現(xiàn)立方體旋轉(zhuǎn)效果。 ? 讀者如果對 libGDX 不太熟悉,請回顧以下內(nèi)容。 使用Mesh繪制三角形 使用Mesh繪制矩形 使用M

    2024年03月09日
    瀏覽(32)
  • 計算機圖形學 | 實驗六:旋轉(zhuǎn)立方體

    計算機圖形學 | 實驗六:旋轉(zhuǎn)立方體

    華中科技大學《計算機圖形學》課程 MOOC地址:計算機圖形學(HUST) 在正式搭建環(huán)境之前,我們先來介紹一下讀完下面的部分你會了解些什么。 繪制出旋轉(zhuǎn)立方體需要的新知識 認識一些 OpenGL的新功能 接下來,我們來介紹一下繪制旋轉(zhuǎn)立方體。繪制效果如下: Z-緩存(Z-Buff

    2024年02月06日
    瀏覽(86)
  • Unity2021 實現(xiàn)不同面顏色不同的立方體鼠標鍵盤控制旋轉(zhuǎn)

    Unity2021 實現(xiàn)不同面顏色不同的立方體鼠標鍵盤控制旋轉(zhuǎn)

    1.創(chuàng)建一個3D的項目 2.創(chuàng)建一個Cube和一個Plane(其實沒啥用,可以不建) 3.在Project的Assets中創(chuàng)建三個文件夾,后續(xù)放代碼文件 4.設(shè)置顏色。 (1)在Material文件夾中右鍵創(chuàng)建一個Material文件命名為CubeMaterial,也就是下圖中第一個白色的圓圈。中間的是控制Plane的,如果沒有創(chuàng)建

    2024年02月08日
    瀏覽(19)
  • OpenGLES:3D立方體紋理貼圖

    OpenGLES:3D立方體紋理貼圖

    前幾篇博文講解了OpenGLES繪制多種3D圖形,并賦予豐富的色彩,但是在這些3D圖形繪制過程中,有一點還沒有涉及,就是 紋理貼圖。 今天這篇博文我會用如下 六張圖片 對立方體進行紋理貼圖,實現(xiàn) 六個面都是貼圖 的3D旋轉(zhuǎn)立方體 2.1 常規(guī)變量定義 2.2 頂點、紋理相關(guān)變量定義

    2024年02月08日
    瀏覽(24)
  • Qt3D模塊使用

    Qt3D模塊使用

    在Qt中顯示一個簡易的立方體,效果如下 1.Qt官方提供的Qt3d 的實例較少,QWidget的實例更少,通過以下兩個函數(shù)就能加載一個3D場景到一個QWidget的布局器中 2.初始化3D的場景,一般為固定代碼 3.構(gòu)造立方體實體代碼

    2024年02月11日
    瀏覽(12)
  • Three.js初識:渲染立方體、3d字體、修改渲染背景顏色

    Three.js初識:渲染立方體、3d字體、修改渲染背景顏色

    用場景對three.js進行渲染:場景、相機、渲染器 場景 透視攝影機 參數(shù)解析: fov: 視野角度(FOV)。視野角度就是無論在什么時候,你所能在顯示器上看到的場景的范圍,它的單位是角度(與弧度區(qū)分開)。 aspect: 長寬比(aspect ratio)。 也就是你用一個物體的寬除以它的高的值

    2024年02月07日
    瀏覽(25)
  • ??創(chuàng)意網(wǎng)頁:使用CSS和HTML創(chuàng)建令人驚嘆的3D立方體

    ??創(chuàng)意網(wǎng)頁:使用CSS和HTML創(chuàng)建令人驚嘆的3D立方體

    ? 博主: 命運之光 ? ?? 專欄: Python星辰秘典 ?? 專欄: web開發(fā)(簡單好用又好看) ?? 專欄: Java經(jīng)典程序設(shè)計 ?? 博主的其他文章: 點擊進入博主的主頁 前言: 歡迎踏入我的Web項目專欄,一段神奇而令人陶醉的數(shù)字世界! ?? 在這里,我將帶您穿越時空,揭開屬于

    2024年02月12日
    瀏覽(36)
  • Qt3D 輸入類處理鼠標鍵盤動作

    Qt3D模塊中的輸入類用于處理用戶輸入,比如鼠標、鍵盤等輸入事件。 ```cpp #include Qt3DExtras #include Qt3DInput #include Qt3DCore #include Qt3DRender #include Qt3DLogic #include Qt3DExtras int main(int argc, char *argv[]) { ? ? QApplication app(argc, argv); ? ? // 創(chuàng)建Qt3D窗 ? ? Qt3DExtras::Qt3DWindow view; ? ? // 創(chuàng)建3

    2024年02月02日
    瀏覽(20)
  • 使用Unity3D創(chuàng)建一個立方體(Cube)游戲?qū)ο蟛覷nity

    Unity3D是一個強大的游戲開發(fā)引擎,可以用來創(chuàng)建各種類型的游戲和交互應(yīng)用程序。在本文中,我們將探討如何使用Unity3D創(chuàng)建一個立方體(Cube)游戲?qū)ο?,并啟動Unity編輯器。 首先,確保你已經(jīng)安裝了Unity3D并且已經(jīng)在你的計算機上成功啟動。然后,按照以下步驟進行操作:

    2024年02月05日
    瀏覽(122)
  • HTML5七夕情人節(jié)表白網(wǎng)頁制作【抖音3D立方體圖像庫】HTML+CSS+JavaScript html生日快樂祝福網(wǎng)頁制作

    HTML5七夕情人節(jié)表白網(wǎng)頁制作【抖音3D立方體圖像庫】HTML+CSS+JavaScript html生日快樂祝福網(wǎng)頁制作

    這是程序員表白系列中的100款網(wǎng)站表白之一,旨在讓任何人都能使用并創(chuàng)建自己的表白網(wǎng)站給心愛的人看。 此波共有100個表白網(wǎng)站,可以任意修改和使用,很多人會希望向心愛的男孩女孩告白,生性靦腆的人即使那個TA站在眼前都不敢向前表白。說不出口的話就用短視頻告訴

    2024年02月02日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包