Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG CƠ KHÍ
HANOI UNIVERSITY OF SCIENCE AND TECHNOLOGY
SCHOOL OF MECHANICAL ENGINEERING
Phần lập trình

HƯỚNG DẪN LẬP TRÌNH MÔ PHỎNG HOẠT


MODELLING IN MECHATRONICS
ĐỘNG CỦA HỆ CƠ ĐIỆN TỬ

PGS.TS. Phan Bui Khoi

Hanoi 2009-2022

2009-2022 Phan Bui Khoi khoi.phanbui@hust.edu.vn 2

Sơ đồ cấu trúc và
quy trình mô
phỏng Hệ Cơ điện
tử:
Bài 3
 Visual Studio
LẬP TRÌNH ĐỒ HỌA 3D VỚI OPENGL
C++
 CAD, Solidworks
 Maple, Matlab

3 4
Mục tiêu Nội dung
 Có hiểu biết cơ bản về thư viện đồ họa OpenGL 1. Giới thiệu OpenGL
 Khởi tạo được các ứng dụng MFC sử dụng OpenGL 2. Các chương trình OpenGL
 Nắm được một số khái niệm trong OpenGL 3. Các khái niệm cơ bản trong OpenGL

5 6

1. Giới thiệu OpenGL  OpenGL


 Có hai Giao diện lập trình (API) nổi bật trong lập trình đồ họa 3  OpenGL – Open Graphic Library
chiều: OpenGL và DirectX  OpenGL là bộ thư viện đồ họa có các hàm giúp xây dựng các đối
 OpenGL là giao diện mở, có trên hầu hết các hệ thống máy tính tượng và thao tác cần thiết trong các ứng dụng tương tác 3D.
(Windows, Mac OS, Linux…)  OpenGL không hỗ trợ
 DirectX là giao diện bản quyền của Microsoft, có trong các hệ thống  Các hàm in/out hay thao tác trên window,
chạy hệ điều hành của hãng này(Windows, Xbox, Windows Phone…)  Các hàm cấp cao để xây dựng các mô hình đối tượng,
 OpenGL thường được dùng phổ biến hơn trong các hệ đồ họa  Thay vào đó, người dùng phải tự xây dựng từ các thành phần
chuyên nghiệp (làm phim, mô phỏng khoa học…) trong khi DirectX hình học cơ bản (điểm, đoạn thẳng, đa giác).
được dùng nhiều hơn trong lập trình game
 Hầu hết các card tăng tốc đồ họa hỗ trợ cả hai

7 8
 Các nhánh phát triển của OpenGL  Thư viện hỗ trợ
 OpenGL-ES (OpenGL for Embedded System)  GLU (OpenGL Utility Library) là thư viện các hàm tiện ích cho
 Là tập con của OpenGL OpenGL, Tập trung vào mapping giữa các hệ trục toạ độ và các loại
 Sử dụng cho các hệ thống nhúng như smartphone, tablet, game kích thước màn hình.
console,...  GLUT (OpenGL Utility Toolkit) là một thư viện nhằm giúp nhanh
 WebGL (Web Graphics Library) chóng tạo ra các cửa sổ cũng như quản lý các sự kiện từ bàn phím,
 Là thư viện render đồ hoạ 2D và 3D cho trình duyệt chuột. GLUT là một thành phần bổ sung để dễ dàng hơn trong việc
 API cho JavaScript lập trình OpenGL.
 Được viết dựa trên OpenGL-ES
 Tương tác với GPU thông qua trình duyệt

9 10

2. Các chương trình OpenGL  Chương trình OpenGL đầu tiên


 Chương trình OpenGL đầu tiên  Các bước thực hiện
 Chương trình OpenGL trong MFC  Chạy chương trình
 Các thành phần của chương trình

11 12
 Các bước tạo một project OpenGL đầu tiên 3. Chọn kiểu Template là Win32, kiểu project là Win32 Project
1. Mở Visual C++ 4. Chọn Application type là Window application, Chọn Empty project,
(Visual Studio 2012) Finish
2. Chọn menu
File/New/Project…

13 14

5. Thêm file mã nguồn vào project: 6. Add file opengl.cpp vào trong cửa sổ solution của project
Copy file opengl.cpp từ thư mục
• Chuột phải vào
…/data của lớp vào thư mục project chọn
chứa project Add/Existing
Item

15 16
• Chọn file 7. Thêm hai file opengl32.lib và glu32.lib vào project
opengl.cpp
từ thư mục Hai cách:
của project • Thêm vào
Additional
Dependencies
trong Setting của
Project

17 18

7. Thêm hai file opengl32.lib và glu32.lib vào project 7. Build chương trình (F7, Ctrl+Shift+B)
Hai cách: 8. Chạy chương trình (F5, Ctrl+F5)
• Thêm vào Additional
Dependencies trong
Setting của Project
• Hoặc thêm trực tiếp
file vào code

