[程式] openGL矩陣問題
※ [本文轉錄自 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
推
10/22 20:00, , 1F
10/22 20:00, 1F
推
10/22 22:43, , 2F
10/22 22:43, 2F
→
10/22 22:44, , 3F
10/22 22:44, 3F
先感謝樓上兩位大大回應 @@"
我本來也覺得是不是我矩陣乘錯了
但對照一下應該是不會
(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
推
10/24 22:39, , 4F
10/24 22:39, 4F
→
10/24 22:40, , 5F
10/24 22:40, 5F
→
10/24 22:40, , 6F
10/24 22:40, 6F
→
10/24 22:41, , 7F
10/24 22:41, 7F
推
10/24 23:48, , 8F
10/24 23:48, 8F
→
10/24 23:49, , 9F
10/24 23:49, 9F
→
10/25 00:10, , 10F
10/25 00:10, 10F
→
10/25 00:10, , 11F
10/25 00:10, 11F
→
10/25 00:16, , 12F
10/25 00:16, 12F
→
10/25 00:16, , 13F
10/25 00:16, 13F
→
10/25 00:24, , 14F
10/25 00:24, 14F