圖形渲染+事件處理最終版

基于之前做的項目圖形移動處理-CSDN博客添加了相機,透視投影,鼠標控制圖形旋轉。雖然個人感覺這個項目用的是一個二維的三角形,給他加透視投影和相機意義不大,因為透視投影是近大遠小,我這個程序設置了放大縮小的限制,說實話,理論上加沒加看不出去別來,只是為了實踐一下,并且是通過鼠標讓三角形旋轉,也不需要再設置相機繞著三角形看不同角度,視覺上是一樣的。后面改用三維度圖形才會有區別。這里就講講相對于之前的項目新添加到功能吧。

三角形旋轉事件

我設計的這個是根據鼠標橫向/縱向移動,使得三角形繞y軸/x軸旋轉。

添加的成員變量
//旋轉參數QVector3D m_rotationangles;//三維向量,存放x,y,z軸旋轉角度bool m_isrotating;QPoint m_lastmousepos;
m_rotationangles

是一個三維向量,里面存放著繞x,y,z軸旋轉的角度。

m_isrotating旋轉狀態
m_lastmousepos

記錄上一次鼠標停留的坐標

在構造函數中初始化m_rotationangles為一個{0,0,0}的向量矩陣,m_isrotating為false

myWediget::myWediget(QWidget *parent) : QOpenGLWidget(parent) {setFocusPolicy(Qt::StrongFocus);m_rotationangles=QVector3D(0,0,0);//初始化為000m_isrotating=false;//初始化旋轉狀態
}
鼠標事件加入

我們設計他的邏輯是鼠標左鍵按下以后,m_lastmousepos會記錄鼠標的當前位置,然后鼠標拖動,用現在鼠標的位置-上次鼠標的位置得到的是一個移動路徑的向量,注意這里操作角度用的數據都是向量,然后更新旋轉矩陣{x,y,z},繞x軸正向旋轉就是m_rotationangles.x()+delta.y()*0.5f,為什么加的是delta的y,可以試著想一下,想讓三角形繞x軸旋轉不就是用鼠標向上向下移動。

