2021年6月28日 星期一

在 Qt Creator 中修改 MSVC 的執行階段程式庫

 在 Qt Creator中修改 MSVC 的執行階段程式庫

前言

  由於最近需要用 Qt 來使用函示庫,但函示庫是使用 MTd(Multi-threaded Debug) 來建置的,如果要和 Qt 使用的話函示庫勢必要修改選項後重建,所以想說有沒有直接改 Qt 的執行階段程式庫,在此做個紀錄。

 

內容

  Qt 在預設的情形下使用 MDd(Multi-threaded DLL Debug) 作為執行階段程式庫,如果需要修改可以在 .pro 裡面新增以下

QMAKE_CFLAGS_DEBUG += /MTd
QMAKE_CXXFLAGS_DEBUG += /MTd


範例是修改成 MTd(Multi-threaded Debug),當然也可以修改成 MD(Multi-threaded DLL)與 MT(Multi-threaded),只要將最後的參數改成需要得即可,改完後一定"重建"才會生效要注意。


參考資料

[ forum.qt.io ] How do I change the Runtime Library setting in my project in QtCreator?


相關文章與資料

Qt 的專案檔

2021年6月27日 星期日

從 HWND 取得 HINSTANCE

 從 HWND 取得 HINSTANCE

前言

  最近需要透過 HWND 來取得 HINSTANCE ,但不知是不是太久沒接觸 Win32 API ,遽然卡在編譯,在此把學習的過程做個紀錄。


內容

  透過搜尋應該會找到 GetWindowLong() 來取得,所以使用以下

#include <winuser.h>
//
HINSTANCE hIns = (HINSTANCE)GetWindowLong( hWnd , GWL_HINSTANCE);


但編譯後發現"GWL_HINSTANCE"遽然未定義!但透過 Visual Standio 的 F12 可以找到定義,在一番查找後才知道 GetWindowLong() 是給 32 位元系統在用的舊 API ,新的 API 是 GetWindowLongPtr() ,用起來如下

#include <winuser.h>
//
HINSTANCE hIns = (HINSTANCE)GetWindowLongPtr( hWnd , GWLP_HINSTANCE);


這裡要注意後方的 Marco 名稱是有些微的差異的,GWLP_HINSTANCE 不論是 32 位元或 64 位元都會存在,但 GWL_HINSTANCE 僅存在於 32 位元,如果用 F12 去 wunuser.h  裡可以發現 64 位元時該 Marcro 會被 undef 掉,這就是為什麼會發生未定義錯誤的原因。


參考資料

[ docs.microsoft.com ] GetWindowLongPtrW function

2021年6月16日 星期三

Python 的鏈式比較

 Python 的鏈式比較

前言

  最近在 [ www.itread01.com ] 【python】簡化鏈式比較 發現 Python 的比較語法有個特別的寫法叫"鏈式比較",在此把學習的過程做個紀錄。


內容

  先來看看語法範例,如下

value = 60
#Old style
if 20 < value and value <100:
    print('True')
else:
    print('False')
#New style
if 20 < value < 100 :
    print('True')
else:
    print('False')


在一般的程式語言會需要做兩次比較的描述,但 Python 提供可以一次就比較且語法直觀,不過我進一步實驗以下

value = 60
if 20 < value != 100:
    print('True')


結果是會列印"True",也就是語法不限於小於或大於的比較運算,只要這個語法想成會拆開個別的比較運算後再用'and'來得到結果就不覺得這語法神奇了。


參考資料

[ www.itread01.com ] 【python】簡化鏈式比較

 


2021年6月8日 星期二

Blender 的 Shader 原始碼查詢

 Blender 的 Shader 原始碼查詢

前言

  Blender 從 2.8 以後開始使用 Shader node 的方式來編輯 Shader ,雖然編輯起來很方便,但有時會需要知道它實際的計算的方式如'MixRGB node',在此把查詢的方法做個紀錄。


內容

  原始碼的位址在 [ github.com ] Blender 的 Shader 原始碼 ,開啟後可看到以下

Blender 的 Shader 原始碼


圖中可以看到每個檔案都是 .glsl ,那如何查找 Shader node 對應的原始碼呢?以下以'MixRGB node'為例,透過檔名的字尾來查找對應的原始碼,如下圖

'MixRGB node'的原始碼

圖中可以看到檔名'gpu_shader_material_mix_rgb.glsl'就是'MixRGB node'的原始碼,點開可看到如下
'MixRGB node'的原始碼內容


'mix_blend'對應到"Mix",'mix_add'對應到"Add",其它都可以依此類推找到對應原始碼。


參考資料

[ github.com ] Blender 的 Shader 原始碼

2021年6月2日 星期三

另外一種漩渦紋理(Texture)

 另外一種漩渦紋理(Texture)

前言

  最近看到 [ www.youtube.com ] Make a Spiral in Under 5 Minutes Using Nodes || Blender 2.82 裡面的作法萃取後可以產生漩渦紋理(Texture),和之前的 產生漩渦的紋理(Texture) 方法有一些不同,這裡做個紀錄。


內容

  先來看 Shader node 的部分,如下圖

Shader node 的做法

結果如下

範例的結果

Shader node 裡被紅圈圈起來的地方可以控制漩渦的圈數,這是上一次 產生漩渦的紋理(Texture) 的做法辦不到的,把該數值調成"1",可以得到下圖

Multify node 的數值為"1"的結果


將該數值調成"10",可以得到下圖

Multify node 的數值為"10"的結果


參考資料

[ www.youtube.com ] Make a Spiral in Under 5 Minutes Using Nodes || Blender 2.82


相關文章與資料

產生漩渦的紋理(Texture)