Sử dụng VC++ kết hợp với OpenGl để mô phỏng động học

Một phần của tài liệu BÀI TẬP LỚN TÌM HIỂU CƠ BẢN VỀ OPENGL (Trang 48 - 64)

Tiếp theo ta sẽ thêm tài nguyên Dialog vào để tạo ra được các form hiển thị cũng như các nút điều khiển (<< >>)

Sauk hi hộp thoại hiện ra thì chọn IDD_FORMVIEW thì ta sẽ thấy hình ảnh form để design được thông qua control bar(có thể đặt tên của formview này thành 1 cái tên khác cho dễ quản lý.( Đối với việc chèn các biểu tượng như biểu tượng trường hay hình ảnh nào đó cũng làm tương tự, ta chỉ việc đổi từ chọn IDD_FORMVIEW thành

BITMAP thôi.)).

Từ trên phần điều khiển formview mà ta vừa design, click chuột phải và chọn Class wizard, sau khi nhấn OK nó sẽ ra bảng sau: Ta nhập tên nào đó vào( ví dụ là CCTRPANEL), lớp cơ sở là CFormView.

Thêm một số thuộc tính vào lớp CMainFrame để chia đôi khung ứng dụng( nếu không thì rất khó để quản lý và điều chỉnh).

Tiếp theo, thêm các hàm Oncreate, On Destroy, và Onsize vào để có thể thay đổi kích thước hay giá trị:

Nhấn Ctrl+W. Sau đó chọn lớp CMainFrame ở trên class name, chọn CMainFrame ở Object IDs, Bên hộp messages chọn OnCreateClient. Sau khi nhấn edit code thì hàm BOOL CMainFrame:: OnCreateClient hiện ra, edit lại hàm như bên dưới:

Chú ý là nếu đặt giá trị biến là

1( m_Splitter.Create(this,RUNTIME_CLASS(CCTRPANEL),RU

NTIME_CLASS(CCNCView),pContext,1) thì sẽ chia đôi theo hang dọc, còn 0 thì chia đôi theo hàng ngang.

Tuy nhiên khi biên dịch chương trình có thể sẽ xảy ra hiện tượng lỗi, điều này có thể xảy ra khi ta đã sử dụng con trỏ *GetDocument() của lớp CCNCDoc mà chưa khai báo. Ta vào lớp CCNCView.h để sửa lại:

Class CCNCDoc; vào.

Như vậy là cũng đã tương đối ổn rồi, tiếp theo ta chỉnh sửa trong project để link thư viện OpenGL vào dự án. Tiếp theo cài đặt hàm OnInitialUpdate() để có thể Update các khâu, khớp cũng như những thay đổi của robot:

Như vậy công đoạn cũng gần hoàn thiện, tiếp theo ta xây dựng hàm vẽ vật thể( Robot hay cơ cấu máy chúng ta đã thiết kế sẵn trên Solids, Catia hay Inventor rồi, sau đó ta lưu định dạng các file này dưới dạng *.STL), hàm OnDraw này sẽ chỉ có nhiệm vụ là kết nối các file này vào và lắp ghép chúng theo sự điều khiển củaât.Ta cần chú ý một điều là khoảng cách cũng như góc quay nó sẽ được tính theo khoảng cách của từng chi tiết (các part bạn thiết kế 3D) và được bắt đầu làm mốc từ O(0,0,0). Nếu ta đặt hệ tọa độ địa phương(coordinate) thì ta sẽ dựa vào đó để thực hiện hàm tịnh tiến và hàm quay.

Tuy nhiên, thông thường người ta sẽ không vẽ trực tiếp trên hàm OnDraw này mà dùng hàm OnDraw để quản lý hàm paint():

void CPSKView::OnDraw(CDC* pDC) {

CPSKDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

Paint(); }

Để có được hàm Paint() ta click chuột phải vào lớp CCNCView và chọn Add Member Function và làm như bên dưới:

chính là phần mà dùng cài đặt màu của từng chi tiết.

Sau khi chỉnh sửa, ta có được hình ảnh của robot thông qua cửa sổ View. Việc tiếp theo ta cài đặt chương trình tính toán cho robot. Muốn được điều này ta phải có được bảng thông số động học cũng như giải được phương trình động học ngược. Khi đã có tất cả những thứ trên rồi, ta tiếp tục vào lớp CCTRPANEL để tạo ra hàm Calculate() (Cách làm tương tự hàm paint()).

Ta viết chương trình tính toán vào hàm đó. Khi đó ta sẽ thấy được các chuyển động của robot theo chương trình tính toán:

Ngoài ra, để tạo các hiệu ứng như kéo nhả chuột, rê chuột.. chúng ta cũng có thể làm được bằng các hàm như OnLButtonDown() OnLButtonUp(), OnMouseMove(), OnMouseWheel()…Muốn có được các hàm này hãy nhìn bên hình vẽ dưới:

Vậy nhóm em đã hướng dẫn cách mô phỏng chương trình robot thông qua VC++. Tất nhiên sẽ phải sửa nhiều chương trình thì mới chạy được.Sau đây là bonus một số chương trình hoàn thiện:

TÀI LIỆU THAM KHẢO [1] http://www.videotutorialsrock.com/

[2] Lập trình Opengl với thư viện AUX - Bùi Minh Trường

[3] The OpenGL Utility Toolkit (GLUT) Programming Interface - Mark J. Kilgard.

[4] www.hua.edu.vn

[5]. Đề tài OpenGL các khóa trước …….

Một phần của tài liệu BÀI TẬP LỚN TÌM HIỂU CƠ BẢN VỀ OPENGL (Trang 48 - 64)

Tải bản đầy đủ (DOC)

(64 trang)
w