18 關於動態改變模型矩陣

2021-09-14 08:12:32 字數 1034 閱讀 8921

1.問題描述:一般來說,我們設定全域性變數來儲存模型矩陣的引數,當使用者輸入時改變引數,最後在draw方法中計算矩陣並傳入著色器,但是今天我遇到了這樣的問題:

在draw方法中,mvpmatrix.multiply(modelmatrix),鍵盤事件中以步長的方式改變了模型引數,即:y_angle +=(-=) angle_step;實現的效果出錯,原因在於:

當modelmatrix中引數改變時,與mvpmatrix相乘後mvpmatrix發生了改變,在進行下次運算時導致mvpmatrix是在上次變換後的基礎上進行變換,顯示效果出錯。

//鍵盤事件

y_angle +=(-=) angle_step;

draw(...);

//每次事件觸發時執**況如下:每次mvpmatrix的初值都不同,導致顯示效果出錯

draw()

值得注意的是:這時我們很自然的想到,那只要把每次事件觸發後y_angle賦值為要改變的角度就可以了,即

//鍵盤事件

y_angle = angle(-angle);

draw(...);

//每次事件觸發時執**況如下:每次mvpmatrix的初值都不同,導致顯示效果出錯

draw()

這樣的確可以解決該問題,但是當會導致每次呼叫draw方法時都會旋轉指定角度(不論旋轉角度的事件是否觸發),所以我們應該採用下面的方案

2.解決方案:

應該在主函式中定義投影檢視矩陣viewprojmatrix來設定投影和檢視引數,然後將該矩陣傳入draw方法,在每次呼叫draw方法之前先將viewproj矩陣賦給mvpmatrix,再進行運算,即

//鍵盤事件

y_angle +=(-=) angle_step;

draw()

3.關於matrix4中設定模型變換引數的進一步理解:

如果matrix4的引數皆未設定,setfunname和funname只使用一次的效果是相同的,如果還有後續操作,那麼結果是不同的,應該使用相應的正確方法。

Ext labelfield 動態改變

在ext form 中的 field 中的fieldlabel,只提供了初始化賦值,並沒有提供動態改變其值的方法,經過大量的實驗,終於找出了乙個比較簡單的解決方案,1.首先,需要動態賦值的field需要有個id 如果沒有手動指定,則ext會自動生成乙個,可以獲取到 2.ext.domquery.se...

python importlib動態匯入模組

一般而言,當我們需要某些功能的模組時 無論是內建模組或自定義功能的模組 可以通過import module 或者 from import module的方式匯入,這屬於靜態匯入,很容易理解。而如果當我們需要在程式的執行過程時才能決定匯入某個檔案中的模組時,並且這些檔案提供了同樣的介面名字,上面說的方...

關於改變他人

從記事起,我們每個人都在受環境的影響,也不斷的受到他人的影響,進而不斷的改變自己,久而久之會形成一種慣性的思維,我們接受別人的影響,改變了自己,於是又把這種思想反過來使用,想要通過自己去改變他人。然而時間久了會發現,這種反向思維似乎並不如我們所預期的那樣把別人改變成自己預期的模樣,反而因此疏遠了彼此...