15
3 มิติ Op ฮารดแวสาขา เช (Portabil อินพุทจ เพิ่มเติมคําสั่งสํา ผูใชงานคําสั่งแลดวย gl สําหรับบอกถึงจะตองเsuffix ทีCOMP OpenGL (Op penGL มีควา ตางๆทางด งานทางดา OpenGL lity) เพื่อเป ากผูใชอีกด ที ชวยจัดการหรับสรางรู ะตองนํารูปชนิดของข การใชงานคํ ดังภาพที1-1 ตั วลงทายหรื จํ านวนตัวแป นขอมูลชนิ ชกําหนดชPUTER G pen Graphics โดดเดนในนกราฟกได นวิศวกรรม ถูกออกแ หมายนีOpe หนาที่ทั้ง านทั้งสองนี จําลองสามรงเหลานี้มมูลของ Ope สั่ง OpenGL อยางเชน glC suffix ของ รอินพุทคือสี เลขทศนิยม นิ ดของขอมูลGRAPHICS s Library) เป ารพัฒนาโป ทําให OpenG างการแพทบมาโดยไ enGL จึงไมมี สองอยางนีหากพัฒนาโติ คือ รูปทประกอบกั enGL L จะตอง inclu ClearColor() บางคําสั่งจะRGB หากบางคําสั่งอาทียบกับ ANS าพที1-1 ราS USING นมาตรฐานรแกรมประGL เปนเครื และทางกา ยึดติดกับร าสั่งที่จัดกา จึ งตกอยูกับรแกรมบนงเรขาคณิตเพื่อใหเกิดรู ude ไฟล head คาคงที่จะขึระกอบดวย ปน glColor4 รับขอมูลอิ SI C และ Op ระเอียดคําสMr.Nattap Departme King Mo ารอินเตอรเกตดานกรางมือที่ไดรับศึกษา เปนต บบ สามา กับระบบปผู เขียนโปรแ ะบบปฏิบัติ ยางงายได ทรงสามมิติ der ชื่อ gl.h ตนดวย GL_ ตัวเลขและตั 4f จะหมายพุทที่แตกต penGL Type D งของ OpenG in phol Jasungnu ent of Teacher ongkut’s Inst Basic Op สสําหรับสเปนซอร วามนิยมเป ถทํางานได ฏิ บัติการ อีกรม อยางไ ารวินโดว จุด เสน ที่ซับซอนขึคําสั่งข _ เชน GL_CO อักษรเชน g ถึ RGBA งกันไดถึง 8 Definition GL uen and Pool r Training in itute of Techn penGL in Visu างภาพภาพ 2 แวรที่อินเทอันดับตนๆ นทุกๆแพ งยังไมมีคําก็ตามยังมี อกจากนีOp ละรูปหลายเ อง OpenGL OLOR_BUFF glColor3f ซึวน f หมายชนิด ตารางlsak Koseeyap Electrical En nology North 1 ual C++ 2 มิติ และ รเฟสกับ ในหลาย ล็ ตฟอรม งเพื่อรับ อรฟแวร penGL มี หลี่ยมซึ่ง จะขึ้นตน FER_BIT เลข 3 บง ถึ งอินพุท ที 1 แสดง porn,Ph.D ngineering h Bangkok

เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

Embed Size (px)

DESCRIPTION

เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

Citation preview

