當前位置:編程學習大全網 - 編程語言 - 在opengl中畫壹個三角形

在opengl中畫壹個三角形

//編譯環境VS2005?選擇WIN32應用程序?我從來不用MFC?

#包含?& 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);?

}

  • 上一篇:html導航條怎麽制作教程HTML制作導航條
  • 下一篇:學習工業機器人為啥需要PLC技術?
  • copyright 2024編程學習大全網