Collecting the dlls for mingw-w64 compiled programs

Problem

When using mingw-64 to compile programs, it usually comes with lots of dlls in dependencies. Moreover, these dlls are placed inside the installation path, inside mingw32/bin for 32-bit dlls and mingw64/bin for 64-bit dlls. When I want to share my program with my friends, I usually need to packing the dlls with the exe. So I need to collect the dlls by hand which bothers me a lot.

Open the program and see the error message and then copy the dlls to folder. Sometimes the error message doesn’t even tell the dll name, only with some vague error message that I need to google myself.

繼續閱讀全文 »

SFML 使用 - Event 視窗事件

要怎麼跟視窗互動呢?使用者在視窗上互動時,SFML 會產生事件(Event),進而接收窗口的事件,並針對發生的事件(例如:滑鼠移動、點擊,鍵盤點擊等)做相對應的處理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;

case sf::Event::KeyPressed:
// ...
break;

default:
break;
}
}

SFML 總共有以下這幾種事件:

繼續閱讀全文 »

C++ - chrono 計時

C++11 提供了 <chrono> 作為時間的 library,除了能夠獲取時間,且可以在多個單位轉換。

這個 Library 是只有時間 e.g. 小時、分鐘、秒..等,如果要日期則要使用其他 Library e.g. HowardHinnant/date 或是 ctime()

  • duration
    • 時間的長度,可自由決定儲存的單位
  • time_point
    • 時間點,相減會得到時間長度(duration)
  • Clocks
    • 根據物理時間回傳時間點(time_point)
    • 提供不同精度的 clock

繼續閱讀全文 »

QuadTree - 使用四叉樹優化碰撞檢測

在 2D 遊戲中,常常需要做碰撞檢測(Collision Detection)來檢測兩物體是否產生碰撞,而這類的演算法都很耗時間,如果要檢測整個 Scene 的所有物體是否有碰撞,常見的做法是 $O(n^2)$ 掃過去,這樣很大限制了同屏的物體總數,數量一多就會卡頓。

優化:對於一個物體,只要檢查它周圍的物體就好。那要怎麼時做這個優化呢?為了找出周圍的物體又去掃 $O(n^2)$ 就不是又回到上面的問題了。

那有沒有辦法先用某種資料結構儲存好物體,然後用比較好的複雜度查詢對於一個物體,它周圍的物體的集合? 四叉樹(Quad Tree)就是個用於此問題的資料結構

繼續閱讀全文 »

SFML 簡介及環境設置

Simple and Fase Media Library (SFML) 是一個由 C++ 寫成的跨平台(cross-platfrom)的用於遊戲、多媒體應用開發的 Library,有多個語言的綁定 (Binding) ,分成幾大模塊:系統、視窗、圖形、音訊跟網路。


https://github.com/SFML/SFML

  • SFML 分成幾大模塊
    • System 一些基礎建設,例如:向量(vector)、字串、thread、timer
    • Window 管理視窗以及輸入(鍵盤、滑鼠、搖桿等)及 OpenGL
    • Graphics 硬體加速的 2D 圖形:sprite, text, shapes
    • Audio 音訊、錄音、3D音效
    • Network TDP 與 UDP socket 與 HTTP 跟 FTP

繼續閱讀全文 »

OpenGL 筆記 - Coordinate System

OpenGL 座標的值在 經過 Vertex Shader 之後變成 $[-1.0, 1.0]$ 的座標,稱作 標準化設備座標 Normalized Device Coordinates (NDC),只有在此座標內的頂點最終才會顯示在螢幕上。

座標在被轉換成螢幕座標(Screen-Space)時還會經過多次轉換

  • 座標系統
    • 局部空間 Local Space 或是 物體空間(Object Space)
    • 世界空間 World Space
    • 觀察空間 View Space 或 Eye Space
    • 裁剪空間 Clip Space
    • 螢幕空間 Screen Space

繼續閱讀全文 »