Page 1: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

 

     3 มิติ Opฮารดแวรสาขา เชน (Portabilอินพุทจเพิ่มเติมทีคําส่ังสําผูใชงานจคําส่ังและดวย gl สําหรับตับอกถึงจํจะตองเปsuffix ท่ีใCOMPOpenGL (OppenGL มีความรตางๆทางดาน งานทางดาOpenGL lity) เพื่อเปาากผูใชอีกดวท่ีชวยจัดการงหรับสรางรูปจะตองนํารูปท ะชนิดของขอการใชงานคํา ดังภาพท่ี1-1 ตัวลงทายหรือจํานวนตัวแปปนขอมูลชนิดใชกําหนดชนิPUTER Gpen Graphicsมโดดเดนในกานกราฟกได นวิศวกรรม ทถูกออกแบาหมายนี้ Opeวย หนาท่ีท้ังงานท้ังสองนี้ปจําลองสามมทรงเหลานี้มาอมูลของ Opeาส่ัง OpenGL อยางเชน glCอ suffix ของรอินพุทคือสีดเลขทศนิยม นดิของขอมูลเภGRAPHICSs Library) เปการพัฒนาโป ทําให OpenGทางการแพทยบบมาโดยไมenGL จึงไมมีคสองอยางนี้จึ้หากพัฒนาโปมิติ คือ รูปทราประกอบกันenGL L จะตอง incluClearColor() บางคําส่ังจะป RGB หากเ บางคําส่ังอาจเทียบกับ ANSภาพท่ี 1-1 รายS USINGนมาตรฐานกรแกรมประยุGL เปนเคร่ือย และทางการมยึดติดกับระคําส่ังท่ีจัดกาจึงตกอยูกับผูปรแกรมบนรรงเรขาคณิตอนเพื่อใหเกิดรูปude ไฟล head คาคงท่ีจะข้ึนประกอบดวยเปน glColor4จรับขอมูลอินSI C และ Opยระเอียดคําส่ัMr.Nattap

DepartmeKing Moการอินเตอรเฟยกตดานกราฟองมือท่ีไดรับครศึกษา เปนตะบบ สามารรกับระบบปฏิผูเขียนโปรแกระบบปฏิบัติกอยางงายไดแปทรงสามมิติder ช่ือ gl.h นตนดวย GL_ตัวเลขและตัว4f จะหมายถึนพุทท่ีแตกตาpenGL Type Dังของ OpenGin 

phol  Jasungnuent of Teacherongkut’s Inst

Basic Opฟสสําหรับสรฟก เปนซอรฟความนิยมเปนน รถทํางานไดบฏิบัติการ อีกทกรม อยางไรการวินโดว นแก จุด เสน แท่ีซับซอนข้ึน คําส่ังข_ เชน GL_COวอักษรเชน gถึง RGBA สางกันไดถึง 8 Definition GL uen and Poolr Training in itute of Techn

penGL in Visuรางภาพภาพ 2ฟแวรท่ีอินเทอนอันดับตนๆบนทุกๆแพล็ท้ังยังไมมีคําสรก็ตามยังมีซนอกจากน้ี Opละรูปหลายเน อง OpenGL OLOR_BUFFglColor3f ซ่ึงสวน f หมายถึ ชนิด ตารางทีlsak KoseeyapElectrical Ennology North

1ual C++ 2 มิติ และ อรเฟสกับ ในหลายล็ตฟอรม ส่ังเพื่อรับซอรฟแวรpenGL มีหล่ียมซ่ึงจะข้ึนตนFER_BIT เลข 3 บงถึงอินพุทท่ี 1 แสดง porn,Ph.Dngineering h Bangkok 