//鼠標按下事件
void myWediget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){m_isrotating=true;//開始旋轉m_lastmousepos=event->pos();//獲取鼠標位置event->accept();}
}//鼠標松開事件
void myWediget::mouseReleaseEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){m_isrotating=false;event->accept();}
}//鼠標移動事件
void myWediget::mouseMoveEvent(QMouseEvent *event)
{if(m_isrotating){QPoint delta=event->pos()-m_lastmousepos;m_rotationangles.setX(m_rotationangles.x()+delta.y()*0.5f);//繞x軸旋轉m_rotationangles.setY(m_rotationangles.y()+delta.x()*0.5f);//繞y軸旋轉m_lastmousepos=event->pos();update();event->accept();}
}

把旋轉矩陣傳入繪制函數逐幀繪制,在原有基礎上加幾句就行了

transform.rotate(m_rotationangles.x(),1,0,0);
transform.rotate(m_rotationangles.y(),0,1,0);
transform.rotate(m_rotationangles.z(),0,0,1);

前面第一個參數是旋轉矩陣的對應軸的參數,后面是要繞哪個軸旋轉就把他設置為1,到這里功能就完成了,為啥沒設置shader,我之前的項目中transform就是專門用來處理三角形運動的uniform,之前是只有移動和縮放,縮放建議最后處理,不然有些問題。

透視投影和相機

另外兩個帶一嘴吧,透視投影是近大遠小的效果,繪畫讓三位圖形比較立體

//設置透視投影QMatrix4x4 projection;projection.perspective(45.0f,(float)w/h,0.1,100.0f);sdprogram.bind();sdprogram.setUniformValue("projection",projection);sdprogram.release();

? ? ?projection.perspective(45.0f,(float)w/h,0.1,100.0f);第一個參數是視角,可以理解為你眼睛張多大,第二個參數就是寬高比,推薦和屏幕或者視口一致,第三個最近離你多近,超過了就看不見了,第四個就是最遠離你有多遠,超出了就看不見了,就是模擬你眼睛。

再就是相機,相機 是有一個自己的坐標系的,鏡頭指向的方向是自己坐標系z軸的正方向

// 視圖矩陣(相機后移3單位)QMatrix4x4 view;view.translate(0, 0, -3.0f);

我這里就把他后移了三個單位,十分簡陋,因為設置了和沒設置沒區別,就懶得設置他了,我這是不是有些敷衍哈哈。

就這樣,程序大功告成,展示最終效果
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79004.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79004.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79004.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

G口大帶寬服務器線路怎么選

G口大帶寬服務器線路選擇指南 ??一、線路類型與特點?? ??單線(電信/聯通/移動)?? ??優勢??:帶寬獨享、價格低、延遲穩定,適合單一運營商用戶集中場景。??劣勢??:跨運營商訪問延遲高(如電信…

HTML10:iframe內聯框架

iframe內部框架 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>內聯框架學習</title> </head> <body> <!--iframe內聯框架 src:地址 width-height:高度寬度 --> <iframe…

基于 Spring Boot 瑞吉外賣系統開發(十一)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;十一&#xff09; 菜品啟售和停售 “批量啟售”、“批量停售”、操作列的售賣狀態綁定單擊事件&#xff0c;觸發單擊事件時&#xff0c;最終攜帶需要修改售賣狀態的菜品id以post請求方式向“/dish/status/{params.status}”發送…

springboot war包tomcat中運行報錯,啟動過濾器異常,一個或多個篩選器啟動失敗。

錯誤信息&#xff1a; "level": "ERROR", "thread": "localhost-startStop-1", "class": "o.a.c.c.C.[.[localhost].[/Crmeb-admin]", …

Cursor —— AI編輯器 使用詳解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款優秀的AI代碼編輯器&#xff0c;它內置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 簡單說&#xff0c;就是&#xff1a;Cursor VS Code 編輯器 AI 大模型 Cursor 功能特性&#xff08;代碼補全、…

在Excel圖表添加輔助線

前言&#xff1a;博主最近是有點忙&#xff0c;好吧&#xff0c;就是很忙&#xff0c;但我也不想水文章的&#xff0c;每一篇文章都是本人精心編輯&#xff0c;覺得對大家有用才發布的。而且同一個類型的文章&#xff0c;我基本都會寫在同一篇中方便大家集中獲取。本來這篇文章…

2025.5.8總結(中期審視)

今日記錄&#xff1a; 晚上&#xff0c;主管找我聊了關于中期績效審視的問題。 首先就是讓我匯報上半年的工作進展&#xff0c;匯報完后&#xff0c;感覺體現不出自己的工作量&#xff0c;這確實考驗個人的匯報能力。 匯報完工作后&#xff0c;主管開始給我提了一些建設性的…

Excel模版下載文件導入

工作中經常遇到Excel模板下載&#xff0c;然后填好后再導入的情況&#xff0c;簡單記錄下&#xff0c;方便下次使用 Excel模版下載&#xff08;返回Base64&#xff09; 模板文件存放位置 import java.util.Base64; import org.apache.commons.io.IOUtils; import org.sprin…

SpringBoot 訊飛星火AI WebFlux流式接口返回 異步返回 對接AI大模型 人工智能接口返回

介紹 用于構建基于 WebFlux 的響應式 Web 應用程序。集成了 Spring WebFlux 模塊&#xff0c;支持響應式編程模型&#xff0c;構建非阻塞、異步的 Web 應用。WebFlux 使用了非阻塞的異步模型&#xff0c;能夠更好地處理高并發請求。適合需要實時數據推送的應用場景。 WebClie…

模擬Sch LVS Sch 方法

Step1&#xff1a;打開calibre 打開一個terminal&#xff0c;進到想要做lvs的路徑&#xff1a; 在terminal 敲入calibre -gui&#xff0c;產生calibre 界面 點擊nmLVS&#xff0c;產生calibre LVS界面 Step2&#xff1a;LVS 界面設置1 LVS rules file&#xff1a;加載lvs規…

注解的定義

一、理論說明 1. 注解的定義 Java 注解是從 JDK 5.0 開始引入的一種元數據機制&#xff0c;它可以為代碼添加額外的信息&#xff0c;這些信息不影響程序的運行邏輯&#xff0c;但可以在編譯期、類加載期或運行期被讀取和處理。注解本質上是一種特殊的接口&#xff0c;所有注解…

面試實踐AND面經熱點題目總結

1、對于Rocketmq消息積壓、丟失如何解決&#xff1f; 消息積壓原因以及解決方案 &#x1f3af; 產生原因&#xff1a; 消費者處理能力弱&#xff0c;消費速度遠低于生產速度&#xff1b; 網絡不穩定&#xff0c;消費者拉取消息失敗&#xff1b; 消費端異常&#xff08;如處理…

【KWDB 創作者計劃】使用Docker實現KWDB數據庫的快速部署與配置

【KWDB 創作者計劃】使用Docker實現KWDB數據庫的快速部署與配置 前言一、KWDB介紹1.1 KWDB簡介1.2 主要特點1.3 典型應用場景 二、環境介紹2.1 部署環境要求2.2 本地環境規劃2.3 部署模式 三、部署Docker環境3.1 安裝相關工具3.2 配置Docker軟件源3.3 更新軟件源3.4 安裝Docker…

JWT深度解析:現代Web身份驗證的通行證-優雅草卓伊凡

# JWT深度解析&#xff1a;現代Web身份驗證的通行證 ## 一、JWT的本質與構成 ### 1.1 JWT的定義解析 JWT&#xff08;JSON Web Token&#xff09;是一種**開放標準&#xff08;RFC 7519&#xff09;**&#xff0c;用于在各方之間安全地傳輸信息作為JSON對象。這種信息可以被…

前端緩存踩坑指南:如何優雅地解決瀏覽器緩存問題?

瀏覽器緩存&#xff0c;配置得當&#xff0c;它能讓頁面飛起來&#xff1b;配置錯了&#xff0c;一次小小的上線&#xff0c;就能把你扔進線上 bug 的坑里。你可能遇到過這些情況&#xff1a; 部署上線了&#xff0c;結果用戶還在加載舊的 JS&#xff1b;接口數據改了&#xf…

2022年8月,?韓先超對中移信息進行微服務架構原理(Docker+k8s+DevOps+Go等)培訓

2022年8月&#xff0c;?韓先超對中移信息進行微服務架構原理&#xff08;Dockerk8sDevOpsGo等&#xff09;培訓 2022年8月&#xff0c;在企業數字化轉型和云原生架構加速演進的背景下&#xff0c; 中移信息技術有限公司特別邀請云原生與DevOps領域專家 韓先超老師&#xff0c…

ComfyUI 學習筆記,案例 6 :FLUX 模型文生圖

背景 剛開始了解 Comfy UI 的時候&#xff0c;隨便找了一個資料&#xff0c;對著這篇 《Flux在ComfyUI里的下載與安裝》 進行操作的&#xff0c;下載了這里面的模型到本機。 玩了幾天&#xff0c;大概對 ComfyUI 有了一點了解&#xff0c;知道了 Flux 這是一個模型&#xff0…

Docker + Watchtower 實現容器自動更新:高效運維的終極方案

文章目錄 前言一、Watchtower 簡介二、Watchtower 安裝與基本使用1. 快速安裝 Watchtower2. 監控特定容器 三、Watchtower 高級配置1. 設置檢查間隔2. 配置更新策略3. 清理舊鏡像4. 通知設置 四、生產環境最佳實踐1. 使用標簽控制更新2. 更新前執行健康檢查3. 結合CI/CD流水線 …

從易發性分析到災后規劃,AI大模型如何顛覆傳統地質災害防治?

地質災害是指全球地殼自然地質演化過程中&#xff0c;由于地球內動力、外動力或者人為地質動力作用下導致的自然地質和人類的自然災害突發事件。在降水、地震等自然誘因的作用下&#xff0c;地質災害在全球范圍內頻繁發生。我國不僅常見滑坡災害&#xff0c;還包括崩塌、泥石流…

第37次CCF第三題--模板展開--stringstream讀取字符串

1 a hello 1 b world 2 c $a $b 1 d good $c 1 a hi 1 e good $c1 a hello 1 b world 2 c $a $b 3 c 1 a hi 3 c將會輸出&#xff1a;10 和 7&#xff0c;對應的變量的值為&#xff1a; helloworld hiworld 需要注意的是&#xff0c;在使用間接賦值語句時&#xff0c;在變量的…