[問題] Qt shader 設定camera位置

看板C_and_CPP (C/C++)作者 (東逼)時間13年前 (2012/10/19 13:14), 編輯推噓2(207)
留言9則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Qt 5.0 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) openGL 問題(Question): 是這樣的 最近正在用Qt寫一些openGL的東西 Qt5有提供 ShaderEffect這個QML元素 來達成利用GLSL幫我們畫圖的機制 然而在寫的過程中有遇到一些問題 我想要利用GLSL引入圖片 然後對圖片做一些效果,像是旋轉、平移之類的 GLSL code如下: //vertext shader uniform highp mat4 qt_Matrix; attribute highp vec4 qt_Vertex; attribute highp vec2 qt_MultiTexCoord0; varying highp vec2 coord; void main() { highp mat4 ModelMatrix = vec4(...); coord = qt_MultiTexCoord0; gl_Position = qt_Matrix * ModelMatrix * qt_Vertex; } //fragment shader varying highp vec2 coord; uniform sampler2D src; void main() { gl_FragColor = texture2D(src, coord); } 最後畫出來的結果會是一張圖出現在螢幕的左上角 ModelMatrix是我自己另外設定的矩陣 我可以透過這個矩陣對圖片做旋轉或平移 在這裡要請問的就是如果我想改變看的角度要怎麼設定呢? 例如說他原本是在(0,0,10)的位置看 若是想要從(0,10,10) ,就是從圖片的上方往下看 這樣要怎麼設定呢? 我在網路上查了不少資料 滿多人都是利用opengl的API去設定的 (好像是透過glulookat()? ) 但似乎都無法直接在GLSL設定 像是利用 gl_eye(vec3(x,y,z))之類的方式 另外一點,我本來是想說利用平移的方式來做的 但是不知道為啥我平移x,y都沒問題 但平移z就是會出錯~只要z的值超過1.0甚至連圖片都會看不到 不知道是否與座標轉換有關? 小弟最近才剛開始接觸 GLSL 所以可能有很多觀念有誤 也請大家不吝指教囉 在此也先謝謝大家的回答了 -- ▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~ ◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~ ⊙ ⊙ ⊙ ⊙ 人人心中都有柏柏龍~ ≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~ ⊙⊙ ≡皿 ≡ 炸是最美的擁有~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30

10/19 19:05, , 1F
Qt 沒給你那些介面你就自己把剩下的 viewing matrix
10/19 19:05, 1F

10/19 19:06, , 2F
和 projection matrix 乘進去就是了。
10/19 19:06, 2F

10/19 23:49, , 3F
感謝B大回應~ 但我就是想問要怎麼設定viewing matrix 以及
10/19 23:49, 3F

10/19 23:49, , 4F
projection matrix乘進去呢@@?
10/19 23:49, 4F

10/20 00:31, , 5F
Google 找公式吧 ... 自行產生以後丟 Uniform XD
10/20 00:31, 5F

10/20 00:33, , 6F
另外想問一下這是那一版的 GLSL,看語法不像 1.2 以前
10/20 00:33, 6F

10/20 00:34, , 7F
也不像最新的 4.0+ @@a
10/20 00:34, 7F

10/20 14:34, , 8F
不太確定這是幾版的@@ 不過看一下code 有些變數是Qt自己加的
10/20 14:34, 8F

10/20 14:35, , 9F
像是qt_Matrix 那個 vec4(...)是我自己簡化的~還是感謝B大
10/20 14:35, 9F
文章代碼(AID): #1GWE73Lv (C_and_CPP)
文章代碼(AID): #1GWE73Lv (C_and_CPP)