Page 2: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

 จะตองกํOpenGLของคาแอยูในสถVariableOpenGLโปรแกรOrthogonพื้นฐานเจะข้ึนตนตัวอยางทีสรางโคดการใช Rการแปลกระบวน ดังนั้นคําส่ัง gกําหนดขอมูลL มี suffix ตัวทนท่ีจะเปนตัถานะใดสถานe เม่ือต้ังคาสีไL Utility LibGLU เปนกมสะดวกข้ึนอnal และ Peชนทรงกลม นดวยคําวา glu ท่ี 1 การสรางการสรางโปรดหลักของโปRC (Renderinลงโหมดการวนการตางๆท่ีก ตารglVertex2i(1,ลอินพุทเปนเสุดทายเปน vตัวเลข การทํานะนั้นจะคงอปคร้ังหนึ่ง วัตbrary ารเอาชุดคําส่ัอยางเชนการทerspective, กทรงกระบอกu เสมอ และกงโปรแกรมวาดรแกรมกราฟกปรแกรมแบบ ng Context) แวาดภาพบนวิกลาวมาขางตนรางท่ี 1 Suffix, 3) และ glVลขจํานวนเต็v ซ่ึงหมายควางานของ Opeอยูตลอดจนกตถุท่ีถูกวาดหังของ OpenGทํา Mipmappการแบงซอยรูก และแผนจาการเรียกใชคําดภาพกราฟกกดวย OpenG Single Documแตการวาดภานโดว (ดีซีนจะมีลําดับกx ของคําส่ังแลVertex2f(1.0, ต็มและคําส่ังหวามวาคําส่ังนั้enGL จะเปนกวาจะมีการเหลังจากนั้นจะGL ท่ีถูกใชบping สําหรับรูปเหล่ียมหรือน, และการวาส่ังตางๆจะตก 2 มิต ิGL ใน Microment การพบนวินโดว) ใหเปนโหารสรางโปรและชนิดของข3.0) จึงทําหนหลังกําหนดเั้นรับขอมูลอินนลักษณะ Statเปล่ียนแปลงะมีสีนั้นตลอดบอยๆมารวม Texture Mอ Polygon าดเสนโคงแลอง include ไosoft Visual รวาดภาพกราจะใชดีซี (Deหมดการวาดภแกรมวาดภาพ Basic Opอมูล นาท่ีเหมือนหเปนเลขทศนินพุทเปนพอยte Machine คื อยางเชนกาดจนกวาจะมีคํกันเปนคําส่ังMapping, การTessellationละพื้นผิวโคงโฟล header ช่ื C++ จะใช ฟกของ Openevice Contextภาพกราฟกขพกราฟก 2 มิติpenGL in Visuหรือตางกันท่ีคิยมคําส่ังบางยเตอรท่ีช้ีไปยคือเม่ือส่ังใหโารต้ังคาสีซ่ึงเคําส่ังเปล่ียนสีใหมซ่ึงทําใหแปลงโคออดิ, การเรนเดอโดยใชคําส่ังขอ glu.h ApplicationsnGL นั้นจะถูกt) ดังนั้นจําเปของ OpenGL ติ ดังข้ันตอนต 2ual C++ คําส่ังแรกงคําส่ังใน ยังอารเรยโปรแกรมปน State สี หการเขียนดิเนทแบบอรรูปทรงของ GLU s Wizard กวาดดวยปนตองทํา หรือ RC ตอไปนี้

Page 3: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  3 Basic OpenGL in Visual C++ ขั้นตอนท่ี 1 สรางโคดแบบ Single Document ดวย Applications Wizard 1.1 สรางโปรเจ็คใหม ช่ือ Graphic2D ดวย Microsoft Visual C++ เลือกสรางโปรเจ็คแบบ MFC Application ต้ังช่ือโปรเจ็คและคลิก OK ดังภาพท่ี 1-2 ภาพท่ี 1-2 สรางโปรเจ็คใหมแบบ MFC Application 1.2 เลือก Application Type แบบ Single Document ยกเลิกการสนับสนุน Document/View architecture และเลือกภาษา English (United States) ดังภาพท่ี 1-3 ภาพท่ี 1-3 กําหนด Application Type แบบ Single Document

Page 4: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  4 Basic OpenGL in Visual C++ 1.3 เลือก Tap User Interface Features กําหนด Main frame styles ตามภาพและยกเลิก Toolbars ดังภาพท่ี 1-4 ภาพท่ี 1-4 การกําหนด Main frame styles 1.4 เลือก Tap Advanced Features ยกเลิกการสนับสนุน ActiveX Controls และเลือก Common Control Manifest ดังภาพท่ี 1-5 ภาพท่ี 1-5 การกําหนด Advanced Features 1.5 เลือก Tap Generated Classes เลือก Tap CChildView ในชอง Generated Class: และทําการต้ังช่ือคลาส “CChildView” สืบทอดคลาสจาก CWnd ทําการคลิก Finish ดังภาพท่ี 1-6

Page 5: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  5 Basic OpenGL in Visual C++  ภาพท่ี 1-6 การ Generated Classes เม่ือกําหนดคาตางๆสําหรับโปรเจ็คเรียบรอย ทําการ Build > Build Graphic2D และ Run จะไดผลของโปรแกรม Graphic2D แบบ Single Document ดังภาพท่ี 1-7 ภาพท่ี 1-7 ผลของโปรแกรม Graphic2D แบบ Single Document ขั้นตอนท่ี 2 เพิ่มไลบรารี OpenGL ลงใน Visual C++ การเขียนโปรแกรมกราฟกโดยใชไลบรารีของ OpenGL ดวย Visual C++ จําเปนตองมีการเช่ือมโยงไลบรารี โดยทําการเซตอัพแอพพลิเคชันของโปรเจ็คใหสามารถเขาถึงไลบรารี opengl32.lib , glu32.lib โดยมีข้ันตอนดังนี ้2.1 เปดไฟล “stdafx.h” แทรกโคดโปรแกรมดังนี้       #define _AFX_ALL_WARNINGS 

