#包含?& ltGL/GL . h & gt;?
#包含?& ltGL/Glu . h & gt;?
#包含?& ltGL/glaux . h & gt;?
#包含?& ltmath.h & gt?
#pragma?評論(lib,?" opengl32.lib ")?
#pragma?評論(lib,?" glu32.lib ")?
#pragma?評論(lib,?" glaux.lib ")?
#定義?MAX_LOADSTRING?100?
//定義遞歸調用閾值,即最小三角形邊長?
#定義?側長?(0.05)?
//?全球?變量:?
HINSTANCE?hInst?//?當前?實例?
TCHAR?SZ title[MAX _ LOADSTRING];?//?那個?標題?酒吧?文字?
TCHAR?szWindowClass[MAX _ LOADSTRING];?//?那個?主要?窗戶?班級?名字?
//自定義全局變量?
HGLRC?g_hRC?=?NULL?//OpenGL?繪圖上下文?
HDC?g_hDC?=?NULL?//設備上下文?
HWND?g_hWnd?=?NULL?//保存當前窗口句柄?
//定義三角形頂點指針?
typedef?struct?tagTRIANGLEPOINT?
{?
GLfloat?tpPointX?
GLfloat?tpPointY?
}TRIANGLEPOINT,* LTRIANGLEPOINT?
//定義最外面大三角形的三個點?
三角點?g_TrianglePoint[3]?=?{{0.0,?0.0},?{5.0,?0.0},?{2.5,2.5}};?
//?向前?申報?的?功能?包括在內?在?這個?代碼?模塊:?
ATOM?MyRegisterClass(HINSTANCE?hin instance);?
布爾?初始實例(HINSTANCE,int);?
LRESULT?回調?WndProc(HWND,UINT?WPARAM,?LPARAM);?
INT_PTR?回調?關於(HWND,?UINT?WPARAM,?LPARAM);?
//用戶自定義函數?
作廢?EnableOpenGL(HWND?hWnd);?
作廢?scene init();?
作廢?SceneResizeViewport();?
作廢?disable OpenGL();?
作廢?顯示();?
作廢?draw triangle(ltriangepoint?pTrianglePoint,?int?iPointNum?=?3);?
作廢?draw large triangle(ltriangepoint?pTrianglePoint,?int?iPointNum);?
int?APIENTRY?_tWinMain(HINSTANCE?hInstance?
HINSTANCE?hPrevInstance,?
LPTSTR?lpCmdLine,?
int?nCmdShow)?
{?
un referenced _ PARAMETER(hPrevInstance);?
un referenced _ PARAMETER(lpCmdLine);?
//?TODO:?地方?代碼?給妳。?
味精?味精;?
哈塞爾?hAccelTable?
//?初始化?全球?弦樂?
LoadString(hInstance,IDS_APP_TITLE,?szTitle,?MAX _ LOADSTRING);?
LoadString(hInstance,IDC_OPENGLTRIANGLE,?szWindowClass,?MAX _ LOADSTRING);?
MyRegisterClass(h instance);?
//?表演?申請?初始化:?
如果?(!InitInstance?(hInstance,?nCmdShow))?
{?
回歸?假的;?
}?
enable OpenGL(g _ hWnd);?
scene init();?
SceneResizeViewport();?
hAccelTable?=?LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC _ OPENGLTRIANGLE));?
//?主要?留言?循環:?
zero memory(& amp;味精,?sizeof(msg));?
什麽時候?(?msg.message?!=?WM _退出?)?
{?
如果?(PeekMessage(& amp;味精,?NULL,?0U,?0U,?PM_REMOVE))?
{?
如果(!TranslateAccelerator(msg.hwnd,hAccelTable?& ampmsg))?
{?
翻譯消息(& amp味精);?
dispatch message(amp;味精);?
}?
}?
不然呢?
{?
顯示();?
swap buffers(g _ hDC);?
}?
}?
disable OpenGL();?
回歸?(int)?msg.wParam?
}?
//?
//?功能:?MyRegisterClass()?
//?
//?目的:?寄存器?那個?窗戶?班級。?
//?
//?點評:?
//?
//?這個?功能?然後呢。其?用法?是嗎?只有?必要嗎?如果?妳呢。想要嗎?這個?代碼?
//?去哪?是嗎?兼容?用什麽?Win32?系統?prior?去哪?那個?RegisterClassEx?
//?功能?那個?曾經是。補充?去哪?Windows?95.?它?是嗎?重要嗎?去哪?打電話?這個?功能?
//?那又怎樣?那個?那個?申請?威爾。得到?嗯?形成了嗎?小?圖標?關聯?
//?用什麽?它。?
//?
ATOM?MyRegisterClass(HINSTANCE?hInstance)?
{?
WNDCLASSEX?wcex?
wcex.cbSize?=?sizeof(WNDCLASSEX);?
wcex.style?=?CS_HREDRAW?|?CS _ VREDRAW?
wcex.lpfnWndProc?=?WndProc?
wcex.cbClsExtra?=?0;?
wcex.cbWndExtra?=?0;?
wcex.hInstance?=?hInstance?
wcex.hIcon?=?LoadIcon(hInstance,MAKEINTRESOURCE(IDI _ OPENGLTRIANGLE));?
wcex.hCursor?=?LoadCursor(NULL,IDC _ ARROW);?
wcex.hbrBackground?=?(HBRUSH)(COLOR _ WINDOW+1);?
wcex.lpszMenuName?=?MAKEINTRESOURCE(IDC _ OPENGLTRIANGLE);?
wcex.lpszClassName?=?szWindowClass?
wcex.hIconSm?=?LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI _小));?
回歸?register classex(& amp;wcex);?
}?
//?
//?功能:?初始實例(HINSTANCE,int)?
//?
//?目的:?保存?實例?手柄?然後呢。創造?主要?窗戶?
//?
//?點評:?
//?
//?在?這個?函數,?我們?保存?那個?實例?手柄?在?答?全球?變量?然後呢。
//?創造?然後呢。展示?那個?主要?程序?窗戶。?
//?
布爾?InitInstance(hin instance?hInstance?int?nCmdShow)?
{?
HWND?hWnd?
hInst?=?hInstance?//?商店?實例?手柄?在?我們的?全球?變量?
hWnd?=?CreateWindow(szWindowClass,szTitle,?WS_OVERLAPPEDWINDOW,?
CW_USEDEFAULT,?0,?CW_USEDEFAULT,?0,?NULL,?NULL,?hInstance?NULL);?
如果?(!hWnd)?
{?
回歸?假的;?
}?
g_hWnd?=?hWnd?
顯示窗口(hWnd,nCmdShow);?
更新窗口(hWnd);?
回歸?真實;?
}?
//?
//?功能:?WndProc(HWND,UINT?WPARAM,?LPARAM)?
//?
//?目的:?流程?消息?為了什麽?那個?主要?窗戶。?
//?
//?WM_COMMAND?-?流程?那個?申請?菜單?
//?WM_PAINT?-?油漆?那個?主要?窗戶?
//?WM_DESTROY?-?帖子?答?辭職?留言?然後呢。回歸?
//?
//?
LRESULT?回調?WndProc(HWND?hWnd,?UINT?消息,?WPARAM?wParam,?LPARAM?lParam)?
{?
int?wmId,?wmEvent?
PAINTSTRUCT?PS;?
HDC?hdc?
切換?(留言)?
{?
案子?WM_COMMAND:?
wmId?=?洛沃德(wParam);?
wmEvent?=?希瓦語(wParam);?
//?解析?那個?菜單?選曲:?
切換?(wmId)?
{?
案子?IDM _關於:?
對話框(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),?hWnd,?關於);?
打破;?
案子?IDM_EXIT:?
destroy window(hWnd);?
打破;?
默認:?
回歸?DefWindowProc(hWnd,消息,?wParam,?lParam);?
}?
打破;?
案子?WM_PAINT:?
hdc?=?BeginPaint(hWnd,& ampPS);?
//?TODO:?補充?有嗎?畫畫?代碼?這裏...?
EndPaint(hWnd,& ampPS);?
打破;?
案子?WM_DESTROY:?
PostQuitMessage(0);?
打破;?
默認:?
回歸?DefWindowProc(hWnd,消息,?wParam,?lParam);?
}?
回歸?0;?
}?
//?留言?漢德勒?為了什麽?關於什麽?盒子。?
INT_PTR?回調?關於(HWND?hDlg,?UINT?消息,?WPARAM?wParam,?LPARAM?lParam)?
{?
un referenced _ PARAMETER(lParam);?
切換?(留言)?
{?
案子?WM_INITDIALOG:?
回歸?(INT _ PTR)TRUE;?
案子?WM_COMMAND:?
如果?(洛沃德(wParam)?==?伊多克?||?洛沃德(wParam)?==?IDCANCEL)?
{?
EndDialog(hDlg,?LOWORD(wParam));?
回歸?(INT _ PTR)TRUE;?
}?
打破;?
}?
回歸?(INT _ PTR)FALSE;?
}?
//初始化opengl?
作廢?EnableOpenGL(HWND?hWnd)?
{?
PIXELFORMATDESCRIPTOR?pfd?
int?iFormat?
g_hDC?=?GetDC(hWnd);?
zero memory(& amp;pfd,?sizeof(pfd));?
pfd.nSize?=?sizeof(pfd);?
pfd.nVersion?=?1;?
pfd.dwFlags?=?PFD_DRAW_TO_WINDOW|?PFD_SUPPORT_OPENGL?|?PFD _ DOUBLEBUFFER?
pfd.iPixelType?=?PFD _ TYPE _ RGBA;?
pfd.cColorBits?=?32;?
pfd.cDepthBits?=?16;?
pfd.iLayerType?=?PFD _ MAIN _ PLANE?
iFormat?=?ChoosePixelFormat(?g_hDC,?& amppfd?);?
SetPixelFormat(?g_hDC,?iFormat?& amppfd?);?
g_hRC?=?wglCreateContext(g _ hDC);?
wglMakeCurrent(?g_hDC,?g _ hRC);?
}?
//設置著色模式?
作廢?SceneInit()?
{?
glShadeModel(GL _ SMOOTH);?
glClearColor(1.0,?1.0,?1.0,?0.5);?
GL HINT(GL _ PERSPECTIVE _ CORRECTION _ HINT,?GL _ NICEST);?
}?
//設置視口?
作廢?SceneResizeViewport()?
{?
RECT?rect?
int?w,h;?
GLfloat?方面;?
GetClientRect(?g_hWnd,?& amprect?);?
w?=?對吧。-?右偏左;?
h?=rect.bottom?-?rect.top?
方面?=?(GLfloat)w/?(GL float)h;?
glViewport(0,0,w,h);//設置視口?
glMatrixMode(GL _ PROJECTION);?
glload identity();?
glutortho 2d(0.0,?5.0,?0.0,?5.0/方面);?
}?
作廢?DisableOpenGL(){?
wglMakeCurrent(NULL,NULL);?
wglDeleteContext(g _ hRC);?
ReleaseDC(g_hWnd,?g _ hDC);?
}?
作廢?顯示()?
{?
GL clear(GL _ COLOR _ BUFFER _ BIT);?
glMatrixMode(GL _ model view);?
glload identity();?
draw large triangle(g _ triangle point,?3);?
DrawTriangle(g_TrianglePoint,?3);?
GL flush();?
}?
//畫壹個大三角形?
作廢?draw large triangle(ltriangepoint?pTrianglePoint,?int?iPointNum)?
{?
GL begin(GL _ LINE _ LOOP);?
為了什麽?(?int?我?=?0;?我?& lt?3;?++i)?
{?
glColor3f(1.0,0.0,0.0);?
glVertex2f(pTrianglePoint[i].tpPointX,pTrianglePoint[i]。tpPointY);?
}?
glEnd();?
}?
//遞歸函數?
作廢?draw triangle(ltriangepoint?pTrianglePoint,?int?iPointNum)?
{?
//得到中間三角形的三個點?
三角點?三角形點[3];?
為了什麽?(int?我?=?0;?我?& lt?3;?++i)?
{?
如果?(?我?==?2)?
{?
三角形點[i]。tpPointX?=?(pTrianglePoint[i]。tpPointX?+?pTrianglePoint[0]。tpPointX)?/?2;?
三角形點[i]。tpPointY?=?(pTrianglePoint[i]。tpPointY?+?pTrianglePoint[0]。tpPointY)?/?2;?
}?
不然呢?
{?
三角形點[i]。tpPointX?=?(pTrianglePoint[i]。tpPointX?+?pTrianglePoint[i+1]。tpPointX)?/?2;?
三角形點[i]。tpPointY?=?(pTrianglePoint[i]。tpPointY?+?pTrianglePoint[i+1]。tpPointY)?/?2;?
}?
}?
GL begin(GL _ LINE _ LOOP);?
為了什麽?(?int?我?=?0;?我?& lt?3;?++i)?
{?
glColor3f(1.0,0.0,0.0);?
glVertex2f(trianglepoint[i].tpPointX,trianglepoint[i]。tpPointY);?
}?
glEnd();?
//建立其他三角形?
三角點?triangle point 1[3];?
三角點?triangle point 2[3];?
三角點?triangle point 3[3];?
zero memory(& amp;trianglepoint1,?sizeof(三角點1));?
zero memory(& amp;三角形點2,?sizeof(triangle point 2));?
zero memory(& amp;三角形點2,?sizeof(triangle point 2));?
trianglepoint1[0]?=?pTrianglePoint[0];?
trianglepoint1[1]?=?triangle point[0];?
trianglepoint1[2]?=?triangle point[2];?
trianglepoint2[0]?=?pTrianglePoint[1];?
trianglepoint2[1]?=?triangle point[1];?
trianglepoint2[2]?=?triangle point[0];?
trianglepoint3[0]?=?pTrianglePoint[2];?
trianglepoint3[1]?=?triangle point[2];?
三角點3[2]?=?triangle point[1];?
//設置邊界?
if(pow(ABS(triangle point 1[0])。tpPointX?-?trianglepoint1[1]。tpPointX),?2)?
+pow(ABS(triangle point 1[0])。tpPointY?-?trianglepoint1[1]。tpPointY),?2)?& gt?側長)?
draw triangle(triangle point 1,?iPointNum);?
if(pow(trianglepoint2[0])。tpPointX?-?三角形點2[1]。tpPointX,?2)?
+pow(trianglepoint2[0])。tpPointY?-?三角形點2[1]。tpPointY?2)?& gt?側長)?
DrawTriangle(三角形點2,iPointNum);?
if(pow(trianglepoint2[0])。tpPointX?-?三角形點2[1]。tpPointX,?2)?
+pow(trianglepoint2[0])。tpPointY?-?三角形點2[1]。tpPointY?2)?& gt?側長)?
DrawTriangle(三角形點3,iPointNum);?
}