2010-06-25

2010-06-22

C# 的執行緒同步

用 C++ 寫多執行緒同步程式時常用到的功能有 InterlockedIncrement、CRITICAL_SECTION 和 Semaphore,其對照在 C# 下的使用方式為:

1. InterlockedIncrement

    C++ 的用法如下:
    UINT nCt =0;
    InterlockedIncrement( &nCt );

    C# 的用法如下:
    int nCt =0;
    System.Threading.Interlocked.Increment( ref uCt );

2. CRITICAL_SECTION

    C++ 的用法如下:
    CRITICAL_SECTION g_cs;
    EnterCriticalSection( &g_cs );
    {
        //...
    }
    LeaveCriticalSection( &g_cs );

    C# 的用法如下:
    Object cs = new Object();
    lock (cs)
    {
        //...
    }

3. Semaphore

    C++ 的用法如下:
    HANDLE m_Handle =CreateSemaphore( NULL, 1, 1, L"SemaphoreName" );
    WaitForSingleObject( m_Handle, nWaitTime );
    {
        //...
    }
    ReleaseSemaphore( m_Handle, 1, NULL );
    CloseHandle( m_Handle );

    C# 的用法如下:
    private static AutoResetEvent m_Handle =new AutoResetEvent( true );
    m_Handle.WaitOne();
    {
        //...
    }
    m_Handle.Set();

2010-06-17

C# 的 delegate

delegate 大致類似 C++ 的函數指標。

C++ 的用法如下:

void ShowPercentage( int nPercentage );
typedef void (* CALLBACK) (int);
CALLBACK =showPercentage;

呼叫 ShowPercentage 函數:
CALLBACK( 100 );

ShowPercentage( 100 );


C# 的用法如下:

void ShowPercentage( int nPercentage );
delegate void ShowPercentageDelegate( int nPercentage );
ShowPercentageDelegate CALLBACK = ShowPercentage;

呼叫 ShowPercentage 函數:
CALLBACK( 100 );

ShowPercentage( 100 );

2010-06-01

Collada 模型檢視器 + 擴增實境 AR



HK416

Robot

F430

A6M3

SBD3

Titanic

Taipei 101

YZF-R1


小弟利用工作閒餘寫了一個具有擴增實境 (AR) 的 Collada 模型檢視器, 主要開啟的是 Google 3D Warehouse 裡的 collada 模型, render 的部分接下來會增強光線和陰影效果 (例如 HDR, SSAO 之類的), 但想要問各位對程式接下去的發展有沒有什麼建議 ? (例如增加場景編輯, 物理運算, 人物遊覽場景, 寵物飼養等....,)

程式下載

ps. 

  1. 因為用 media foundation library 來擷取 webcam 畫面, 所以程式目前只能在 vista 或 win7 上跑, 過些時候再把 xp 的版本放上來.
  2. 執行路徑在 bin/DAELoader.exe
  3. 從 3D warehouse 下載的 Collada 檔為 zip 格式, 將它解壓縮之後可以在 models 目錄下找到副檔名 dae 的檔案, 開啟此檔即可載入模型.
  4. 將副檔名 dae 檔關聯到 DAEViewer.exe, 以後只要連點 dae 檔, 系統就會自動呼叫 DAEViewer 來開啟之.