#include <afxwin.h>         // MFC core and standard components #include <afxext.h>         // MFC extensions #include <gl\gl.h> #include <gl\glu.h> #include <afxdtctl.h>  // MFC support for Internet Explorer 4 Common  #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h>  // MFC support for Windows CommonControls #endif // _AFX_NO_AFXCMN_SUPPORT

Page 6: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  6 Basic OpenGL in Visual C++ 2.2 ทําการเพ่ิม opengl32.lib และ glu32.lib ลงในโปรเจ็คโดยเลือกท่ีเมน ู Project > Properties จะปรากฏไดอะล็อก Graphic2D Property Pages ข้ึนมา เลือก Linker -> Gerneral ดังภาพท่ี 1-8 2.3 กําหนด Additional Library Directories ลงในไดอะล็อกเปน C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib คลิก OK ภาพท่ี 1-8 การเช่ือมโยงไลบารี opengl32.lib และ glu32.lib 2.4 คลิก Input เลือก Additional Dependencies จะปรากฏไดอะลอกพิมพ Opengl32.lib และ glu32.lib คลิก OK ดังภาพท่ี 1-9         ภาพท่ี 1-9 การกําหนด Additional Dependencies

Page 7: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  7 Basic OpenGL in Visual C++ ขั้นตอนท่ี 3 สรางฟงกชันสําหรับการวาดภาพ การวาดภาพกราฟกของ OpenGL นั้นจะถูกวาดดวยการใช RC (Rendering Context) แตการวาดภาพบนวินโดวจะใชดีซี (Device Context) ดังนั้นจําเปนตองทําการแปลงโหมดการวาดภาพบนวนิโดว (ดีซี) ใหเปนโหมดการวาดภาพกราฟกของ OpenGL หรือ RC ดังนั้นเราตองสรางฟงกชัน SetWindowPixelFormat และ CreateViewGLContext โดยเพิ่มโคดโปรแกรมดังนี ้3.1 กําหนด Member Variable ชนิด protected ลงในคลาส CChildView ในไฟล ChildView.h            3.2 เพิ่มฟงกชัน bool SetWindowPixelFormat(HDC hDC) และ bool CreateViewGLContext(HDC hDC) ลงในคลาส CChildView ดังภาพท่ี 1-10 ภาพท่ี 1-10 การเพิ่มฟงกชันลงในคลาส CChildView เม่ือทําการเพ่ิมฟงกชันลงในคลาส CChildView เรียบรอยแลวใหทําการเพ่ิมโคดโปรแกรมลงในฟงกชัน bool SetWindowPixelFormat(HDC hDC) และ bool CreateViewGLContext(HDC hDC) ดังนี ้ #pragma once 

// CChildView.h class CChildView : public CWnd { ………. protected:   HGLRC m_hGLContext;   int m_GLPixelIndex; …………. } 

1  2

Page 8: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  8 Basic OpenGL in Visual C++ เพิ่มโคดโปรแกรมลงในฟงกชัน bool CChildView::SetWindowPixelFormat(HDC hDC)                                                       

