これから始める ゲームプログラミング · OpenGLなどのマルチメディアAPI ... • Visual Studio 2010 Express ... – Visual C++ 2010 ...
เนื้อหา Computer Graphics Using OpenGL in Visual C++ EP1 Basic OpenGL in Visual C++
description
Transcript of เนื้อหา 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
จะตองกํ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 ตอไปนี้
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
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
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
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
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
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; }
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; }
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(); }
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
คําส่ัง 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
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. ………………………………………………….. ……………………………………
}
…………………………………… 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
ภาพท่ี 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.
s
Basic OpสรางวงกลมแpenGL in Visuแบบ 3 มิติ 15ual C++ 5