19 20
9. Sửa màu nền 2. Các chương trình OpenGL
10.Sửa màu vẽ  Chương trình OpenGL trong MFC
glClearColor(0,0.5,1,0.5); glClearColor(0,0.5,1,0.5);
Chuẩn bị dữ liệu

Các bước thực hiện

Chạy chương trình

21

 Chuẩn bị dữ liệu Lớp CMayaCamera


Lớp COpenGLInit
 Là một lớp C++, gói gọn các hàm xử lý camera khi thao tác chuột
 Là một lớp C++, gói gọn các hàm tương tác với OpenGL (mouse)
 Có các hàm tương ứng với các sự kiện trong MFC  Có các hàm tương ứng với các sự kiện về mouse trong MFC
 Download từ forum/group/TEAM  Các hàm chính
 Các hàm chính  OnLButtonDown – Xử lý khi bấm chuột trái
 OnCreate – Hàm khởi tạo  OnLButtonUp – Xủ lý khi nhả chuột trái
 OnSize – Hàm thay đổi kích thước  OnRButtonDown – Xử lý khi bấm chuột phải
 OnDestroy – Hàm hủy  OnRButtonUp – Xủ lý khi nhả chuột phải
 OnDraw – Hàm vẽ  OnMouseMove – Xử lý khi di chuyển chuột
 SetupPixelFormat – Khởi tạo định dạng điểm ảnh  OnMouseWheel – Xử lý khi quay chuột giữa
 Các bước tạo project OpenGL trong MFC

 Khởi động Visual Studio C++ (Visual Studio 2012)


 Vào File/New Project
 Chọn template MFC, chọn project type là MFC Application.
 Chọn application type Single Document, project style MFC
Standard. Rồi chọn Finish

Mã nguồn chương trình MFC cơ bản Thêm các nội dung


 Mở file OpenGLInit.cpp có trong thư mục OpenGLInit
 Copy nội dung chương trình từ file OpenGLInit và pate vào đầu lớp
View (mở lớp MFCAView.cpp) của chương trình ứng dụng MFC (ví dụ
MFCA) vừa tạo.
 Thêm khai báo biến COpenGLInit openGLInit.
 Thêm các hàm xử lý sau trong lớp View, nếu có: PrecreateWindow(),
OnCreate(), OnSize(), OnDraw(), OnEraseBkgnd(), OnTimer(),
OnDestroy()
 Thêm các dòng lệnh tương ứng vào các hàm xử lý sự kiện ở trên.

28
Thêm các nội dung Thêm các nội dung

BOOL CMFCAView::PreCreateWindow(CREATESTRUCT& cs) void CMFCAView::OnDraw(CDC* /*pDC*/)
{ {
// TODO: Modify the Window class or styles here by modifying CMFCADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; if (!pDoc)
return;
return CView::PreCreateWindow(cs); // TODO: add draw code for native data here
}

openGLInit.OnDraw();
}

29 30

Thêm các nội dung Thêm các nội dung


int CMFCAView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ void CMFCAView::OnSize(UINT nType, int cx, int cy)
if (CView::OnCreate(lpCreateStruct) == ‐1) {
return ‐1; CView::OnSize(nType, cx, cy);
// TODO:  Add your specialized creation code here
openGLInit.OnSize(nType, cx, cy);
    openGLInit.OnCreate(NULL, this‐>GetDC()‐>m_hDC);
    SetTimer(openGLInit.m_nTimerID, openGLInit.m_nTimerElapse, NULL);
}
return 0;
}

31 32
Thêm các nội dung Thêm các nội dung

BOOL CMFCAView::OnEraseBkgnd(CDC* pDC) void CMFCAView::OnTimer(UINT_PTR nIDEvent)
{ {
// TODO: Add your message handler code here and/or call default // TODO: Add your message handler code here and/or call default

return TRUE; RedrawWindow();

return CView::OnEraseBkgnd(pDC); CView::OnTimer(nIDEvent);
} }

33 34

Thêm các nội dung

void CMFCAView::OnDestroy()
{
CView::OnDestroy();

// TODO: Add your message handler code here

KillTimer(openGLInit.m_nTimerID);
openGLInit.OnDestroy();
}

35 36
Biên dịch, chạy chương trình Thêm xử lý phần vẽ hình trong hàm OnDraw

37 38

Vẽ hình trong hàm OnDraw Tạo chuyển động cho hình ảnh

static int angle = 0;
glTranslated(4.5,1,0.0);
glRotatef(float(angle++),0.0f,0.0f,1.0f);
glTranslated(0, 0, ‐10);

39 40

You might also like