bool CChildView::SetWindowPixelFormat(HDC hDC){   PIXELFORMATDESCRIPTOR pixelDesc;        //ประกาศตัวแปรโครงสรางขอมูลของ PIXELFORMATDESCRIPTOR   pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);          //กําหนดขนาดของโครงสรางขอมูลดวย sizeof   pixelDesc.nVersion = 1;  //กําหนด Version ของโครงสรางขอมูล   pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |  //กําหนดการอนิเทอรเฟส ใหสามารถวาดภาพบนวินโดวได   PFD_DRAW_TO_BITMAP |  //วาดรูปบิตแมพได     PFD_SUPPORT_OPENGL |  //เรียกใช OpenGL ได           PFD_SUPPORT_GDI |  //Support GDI    PFD_STEREO_DONTCARE;  //ไมสนใจการจัดการบัฟเฟอรแบบเสตอริโอ   pixelDesc.iPixelType = PFD_TYPE_RGBA;   //กําหนดรูปแบบการใชสี RGBA , สีแดงมสีเขียว,สีน้ําเงิน,อัลฟา   pixelDesc.cColorBits = 32;   //กําหนดขนาดบิตของสี RGB   pixelDesc.cRedBits = 8;   pixelDesc.cRedShift = 16;   pixelDesc.cGreenBits = 8;   pixelDesc.cGreenShift = 8;   pixelDesc.cBlueBits = 8;   pixelDesc.cBlueShift = 0;   pixelDesc.cAlphaBits = 0;   pixelDesc.cAlphaShift = 0;   pixelDesc.cAccumBits = 64;   pixelDesc.cAccumRedBits = 16;   pixelDesc.cAccumGreenBits = 16;   pixelDesc.cAccumBlueBits = 16;   pixelDesc.cAccumAlphaBits = 0;   pixelDesc.cDepthBits = 32;   pixelDesc.cStencilBits = 8;   pixelDesc.cAuxBuffers = 0;   pixelDesc.iLayerType = PFD_MAIN_PLANE;   pixelDesc.bReserved = 0;   pixelDesc.dwLayerMask = 0;   pixelDesc.dwVisibleMask = 0;   pixelDesc.dwDamageMask = 0;   //กําหนดรูปแบบการวาดภาพ ตาม pixelDesc ตามท่ีกําหนดไวขางตน   m_GLPixelIndex = ChoosePixelFormat( hDC, &pixelDesc);   if (m_GLPixelIndex==0) // Let's choose a default index.   {     m_GLPixelIndex = 1;     if (DescribePixelFormat(hDC, m_GLPixelIndex,       sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0)     {       return FALSE;     }   }   if (SetPixelFormat( hDC, m_GLPixelIndex, &pixelDesc)==FALSE)   {     return FALSE;   }   return TRUE; } 

Page 9: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  9 Basic OpenGL in Visual C++ 

  เพิ่มโคดโปรแกรมลงในฟงกชัน bool CChildView::CreateViewGLContext(HDC hDC)

                 3.3 กําหนดคาเร่ิมตนใหกับตัวแปร(Member Variables) คือ m_hGLContext , m_GLPixelIndex  ลงใน Constructer ของคลาส CChildView ดังนี ้ 3.4 กําหนด Window Style สําหรับกําหนดพืน้ท่ีไคลเอนท(Client)ให OpenGL สามารถวาดกราฟกลงบนพื้นท่ีบนวินโดวได โดยการเพ่ิมโคดโปรแกรมใหกับฟงกชัน PreCreateWindow ดังนี้ bool CChildView::CreateViewGLContext(HDC hDC){ 

  m_hGLContext = wglCreateContext(hDC);   if (m_hGLContext == NULL)   {     return FALSE;   }    if (wglMakeCurrent(hDC, m_hGLContext)==FALSE)   {     return FALSE;   }    return TRUE; } 

CChildView::CChildView() {   m_hGLContext = NULL;   m_GLPixelIndex = 0; } 

BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) {   if (!CWnd::PreCreateWindow(cs))     return FALSE;    cs.dwExStyle |= WS_EX_CLIENTEDGE;   cs.style &= ~WS_BORDER;   //เพิ่มสวนน้ีเขาไปในฟงกชัน   cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,  

::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); 

   return TRUE; } 

Page 10: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  10 Basic OpenGL in Visual C++ 3.5 สรางฟงกชัน OnCreate จาก Window Message เลือกท่ี WM_CREATE ใหทําการ Add OnCreate ลงในคลาส CChildView แลวเพิ่มโคดโปรแกรมดังภาพท่ี 1-11 ภาพท่ี 1-11 สรางฟงกชัน OnCreate การแสดงภาพกราฟกท่ีสรางข้ึนจาก OpenGL จะตองทําการกําหนดคาเร่ิมตนกอน โดยการเรียกฟงกชัน SetWindowPixelFormat และ CreateViewGLContext โดยสงผานตัวแปร hDC สําหรับจัดการดีซี (Device Context) 3.6 สรางฟงกชัน OnSize จาก Window Message เลือกท่ี WM_SIZE โดยฟงกชันนีจ้ะทํางานเม่ือวนิโดวมีการเปล่ียนแปลงขนาด ทําการเพ่ิมโคดโปรแกรมดังภาพที่ 1-12 ภาพท่ี 1-12 สรางฟงกชัน OnSize int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct) {   if (CWnd::OnCreate(lpCreateStruct) == ‐1)     return ‐1;    HWND hWnd = GetSafeHwnd();   HDC hDC = ::GetDC(hWnd);    if(SetWindowPixelFormat(hDC) == false)     return 0;    if (CreateViewGLContext(hDC)==FALSE)     return 0;    return 0; } 

