91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Shader得到物體的世界坐標

發布時間:2021-12-22 14:49:11 來源:億速云 閱讀:420 作者:柒染 欄目:大數據

本篇文章給大家分享的是有關如何用Shader得到物體的世界坐標,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

最近群里面有個朋友問我關于如何得到OpenGL世界坐標的問題,當時我還弄錯了,誤以為gl_ModelViewMatrix*gl_Vertex就是世界坐標。因最近也突然遇到了世界坐標的問題,所以花了一些時間來研究這個問題,網上也有人問,但或許沒有答案,或許是錯的。 其實,OpenGL的轉換管道直接將gl_Vertex,也就是物體坐標,用gl_ModelViewMatrix相乘,得到的是眼坐標。如果將gl_ModelViewMatirx拆分為gl_ModelMatrix和gl_ViewMatrix,那么問題就好解決了。但事實上沒有提供。要清楚OpenGL其實沒有世界坐標系,世界坐標系是應用程序的概念。其實可以將OpenGL的攝像機看作是固定的,其坐標系就是眼坐標系,移動攝像機和移動物體的位置是一個相反的轉換,對于觀察者來說根本不知道是攝像機在動,還是物體在動,說回來最終的變換是這樣的:

eyePos=viewMatrix * modelMatrix * modelVertex

在OpenGL里面viewMatrix和modelMatrix合并了,因為OpenGL里面并沒有設置攝像機的參數,所以OpenGL并不知道viewMatrix到底是什么。viewMatrix是用戶自己定義的,所以如果能夠得到這個viewMatrix并能得到其逆矩陣,就可以得到worldPos:

worldPos=viewMatrixInv * viewMatrix * modelMatrix * modelVertex

傳統的OpenGL程序里面,你得自己計算這個viewMatrixInv,還好OSG的Camera提供了一個getViewMatrixInverse()方法,通過這個方法我們就可以輕松的獲得viewMatrixInv,然后傳遞給Vertex Shader(用一個Uniform就可以),然后進行這個計算就可以了。 記得每一幀都需要Update這個viewMatrixInv,只需要一個updateCallBack就可以了。 好了,看幾個圖,我用3DSMAX創建了兩個盒子,為了便于觀察,模型的頂點值限制在0-1之間,然后用osgExp導出,沒有選中Flatten Static Transform這樣就不會把模型定點轉換成世界坐標系的頂點。 源代碼中可以改變gl_FragColor=的值來修改為相應的坐標系的值顯示。 世界坐標系的最終輸出,可見顏色連續變換的。

以上就是如何用Shader得到物體的世界坐標,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁阳县| 广东省| 秦皇岛市| 泽库县| 汽车| 沁水县| 泽州县| 兴隆县| 龙海市| 额尔古纳市| 南安市| 太仓市| 青海省| 景洪市| 乌拉特中旗| 建德市| 湖南省| 乌什县| 北碚区| 韩城市| 渭源县| 翁牛特旗| 揭西县| 苗栗县| 南汇区| 广元市| 沐川县| 大方县| 安陆市| 监利县| 泌阳县| 黄骅市| 渝中区| 定边县| 合肥市| 阜平县| 五峰| 姚安县| 盖州市| 呈贡县| 隆回县|