12 opengl과 - sangjiit.sangji.ac.kr/~3d/ppt/cg/12.pdf · 2017. 5. 16. · opengl과 gui 01 glui를...

48
OpenGL과 GUI 01 GLUI를 사용한 GUI 02 MFC를 사용한 GUI 12

Upload: others

Post on 15-Feb-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

  • OpenGL과 GUI

    01 GLUI를 사용한 GUI

    02 MFC를 사용한 GUI

    12

  • GLUI의 주요 Control 항목들의 구현 결과 모음

    2

    GLUI를 사용한 GUI 01

  • GLUI Library 설치

    3

    GLUI를 사용한 GUI 01

  • GLUI Library 환경설정-I

    4

    GLUI를 사용한 GUI 01

  • GLUI Library 환경설정-II

    5

    GLUI를 사용한 GUI 01

  • GLUI Library 환경설정-III

    6

    GLUI를 사용한 GUI 01

  • glui.h File의 Error 발생 시 처리 방법

    7

    GLUI를 사용한 GUI 01

    코드 12-1

    class GLUIAPI GLUI_CommandLine : public GLUI_EditText { public: typedef GLUI_EditText Super; enum { HIST_SIZE = 100 }; #ifdef _MSC_VER // Explicit template instantiation needed for dll template class GLUIAPI std::allocator; template class GLUIAPI std::vector; #endif std::vector hist_list; int curr_hist; int oldest_hist; int newest_hist; bool commit_flag; public: ......

    Original glui.h에서 Class 밖으로 이동시켜야 할 부분

  • glui.h File의 Error 발생 시 처리 방법

    8

    GLUI를 사용한 GUI 01

    코드 12-2

    #ifdef _MSC_VER // Explicit template instantiation needed for dll template class GLUIAPI std::allocator; template class GLUIAPI std::vector; #endif class GLUIAPI GLUI_CommandLine : public GLUI_EditText { public: typedef GLUI_EditText Super; enum { HIST_SIZE = 100 }; std::vector hist_list; int curr_hist; int oldest_hist; int newest_hist; bool commit_flag; public: ......

    Original glui.h에서 Error 부분을 Class 밖으로 이동시킨 결과

  • GLUI를 사용하여 Teapot을 제어하기 위한 GUI 구현 결과

    9

    GLUI를 사용한 GUI 01

    코드 12-3

  • GLUI_Master_Object:Create_glui_subwindow의 Prototype

    10

    GLUI를 사용한 GUI 01

    GLUI:set_main_gfx_window의 Prototype

  • GLUI_Rotation::GLUI_Rotation의 Prototype

    11

    GLUI를 사용한 GUI 01

  • GLUI_Rotation::set_spin의 Prototype

    12

    GLUI를 사용한 GUI 01

    GLUI_Column::GLUI_Column의 Prototype

  • Translation Control의 4가지 유형(Type)

    13

    GLUI를 사용한 GUI 01

  • GLUI_Translation::GLUI_Translation의 Prototype

    14

    GLUI를 사용한 GUI 01

  • GLUI_Translation::set_speed의 Prototype

    15

    GLUI를 사용한 GUI 01

    Button의 유형(Type)

    Button의 유형(Type)

  • New Project – MFC Application

    16

    MFC를 사용한 GUI 02

    (A) Visual Studio C++ 2010

  • New Project – MFC Application

    17

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012

  • MFC Application Wizard – MFCApplication1

    18

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFC Application Wizard – MFCApplication1 : Application Type

    19

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFC Application Wizard – MFCApplication1 : User Interface Features

    20

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFC Application Wizard – MFCApplication1 : Advanced Features

    21

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFC Application Wizard – MFCApplication1 : Generated Classes

    22

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Solution Explorer

    23

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Solution Explorer – Header Files – stdafx.h

    24

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View – CMFCApplication1Dlg->Add Variables…

    25

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Add Member Variable Wizard

    26

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Add Member Variable Wizard

    27

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View

    28

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View – CMFCApplication1Dlg -> Class Wizard

    29

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : MFC Class Wizard

    30

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : MFC Class Wizard

    31

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View - OnSize

    32

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 OnSize(...)에 입력할 소스 코드

    33

    MFC를 사용한 GUI 02

    코드 12-4 VERIFY(wglMakeCurrent(m_hDC, m_hRC));

    GLResize(cx, cy);

    VERIFY(wglMakeCurrent(NULL, NULL));

  • MFCApplication1 : Class View – CMFCApplicatioin1Dlg -> Add Function...

    34

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Add Member Function Wizard

    35

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View - GLResize

    36

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 GLResize(int cx, int cy)에 입력할 소스 코드

    37

    MFC를 사용한 GUI 02

    코드 12-5 GLfloat Aspect;

    if(cy == 0) cy = 1;

    glViewport(0, 0, cx, cy);

    Aspect = (GLfloat)cx/(GLfloat)cy;

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(45.0f, Aspect, 1.0f, 100.0f);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

  • MFCApplication1 : MFC Class Wizard

    38

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View - OnCreate

    39

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 OnCreate(...)에 입력할 소스 코드

    40

    MFC를 사용한 GUI 02

    코드 12-6 int nPixelFormat; m_hDC =::GetDC(m_hWnd); static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0,0, 0,0,0,0,0, 32, 0, 0, PFD_MAIN_PLANE, 0, 0,0,0 }; nPixelFormat = ChoosePixelFormat(m_hDC, &pfd); VERIFY(SetPixelFormat(m_hDC, nPixelFormat, &pfd)); m_hRC = wglCreateContext(m_hDC); VERIFY(wglMakeCurrent(m_hDC, m_hRC)); wglMakeCurrent(NULL, NULL);

  • MFCApplication1 : Class View - OnDestroy

    41

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 OnDestroy()에 입력할 소스 코드

    42

    MFC를 사용한 GUI 02

    코드 12-7 wglDeleteContext(m_hRC);

    ::ReleaseDC(m_hWnd, m_hDC);

  • MFCApplication1 : Add Member Function Wizard

    43

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • MFCApplication1 : Class View - GLRenderScene

    44

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 GLRenderScene(void)에 입력할 소스 코드

    45

    MFC를 사용한 GUI 02

    코드 12-8 glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1.0f, 0.0f, 0.0f);

    glPushMatrix();

    glEnable(GL_DEPTH_TEST);

    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

    glShadeModel(GL_SMOOTH);

    glLoadIdentity();

    gluLookAt(0.0f, 0.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);

    glutWireTeapot(20.0);

    glPopMatrix();

    glFlush();

  • MFCApplication1 : Class View - Class View - OnPaint

    46

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010

  • 함수 OnPaint()에 입력할 소스 코드

    47

    MFC를 사용한 GUI 02

    코드 12-9 wglMakeCurrent(m_hDC, m_hRC);

    GLRenderScene();

    SwapBuffers(m_hDC);

    wglMakeCurrent(m_hDC, NULL);

  • MFCApplication1 구현 결과

    48

    MFC를 사용한 GUI 02

    (B) Visual Studio C++ 2012 (A) Visual Studio C++ 2010