void CChildView::OnSize(UINT nType, int cx, int cy) {   CWnd::OnSize(nType, cx, cy);    GLsizei width, height;   GLdouble aspect;   width = cx;   height = cy;    if (cy==0)     aspect = (GLdouble)width;   else     aspect = (GLdouble)width/(GLdouble)height;    glViewport(0, 0 , width, height);   glMatrixMode(GL_PROJECTION);   glLoadIdentity();   gluOrtho2D(0.0, 500.0*aspect, 0.0, 500.0);   glMatrixMode(GL_MODELVIEW);   glLoadIdentity(); } 

Page 11: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

 3.7 สราวินโ ภาพ 3.8 เพิ่มโใน S โปรแกรMicrosovo{                 } งฟงกชัน Onโดวถูกปดหรือท่ี 1-14 สรางโคดโปรแกรSingle Documเม่ือทําการเขียม Ctrl +F5ft Visual C++oid CChildVie

CPaint glLoadglClea

glBegiglCologlVert

glCologlVert

glCologlVertglEndglFlus

nDestroy จากอถูกทําลาย ทํฟงกชัน OnDมลงในฟงกชัment ดังภาพทียนโคดโปรแ5 จะไดโปรแ+ ดังภาพท่ี 1-ew::OnPaint()

tDC dc(this); 

dIdentity( ); ar(GL_COLOR

in(GL_TRIANor4f(1.0f, 0.0ftex2f(100.0f, 

or4f(0.0f, 1.0ftex2f(450.0f, 

or4f(0.0f, 0.0ftex2f(450.0f, ( ); sh( ); 

Window Mทําการเพ่ิมโคด Destroy ชัน OnPaint เมืท่ี 1-15 แกรมเสร็จสมแกรมวาดภาพ-15 void CCh{            } 

)  

// device co

R_BUFFER_BIT

NGLE_STRIP);f, 0.0f, 1.0f);50.0f); 

f, 0.0f, 1.0f);400.0f); 

f, 1.0f, 1.0f);50.0f); 

essage เลือกทดโปรแกรมดังม่ือวินโดวถูกบูรณแลว ใหพกราฟก 2 hildView::OnD

CWnd::OnDe

if(wglGetCur{   wgl} if (m_hGLCon{   wgl  m_h} 

ntext for pain

T); 

 

ท่ี WM_DESงภาพท่ี 1-14 เรียกดีซีจะทําหทําการ Buiมิติ ท่ีใชควาestroy()

stroy( ); 

rentContext( )

lMakeCurrent(

ntext!=NULL)

lDeleteContexthGLContext = N

nting 

Basic OpSTROY โดยฟ าการวาดกราฟ ภาพท่ี 1- ild > Buildามสามารถไล)!=NULL) 

(NULL, NULL) 

t(m_hGLContexNULL; 

penGL in Visuฟงกชันนี้จะทํฟกลงบนพ้ืนท-15 วาดกราฟ OpenGL d Graphic2Dลบรารี Open; 

xt); 

11ual C++ ทํางานเม่ือท่ี Client ฟกดวย D และรันnGL ดวย 1 

Page 12: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

 คําส่ัง Op void CC{             } 

void CCh{                     } 

จากผลของโปpenGL ไดตามChildView::On

