推 LPH66:也許是因為 openGL 的矩陣是 column major 的? 10/22 20:00
推 Bencrie:推樓上,我覺得原 po 有可能乘錯 XD 10/22 22:43
→ 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
推 damody:在shader裡面算不會比較慢喔 ~~ 10/24 22:39
→ damody:x,y,z範圍都必須落在-1~1之間 是對的 10/24 22:40
→ damody:平移沒問題是因為投影矩陣幫你投影回 -1~1 之間 10/24 22:40
→ damody:model view 也有縮放 旋轉 位移效果 10/24 22:41
推 tsl3333:不是World Matrix的Scale Rot Translate相乘順序錯了 10/24 23:48
→ tsl3333:不然就是View Matrix or Projection Matrix有地方有問題.. 10/24 23:49
→ tsl3333:我覺得你可以先去了解一下圖學的概念 再來做這個 10/25 00:10
→ tsl3333:會對你比較有幫助 10/25 00:10
→ tsl3333:這裡有跟妳一樣的問題 你要不要在檢查一下你C++的矩陣乘法 10/25 00:16
→ tsl3333:順序的部分看看 10/25 00:24