中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何用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

台中县| 紫云| 洛阳市| 扎囊县| 济南市| 东源县| 甘谷县| 柯坪县| 清原| 新津县| 桃江县| 开原市| 安达市| 尼勒克县| 隆德县| 襄樊市| 邮箱| 宣城市| 临漳县| 哈巴河县| 余干县| 顺平县| 深圳市| 定西市| 扎赉特旗| 涡阳县| 钟祥市| 册亨县| 岫岩| 股票| 柏乡县| 东源县| 抚州市| 桂阳县| 宜兰县| 盐源县| 宁明县| 东阿县| 游戏| 新丰县| 武邑县|