CPaintDC dc glLoadIdentglClear(GL_//สุมคาสีสําหรับGLfloat x = (GLfloat y = (GLfloat z = (glColor3f(x,//วาดภาพส่ีเหลีย่glRectd(100glFlush(); 

hildView::OnPa

CPaintDC dc( glLoadIdentitglClear(GL_C glBegin(GL_QglColor4f(1.0glVertex2f(10

glColor4f(0.0glVertex2f(10

glColor4f(0.0glVertex2f(55

glColor4f(0.0glVertex2f(55glEnd(); 

glFlush(); 

ปรแกรมท่ีไดมตองการ เชนnPaint()  

c(this); // de

tity(); COLOR_BUFFบการวาดภาพส่ีเห(float)(rand()(float)(rand((float)(rand(),y,z); ยม 0,100,400,40

aint() 

(this); // devic

ty(); OLOR_BUFFER

QUADS); //เริ่มตน0f, 0.0f, 0.0f, 1.000.0f, 500.0f); 

0f, 1.0f, 0.0f, 1.000.0f, 100.0f); 

0f, 0.0f, 1.0f, 1.050.0f, 100.0f); 

0f, 1.0f, 1.0f, 1.050.0f, 500.0f); 

ดกลาวมาขางตนตองการวาดevice context 

FER_BIT); หลี่ยม )%255)/255)%255)/255)%255)/255

0); 

ce context for p

R_BIT); นวาดกราฟกสี่เหล่ีย0f); //กําหนดจุดซายบน0f); //กําหนดจุดซายล0f); //กําหนดจุดขวาล0f); //กําหนดจุดขวาบตน เม่ือตอดภาพกราฟก 2

for painting

; 5; ; 

painting ม น ลาง ลาง บน องการวาดภาพ2 มิติ รูปแบบ ภาพที ภาพท่ี 1 Basic Opพกราฟกใดๆ บส่ีเหล่ียม ดังภท่ี 1-16 วาดกร1-17 วาดกราฟpenGL in Visu สามารถทํากภาพท่ี 1-16 , ราฟกแบบส่ีเหฟกแบบส่ีเหลี 12ual C++ การแกไข 1-17 หล่ียม ล่ียม 2 

Page 13: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  13 Basic OpenGL in Visual C++  ตัวอยางท่ี 2 โปรแกรมวาดภาพกราฟก 3 มิต ิ การสรางโปรแกรมสํากรับการวาดภาพกราฟก 3 มิตินั้น สามารถทําไดเชนเดยีวกันกับตัวอยางโปรแกรมวาดภาพกราฟก 2 มิติ โดยข้ันตอนการสรางโปรเจ็คสําหรับการวาดกราฟก 3 มิติ สามารถทําไดตามข้ันตอนท่ี 1 ดังท่ีไดกลาวมาขางตน แตตองทําการแกโคดโปรแกรมในสวนของฟงกชัน OnSize และ OnPaint จึงจะสามมารถวาดกราฟก 3 มิติได ใหทําการแกไขโคดโปรแกรมดังนี ้ ฟงกชัน OnSize ฟงกชัน OnPaint void CChildView::OnSize(UINT nType, int cx, int cy){   CWnd::OnSize(nType, cx, cy);    GLsizei width, height;   GLdouble aspect;    width = cx;   height = cy;    if (cy==0)     aspect = (GLdouble)width;   else     aspect = (GLdouble)width/(GLdouble)height;     glViewport(0, 0, width, height);     glMatrixMode(GL_PROJECTION);     glLoadIdentity();     gluPerspective(45, aspect, 1, 10.0);     glMatrixMode(GL_MODELVIEW);     glLoadIdentity();     glDrawBuffer(GL_BACK); } 

void CChildView::OnPaint()  {   CPaintDC dc(this); // device context for painting      // TODO: Add your message handler code here   glClearColor(0.0f,0.0f,0.0f,0.0f);    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   glLoadIdentity();   glPushMatrix();    glTranslatef(0.0f,0.0f,‐6.0f);   // Translate to center screen.   glScalef(1.2f,1.2f,1.2f);    // Increase all sides to 20%.   glRotatef(50,1.0f,0.0f,0.0f);    // Rotate triangle on x axis.   glRotatef(10,0.0f,1.0f,0.0f);    // Rotate triangle on y axis.   glRotatef(50,0.0f,0.0f,‐1.0f);    // Rotate triangle on z axis.    …………………………………………………..   …………………………………… 

Page 14: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

                  

                } 

…………………………………… glBegin(GL_

glColor3f(0.glVertex3f( glColor3f(1.glVertex3f( glColor3f(0.glVertex3f( 

glColor3f(0.glVertex3f( glColor3f(1.glVertex3f( glColor3f(0.glVertex3f(‐

glColor3f(0.glVertex3f( glColor3f(1.glVertex3f(1glColor3f(1.glVertex3f(1

glColor3f(0.glVertex3f( glColor3f(1.glVertex3f(1glColor3f(1.glVertex3f(1glEnd();  

glPopMatrixglFlush(); // Do not ca

……………………………………. 

_TRIANGLES); 

.0f,1.0f,0.0f); ‐1.0f, 1.0f, ‐1.0.0f,0.0f,0.0f); 1.0f,‐1.0f, ‐1.0.0f,0.0f,1.0f); ‐1.0f,‐1.0f, 1.0

.0f,1.0f,0.0f); ‐1.0f, 1.0f, ‐1.0.0f,1.0f,1.0f); 1.0f,1.0f, 1.0f).0f,0.0f,1.0f); ‐1.0f,‐1.0f,1.0f)

.0f,1.0f,0.0f); ‐1.0f, 1.0f, ‐1.0.0f,0.0f,0.0f); 1.0f,‐1.0f,‐1.0f).0f,1.0f,1.0f); 1.0f,1.0f, 1.0f);

.0f,0.0f,1.0f); ‐1.0f, ‐1.0f, 1.0.0f,0.0f,0.0f); 1.0f,‐1.0f,‐1.0f).0f,1.0f,1.0f); 1.0f,1.0f, 1.0f);

x();    

all CView::OnP

……………..

  0f);  // ด

   f);   // ด 

f);   // ด 

0f);  // ด 

;    // ด    

);    // ด 

0f);  // ด   

);    // ด   

    // ด 

