GameDesign 板


LINE

※ [本文轉錄自 C_and_CPP 看板 #1GXI-BRO ] 作者: jack0820 (我想要P幣....Orz) 看板: C_and_CPP 標題: [問題] openGL矩陣問題 時間: Mon Oct 22 19:35:37 2012 大家好 小弟最近正在試著看前輩寫一些openGL的東西 在看的過程中遇到一些問題 想很久都搞不懂 覺得應該是觀念問題 因此就上來請教大家了 流程大概是這樣子的 我利用openGL的一些API 幫我設定一些頂點、顏色之類的 最後會透過GPU幫我畫圖 要透過GPU繪圖 似乎是要透過GLSL來達成 簡略的GLSL流程如下: //vertext shader uniform mat4 matModel; uniform mat4 matProj; uniform mat4 matProjModel; attribute vec4 vertex; void main() { ... vec4 tmp = matModel * vertex; gl_position = matProj * tmp; ... } 其實還有其他部分 但我只列出應該是有問題的地方@@ 其中 matModel、matProj都是可以利用openGL的API來設定 自己看的心得是openGL是先分別設定好matModel、matProj之後 才會在shader裡面做相乘的動作 我想說這樣子做應該會很耗費時間 所以想先在C code裡面先設定好matProjModel = matProj * matModel 把matProjModel丟到shader 之後只要在 shader裡面設定 gl_position = matProjModel * vertex; 這樣就可以了 但是結果發現這樣做的結果是錯誤的 看一下兩個矩陣在c code裡的值是固定的 不懂這樣子為何會錯? 簡單來說 為何在c code裡將兩個矩陣相乘後再丟到shader的矩陣 會跟個別在c code裡設定好矩陣然後再丟到shader透過shader幫我做相乘的結果會不相同 (其實也不能確定說結果不同,因為我無法在shader裡將矩陣的值列印出來比較 但至少圖形的結果顯示會不一樣就是了) 查一下矩陣乘法沒有交換律,但有結合律 即A*(B*C) =(A*B)*C 所以這樣做應該是沒有問題 另外也檢查過矩陣相乘,元素值應該是沒乘錯才對 不知道自己還有忽略了甚麼 所以來請教大家 如果講的術語或觀念有錯也希望大家不吝指教 在此也先謝謝大家的幫忙囉 -- 如果愛情能像物理,我將不再困惑於迷惘 如果物理能解迷情,為了妳,我願意苦讀物理 by 陳碩物理~=.= --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.179.30
1F:推 LPH66:也許是因為 openGL 的矩陣是 column major 的? 10/22 20:00
2F:推 Bencrie:推樓上,我覺得原 po 有可能乘錯 XD 10/22 22:43
3F:→ Bencrie:編譯環境沒有 glu 可以用嗎 ? 10/22 22:44
先感謝樓上兩位大大回應 @@" 我本來也覺得是不是我矩陣乘錯了 但對照一下應該是不會 (code不在手邊~若有需要明天在貼上來@@) 我有看到一個比較奇怪的現象~提出來看看 不知道會不會幫助釐清問題? 之前有提到~ gl_Position = matProj * matModel * vertex 其中matModel為 [0.8, 0 , 0, 0] [0 , 0.5, 0, 0] [0 , 0 , 1, 0] [0.1, 0 ,-6, 1] 現在程式不在手邊,所以只能憑印象打 @@ 詳細的值忘了~但記得對角線與左下角是有值的 根據我查到的心得 是說對角線代表的是圖的縮放 左下角三個值代表的是圖位置的平移 (講錯請指正 @@) 這樣的圖畫出來是顯示在螢幕中間 而且圖應該是在(0.1,0,-6)的位置 為了簡化 我有試著先將 matModel設為單位矩陣 即對角線值全都是1,其他都是0 在 gl_Position = matProj * matModel * vertex 的設定下 依然可以看到圖,只是圖變很大 我的認知是因為z值由-6設為1,而且x,y尺度都設為1,所以圖變大了 現在我用 gl_Position = matProjModel * vertex 即先在C code乘好矩陣再帶進去 在matModel是單位矩陣的情況下也是可以看到一模一樣的大圖 但我將 matModel還原成原本有縮放以及有平移的情況 圖就又看不到了 @_@ 順便問一下~我知道經過投影矩陣變換之後 x,y,z範圍都必須落在-1~1之間 那為啥之前平移設為(0.1,0,-6)依然也可以看到圖呢? 究竟是哪邊想錯了呢? Orz ※ 編輯: jack0820 來自: 114.34.159.175 (10/23 00:07)



※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: jack0820 (114.34.159.175), 時間: 10/23/2012 00:13:19
4F:推 damody:在shader裡面算不會比較慢喔 ~~ 10/24 22:39
5F:→ damody:x,y,z範圍都必須落在-1~1之間 是對的 10/24 22:40
6F:→ damody:平移沒問題是因為投影矩陣幫你投影回 -1~1 之間 10/24 22:40
7F:→ damody:model view 也有縮放 旋轉 位移效果 10/24 22:41
8F:推 tsl3333:不是World Matrix的Scale Rot Translate相乘順序錯了 10/24 23:48
9F:→ tsl3333:不然就是View Matrix or Projection Matrix有地方有問題.. 10/24 23:49
10F:→ tsl3333:我覺得你可以先去了解一下圖學的概念 再來做這個 10/25 00:10
11F:→ tsl3333:會對你比較有幫助 10/25 00:10
12F:→ tsl3333:http://ppt.cc/9h2F 10/25 00:16
13F:→ tsl3333:這裡有跟妳一樣的問題 你要不要在檢查一下你C++的矩陣乘法 10/25 00:16
14F:→ tsl3333:順序的部分看看 10/25 00:24







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP