資源簡介
用OpenGL紋理實現的魚眼鏡頭,兩種貼圖方式。數據源是窗口的HBITMAP到圖像數據、VLC的幀渲染到內存的圖像數據。
代碼片段和文件信息
#define?_WIN32_WINNT??0x0600
/**************************
?*?Includes
?*
?**************************/
//#define?UNICODE
#include?
#include?
#include?//注意定義順序?
#include?
#include?
#include?
#include?
#include?
/**************************
?*?Function?Declarations
?*
?**************************/
LRESULT?CALLBACK?WndProc?(HWND?hWnd?UINT?message
WPARAM?wParam?LPARAM?lParam);
void?EnableOpenGL?(HWND?hWnd?HDC?*hDC?HGLRC?*hRC);
void?DisableOpenGL?(HWND?hWnd?HDC?hDC?HGLRC?hRC);
void?OpenMediaFile();
void*?VideoLockCallBack(void?*opaque?void?**planes);
void?VideoUnLockCallBack(void?*opaque?void?*picture?void?*const?*planes);
void?VideoDisplayCallBack(void?*opaque?void?*picture);
WCHAR*?AnsiToUnicode(char?*?ansiStr);
char?*UnicodeToUtf8(WCHAR*?uniStr);
/**************************
?*?WinMain
?*
?**************************/
#define?DIV?64
#define?PI?3.1416f
int?*pBmpData;
unsigned?dataWidthdataHeight;
GLuint?texture[1];
HWND?hWindow=0;
int?FishEye=0;
float?radius=10;?
BOOL?hasMedia=FALSE;
int?bmpRotateZ=0;
BOOL?mirrorX=FALSE;
BOOL?mirrorY=FALSE;
libvlc_instance_t?*vlcInstance;
libvlc_media_player_t?*vlcPlayer;
libvlc_media_t?*vlcMedia;
OPENFILENAMEW?ofn;
WCHAR?strFile[260];???????
int?WINAPI?WinMain?(HINSTANCE?hInstance
????????????????????HINSTANCE?hPrevInstance
????????????????????LPSTR?lpCmdLine
????????????????????int?iCmdShow)
{
????WNDCLASS?wc;
????HWND?hWnd;
????HDC?hDC;
????HGLRC?hRC;????????
????MSG?msg;
????BOOL?bQuit?=?FALSE;
????/*?register?window?class?*/
????wc.style?=?CS_OWNDC;
????wc.lpfnWndProc?=?WndProc;
????wc.cbClsExtra?=?0;
????wc.cbWndExtra?=?0;
????wc.hInstance?=?hInstance;
????wc.hIcon?=?LoadIcon?(NULL?IDI_APPLICATION);
????wc.hCursor?=?LoadCursor?(NULL?IDC_ARROW);
????wc.hbrBackground?=?(HBRUSH)?GetStockobject?(BLACK_BRUSH);
????wc.lpszMenuName?=?NULL;
????wc.lpszClassName?=?“FishEye“;
????RegisterClass?(&wc);
????/*?create?main?window?*/
????hWnd?=?CreateWindow?(
??????“FishEye“?“FishEye“?
??????WS_OVERLAPPEDWINDOW|WS_VISIBLE
??????0?0?800?600
??????NULL?NULL?hInstance?NULL);
????pBmpData=0;
????ZeroMemory(&ofnsizeof(OPENFILENAME));
????ofn.lStructSize?=?sizeof(ofn);
ofn.hwndOwner?=?hWnd;
ofn.lpstrFile?=?strFile;
ofn.lpstrFile[0]?=?‘\0‘;
ofn.nMaxFile?=?sizeof(strFile);
ofn.lpstrFilter?=?L“AVI\0*.avi\0MKV\0*.mkv\0MP4\0*.mp4\0FLV\0*.flv\
\0MOV\0*.mov\0RMVB\0*.rmvb;*.rm\0MPEG\0*.mpg;*.mpeg\0*3G*\0*.3gp;*.3g2;*.3gp2;*.3gpp\
\0WMV\0*.wmv\0OGG\0*.ogg\0All\0*.*“;
ofn.nFilterIndex?=?1;
ofn.lpstrFiletitle?=?NULL;
ofn.nMaxFiletitle?=?0;
ofn.lpstrInitialDir?=?NULL;
ofn.Flags?=?OFN_PATHMUSTEXIST?|?OFN_FILEMUSTEXIST;
vlcInstance?=?libvlc_new(0NULL);
vlcPlayer?=?libvlc_media_player_new(vlcInstance);
OpenMediaFile();
MoveWindow(hWnd00dataWidthdataHeightTRUE);
????/*?enable?OpenGL?for?the?wind
評論
共有 條評論