0f);  //ดา 

);    // ด 

    // ดPaint() for pain

ดานหลังซายบน ดานหลังขวาลาง ดานหนาซายลาง ดานหลังซายบน ดานหนาขวาบน ดานหนาซายลาง  ดานหลังซายลาง ดานหลังขวาลาง ดานหนาขวาบน านหนาซายลาง  ดานหลังขวาลาง  ดานหนาขวาบน

nting messages ฟงกชันการ Bโปรแกภาพท่ี s 

Basic Op เม่ือทําการแกน OnSize แBuild > Buildกรมวาดกราฟ 2-1 penGL in Visuกไขโคดโปรแและ OnPaint d Graphic3Dฟก 3 มิติ จะ 14ual C++ แกรมของ แลว ทําD และรันะไดผลดัง 4 

Page 15: เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++

  ภาพท่ี 2-ตัวอยางต void CC{                                         } 

-1 ภาพกราฟกตอไปนี้ ทดล ChildView::OnCPaintDC d

glClearCologlClear(GL_glLoadIdenglPushMatr

// Create nGLUquadricSphereObj=

glPushMatrglTranslateglRotatef(3glRotatef(3glRotatef(3glColor3f(0

// Create wgluQuadricDgluSphere(S

// Create CglBegin(GL_glColor3f(0glVertex3f(glVertex3f(

glColor3f(1glVertex3f(glVertex3f(

glColor3f(0glVertex3f(glVertex3f(glEnd(); 

glPopMatrixglFlush(); // Do not ca

ก 3มิติ องแกไขโคดPaint()  

c(this); // dev

or(0.0f,0.0f,0.0f_COLOR_BUFFEtity(); rix(); 

ew object and cObj *SphereO= gluNewQuad

rix(); d(0.0,0.0,‐4.5)0,1.0,0.0,0.0); 0,0.0,1.0,0.0); 0,0.0,0.0,1.0); .85f, 1.0f, 0.9f)

wireframe. DrawStyle(SphSphereObj, 1.3

oordinate _LINES); .0f, 1.0f, 0.0f); 0.0,1.5,0); 0.0,‐2.0,0); 

.0f,0.0f,0.0f); 2.0,0.0,0); ‐2.0,0.0,0); 

.0f, 0.0f,1.0f); 0.0,0.0,2.0); 0.0,0.0,‐2.0); 

x();    

all CView::OnP

โปรแกรมใหvice context for

f,0.0f); ER_BIT | GL_DE

define the rotabj; ric(); 

); 

hereObj, GLU_L3, 9,13); 

Paint() for pain

หมอีกคร้ัง เพือ่r painting 

EPTH_BUFFER

ation and tran

LINE); 

nting messages

อวาดรูปโครงR_BIT); 

slation. 

Basic OpสรางวงกลมแpenGL in Visuแบบ 3 มิติ 15ual C++  5