Hình 11.1:OpenGL logo OpenGL- là chữ viết tắt của Open Graphic Library- là một thư viện đồ họa tốc độcao và độc lập với hệ thống giao diện các hệ điều hành.. Trong kỹ thuật, việc sử dụng
Trang 1PHẦN IV - MÔ PHỎNG OPENGL
CHƯƠNG 11 – MÔ PHỎNG HOẠT ĐỘNG HỆ THỐNG BẰNG LẬP
TRÌNH MFC SỬ DỤNG THƯ VIỆN OPENGL.
11.1 GIỚI THIỆU CHUNG VỀ OPENGL.
11.1.1 OpenGL.
Hình 11.1:OpenGL logo
OpenGL- là chữ viết tắt của Open Graphic Library- là một thư viện đồ họa tốc độcao và độc lập với hệ thống giao diện các hệ điều hành Thư viện này được phát triển bởitập đoàn Silicon Graphic Library Inc Và hiện nay OpenGL là một công cụ được sử dụngrộng rãi trong các hệ điều hành như: win9x, win NT
Ngày nay việc ứng dụng các công nghệ đồ họa vào cuộc sống đang phát triển mạnh
mẽ Trong kỹ thuật, việc sử dụng các ứng dụng của OpenGL hay DirectX vào việc mô phỏng các cơ cấu máy móc, các hoạt động của các thiết bị máy móc, robot công nghiệp trước khi đi vào thiết kế, thử nghiệm bằng mô hình thực đang được rất nhà chế tạo quan tâm bởi tính trực quan đem lại khi xây dựng được các mô hình đồ họa hoạt động trong không gian 3 chiều Và đó cũng là lý do tôi chọn thư viện lập trình OpenGL kết hợp lập trình C++ để xây dựng bài toán mô phỏng cho quá trình sản xuất đang tiến hành
Trang 211.1.2 Đặc điểm của OpenGL.
OpenGl là một thư viện đồ họa rất lớn, gồm khoảng 150 hàm hỗ trợ một số tínhnăng cơ bản như sau:
Khả năng thể hiện các hàn đối tượng đồ họa cơ bản.
OpenGL có thể thể hiện đượcc các đối tượng đồ họa cơ bản như: điểm, đoạn thẳng, đagiác, các đường cong hay mặt cong bậc hai Ngoài ra còn một số đối tượng 3 chiều cơbản khác như: hình cầu, hình trụ, hình hộp Từ đó có thể xây dựng nên các đối tượng 3chiều phút tạp hơn, thậm chí có thể tự định nghĩa hay thiết kế các phần mềm hỗ trợ 3chiều như AutoCad, SolidWorks, 3Dmax
Khả năng quan sát đối tượng.
Các đối tượng có thể quan sát từ nhiều góc độ khác nhau thông qua các phép biến đổi
vị trí mắt hay phép biến đổi vị trí vật cũng như các phép chiếu
Khả năng định màu sắc vật liệu đối tượng.
Cho phép thể hiện màu sắc đối tượng một cách đa dạng và thuộc tính vật liệu
Khả năng tạo hiệu ứng ánh sáng trong chương trình mô phỏng.
Cho phép tạo hiệu ứng ánh sáng như thực tế tạo ra cảm giác thật cho các mô hình vàkhung cảnh 3 chiều
Khả năng tạo khung cảnh mô phỏng thực tế OpenGL.
Hỗ trợ các kỹ thuật tạo các khung cảnh giống thực tế như :
- Kỹ thuật dán ảnh (texture mapping) để tạo các khung cảnh thực tế
- Kỹ thuật sương mù (fog) cho phép tạo hiệu ứng ảnh mờ dần khi đối tượng chuyểnđộng xa khỏi mắt nhìn
- Kỹ thuật trộn màu (blending) tạo các vật thể trong mờ có thể nhìn xuyên qua được
Trang 3- Kỹ thuật loại bỏ răng cưa (antialiasing).
Khả năng cải thiện tốc độ OpenGL.
Cho phép cải thiện tốc độ hiển thị bằng kỹ thuật danh sách hiển thì (display list)
Khả năng chọn các đối tượng đồ họa (selection and hitting derect).
Kỹ thuật cho phép chọn các đối tượng đồ họa 3 chiều và ứng dụng trong kỹ thuật môphỏng va chạm của vật thể
11.2 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH VISUAL C++ VÀ ỨNG DỤNG MFC.
Visual C++ là một trong các ngôn ngữ lập trình thuộc dòng Visual Studio của hãngMicrosoft, phát triển dựa trên nền tảng là ngôn ngữ lập trình hướng đối tượng C++ Visual
C++ ra đời khoảng những năm 1990 và càng ngày càng được sử dụng rộng rãi nhất là cácứng dụng trong kỹ thuật như là lập trình nhúng, lập trình điều khiển và lập trình môphỏng Việc tạo ra các giao diện phức tạp và trình bày đẹp đối với Visual C++ khá là đơngiản, và đây chính là thế mạnh của Visual C++ trong việc trợ giúp đắc lực cho người lậptrình khi xây dựng những dự án lớn hoặc trong kỹ thuật lập trình hệ thống
MFC (Microsoft Foundation Classes) – là thư viện cơ sở chứa các lớp (class) C++
do Microsoft cung cấp nhằm đặt một trình bao bọc Windows API tạo sự thuận lợi caocho người dùng trong việc phát triển ứng dụng Ngoài ra, MFC còn cung cấp kiến trúcView/Document giúp định nghĩa cấu trúc chương trình và cấu trúc tài liệu cho trình ứngdụng đơn giản, uyển chuyển và dễ phát triển hơn Do đó MFC còn được xem là mộtkhung ứng dụng (application framework)
Lập trình Windows với MFC là kỹ thuật lập trình sử dụng bộ thư viện MFC để xây dụng các trình ứng dụng trong Windows (Window App) và các dạng ứng dụng khác như DLL, COM, ActiveX
Trang 411.3 MÔ PHỎNG BÀI TOÁN CẦN THỰC HIỆN.
11.3.1 Cách tạo một Project MFC để mô phỏng hoạt động.
Các bước tiến hành như sau:
-Chọn File→New, chọn tab Projects, khi đó xuất hiện các Project được lập trình trên Visual C++ 6.0→Chọn MFC AppWizard(exe) Trong Project name, gõ tên muốn đặt vào,
ví dụ “van”, và trong lacation chọn vị trí lưu Project vừa tạo.
Hình 11.2: Bắt đầu thiết lập Project MFC.
-Tiếp đó xuất hiện các hộp thoại cho phép thiết lập đặc tính của Project tạo ra, cụ thể nhưsau:
Bước 1: Chọn Single Document Interface- đây là loại giao diện đơn tài liệu tại một thời
điểm, chỉ có một tài liệu được mở và hiện hành, để cho người dùng thao tác trên đó Trong trường hợp này, do cần mô phỏng hoạt động của một hệ thống hàn nên sử dụng kiểu tài liệu này
Trang 5Hình 11.3: Thiết lập 1
Bước 2: Do ứng dụng không sử dụng dữ liệu nên trong mục Database Support chọn
None.
Trang 6Hình 11.4: Thiết lập 2.
Bước 3: Do không dùng tài liệu phức tạp nên chọn None.
Hình 11.5: Thiết lập 3.
Bước 4: Lựa chọn các thiết lập sau:
- Docking Toolbar: Yes –Chọn thanh công cụ có gắn vào cửa sổ.
- Initial Status Bar: Yes –Chọn thanh trạng thái có gắn vào ứng dụng.
- Printing an Printer Preview: No-Không cần in ấn.
- 3D controls: Yes-Có điều khiển nối.
- Toolbars look: Normal –Dạng thanh công cụ bình thường.
Trang 7Hình 11.6: Thiết lập 4.
Bước 5: Chọn các thiết lập sau:
- MFC Standard: dạng chuẩn.
Hình 11.7:Thiết lập 5.
Bước 6: Hoàn tất việc thiết lập.
Hình 11.8: Hoàn thành thiết lập Project MFC.
Trang 8Về cơ bản sau khi tạo lập xong một Project, chương trình đã tạo sẵn ra một giaodiện trước Khi nhấn chạy thử chương trình ra được như sau:
Hình 11.9:Chạy thử chương trình khi mới thiết lập xong.
Khi một ứng dụng được tạo ra nó có các lớp cơ bản sau:
Hình 11.10: Các lớp cơ bản của ứng dụng.
Chức năng cảu các lớp cơ sở của ứng dụng MFC như sau:
Trang 9- CApp : là lớp ứng dụng (Applicatiton Class) có nhiệm vụ là khởi tạo và chạy ứng dụng.
- CDoc : là lớp tài liệu (Document Class) của ứng dụng, có nhiệm vụ nạp và duy trì 1 tài
liệu Một tài liệu có thể là bất cứ cái gì,từ một bản thảo cho đến các việc cài đặt của mộtthiết bị mạng…Tuy nhiên, mục đích sử dụng của chương trình là mô phỏng nên khôngcần quan tâm nhiều đến lớp này
- CView: là lớp hiển thị của ứng dụng (View Class),có nhiệm vụ cung cấp một hay nhiều
View (khung) cho tài liệu.Trong chương trình mô phỏng ta sẽ cần sử dụng rất nhiều tronglớp này để khởi tạo cho OpenGL và các thao tác vẽ lại trên lớp này
- CmainFrame: là lớp khung (Frame Class) của ứng dụng và có nhiệm vụ hiển thị và
truyền lệnh của người dùng
11.3.2 Khởi tạo và thiết lập các gói thư viện của OpenGL.
Để tạo ra và hiện hành một ngữ cảnh biểu diễn OpenGL có 3 bước cơ bản sau :
Bước 1 : Ta phải định dạng điểm ảnh
Bước 2 : Ta phải tạo ngữ cảnh biểu diễn
Bước 3 : Làm cho ngữ cảnh biểu diễn hiện hành.
Qua 6 bước cơ bản trên ta đã tạo ra được 1 Project MFC, để mô phỏng được các hoạt động của hệ thống thì ta phải thiết lập môi trường đồ họa
Trang 10Hình 11.11:Thêm các thư viện sử dụng.
Để tạo được ngữ cảnh biểu diễn của OpenGL thì trước tiên ta phải include (baogồm) tất cả các tập thư viện của OpenGL vào trong Project này Từ thanh Menu chính
của chương trình Visual C++ 6.0 ta chọn Project -> Settings sau đó chọn Tab là Link , chọn category là “General” và nhập vào hộp thoại Object/library modules là :
“opengl32.lib glu32.lib” như hình vẽ trên và chọn nút OK.
Khai báo và sử dụng lớp ST_SplitterWnd: Đây là lớp dung để chia đôi khung ứng dụng khi chạy chương trình.Ta nhấn đúp vào lớp CMainFrame trong ClassView/file
MainFrm.h và phải khai báo thêm :
Trang 1111.3.3 Tạo các hàm.
Để tạo thành một chương trình hoàn chỉnh, cần khai báo cũng như sử dụng rất nhiềubiến, hàm Vì thế trong giới hạn của kiến thức bản thân, cũng như phạm vi của đồ án, ởđây tôi chỉ xin trình bày các hàm chính trong chương trình
Khai báo biến các con trỏ để khởi tạo thiết bị và môi trường vẽ trong lớp CDoc:
// Attributes
public:
CInitOpenGL *m_pInitGLView;
CListPoint m_Orbitan;
Tiến hành thiết lập môi trường đồ họa OpenGL trong lớp Cview:
-Thiết lập điểm nhìn đối tượng:
Trang 12-Thiết tạo hàm OnInitiaUpdate() để update các khâu khớp, cũng như các thay đổi của đối
tượng, có thể thiết lập màu nền tại đây
Trang 13Xây dựng hàm InitModel để nhập các đối tượng 3D dạng file *.STL xuất từ các chương
trình vẽ đối tượng 3D, đồng thời quy định màu sắc cho đối tượng
void CvanDoc::InitModel()
{
//Chon vi tri ban dau cua gia do
m_thetabinh = 0; m_thetadia=0; m_thetapittong = 0;
x1 = 0; x1v = 0; x2 = 0; x3 = 0;
tam1 = tam2 = tam3 = tam4 = tam5 = 0;
//Khoi tao cac khau:
Trang 14m_h2.setModel("Model File/h2.STL");
m_h2.setMaterial(storageMaterial[10]);
m_pittong1_1.setModel("Model File/pittong1_1.STL"); m_pittong1_1.setMaterial(storageMaterial[6]); m_pittong1_2.setModel("Model File/pittong1_2.STL"); m_pittong1_2.setMaterial(storageMaterial[16]); m_pittong2.setModel("Model File/pittong2.STL"); m_pittong2.setMaterial(storageMaterial[9]);
Trang 15//ve khoi V glPushMatrix();
glTranslated(0, -60, 0);//de ve vi tri mat dat glTranslated(0, x1v, 0); //x1v= 60 thi o vi tri dua binh vao vi tri han, ha xuong 10mm nua khi binh quay
m_v.drawObject();//ve khoi V glPopMatrix();
//ve binh glPushMatrix();
glTranslated(0, 300, 0);
glTranslated(50, 0, 0);//50 la vi tri chon dat ban dau glTranslated(0, -60, 0); //vi tri binh khi moi dat vao glTranslated(0, x1, 0); //x1= 60 thi o vi tri han glTranslated(-x2, 0, 0);//vi tri han x2=50 glRotated(m_thetabinh, 1, 0, 0);
Trang 17glTranslated(-105, 0, 0);
glTranslated(0, 0, 400);//400 la gia tri dat vi tri han dau glTranslated(0, 0, 100);//Trong lan 6 thi day la x5 m_m3.drawObject();//ve m3
m_m4_1.drawObject();//ve m4_1 m_m4_2.drawObject();//ve m4_2 m_m4_3.drawObject();//ve m4_3 m_m5_1.drawObject();//ve m5_1 m_m5_2.drawObject();//ve m5_2 glPopMatrix();
//ve cum thiet bi han
glPushMatrix();
glTranslated(0, -10, 0);
glTranslated(0, 0, -1000);//1000 ga tri tu chon glTranslated(-700, 0, 0);//700 ga tri tu chon m_ng1.drawObject();//ve nguon 1
m_ng2.drawObject();//ve nguon 2 m_ng3.drawObject();//ve nguon 3 glTranslated(200, 0, 0);//200 ga tri tu chon m_dk1.drawObject();//ve dieu khien 1 m_dk2.drawObject();//ve dieu khien 2 m_dk3.drawObject();//ve dieu khien 3 glTranslated(200, 0, 0);//200 ga tri tu chon m_day1.drawObject();//ve bo cap day 1 m_day2.drawObject();//ve bo cap day 2 m_day3.drawObject();//ve bo cap day 3 glTranslated(900, 0, 0);//900 ga tri tu chon m_khi1.drawObject();//ve binh khi 1
m_khi2.drawObject();//ve binh khi 2 m_khi3.drawObject();//ve binh khi 3 m_khi4.drawObject();//ve binh khi 4 m_khi5.drawObject();//ve binh khi 5 glPopMatrix();
}
Tạo bảng điều khiển trong lớp mới CmainFrame, tạo Dialog FORMVIEW và
thiết kế bảng điều khiển mong muốn
Trang 18Hình 11.12: Thiết kế bảng điều khiển.
Tạo ra các sự kiện khi nhấn các nút trên bảng điều khiển để thực hiện các công việc yêu cầu
Trang 19CvanDoc *pDoc = GetDocument();
pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t+=10;
pDoc->x1 = m_t;
pDoc->x1v = m_t;
if (m_t>50) {
m_t=50;
} UpdateAllViews();
Trang 20if (x==1)
{
CvanDoc *pDoc = GetDocument();
pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t-=10;
pDoc->x1 = m_t;
pDoc->x1v = m_t;
if (m_t<0) {
m_t=0;
} UpdateAllViews();
CvanDoc *pDoc = GetDocument();
pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t2+=5;
pDoc->x3 = m_t2;
if (m_t2>100) {
m_t2=100;
} UpdateAllViews();
Trang 21pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t2-=5;
pDoc->x3 = m_t2;
if (m_t2<0) {
m_t2=0;
} UpdateAllViews();
CvanDoc *pDoc = GetDocument();
pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t3+=5;
CvanDoc *pDoc = GetDocument();
pDoc->m_Orbitan.clear();//xoa duong quy dao di m_t3-=5;
Trang 22pDoc->tam1 += 2;
pDoc->x1 += 2;//cua binh pDoc->x1v += 2;//cua khoi V }
else
//Chuyen dong 2: pitong day binh vao dung vi tri khi han
Trang 23//Chuyen dong 3:V dich xuong 60 mm
if ((pDoc->x2 >= 50) & (pDoc->tam3 > -60))
{
pDoc->tam3 -= 2 ; pDoc->x1v -= 2;//khoi V }
//Chuyen dong 4:Han
//Khi khoi V ha xuong khoang 10mm thi bat dau han
if ((pDoc->tam3 < -10) & (pDoc->m_thetabinh < 360)) {
//Chuyen dong 5: Nang khoi V len de do bình
//Khi binh quay khoang 330 do ti khoi V bat dau di len
if (pDoc->m_thetabinh >= 360)
pDoc->m_Orbitan.clear();//xoa duong quy dao
if ((pDoc->m_thetabinh > 355) & (pDoc->tam4 < 60)) {
pDoc->tam4 += 2;
pDoc->x1v += 2;//khoi V }
//Chuyen dong 6 :Keo pittong ra
if ((pDoc->tam4 == 60) & (pDoc->x3 >0))
{
pDoc->x3 -= 3;
pDoc->tam5 -=3;
}
//chuyen dong 7 :Ha V xuong > kết thúc một lần hàn
if ((pDoc->tam5 < 0) & (pDoc->x1 > 0))
{
pDoc->x1 -= 2;//binh pDoc->x1v -= 2;//khoi V }
UpdateAllViews();
Trang 24default:break;
}
}
-Ngoài ra còn nhiều hàm liên quan, hỗ trợ khác nhưng không trình bày hết được tại đây
11.3.4 Thiết kế các mô hình đối tượng 3D trên SolidWorks.
Ở đây lựa chọn chương trình vẽ 3D SolidWork, sau khi đã vẽ xong các đối tượngcần thiết cho mô phỏng, sẽ tiến hành lưu chúng lại dưới dạng file *.STL Dưới đây làcách tiến hành
Giả sử minh họa vẽ bình, sau khi vẽ xong bình (không trình bày cách vẽ), ta được nhưsau:
Hình 11.13: Ví dụ mô bình 3D vẽ bằng Solidwork
- Save file dưới dạng file STL: chọn save as
- Một bảng save as hiện ra, các thông số điền và lựa chọn như sau:
File name: đặt tên file.
Trang 25 Save as type: chọn STL(*.stl) Tiếp đó nhấn Option, và hiện ra bảng Option.
Chọn các thông số như dưới đây:
Hình 11.14: Option khi save file dạng *.STL.
Output as: chọn ASCII
Một điều quan trọng là tích vào ô: “Do not translate STL output data to positive space ” để cho hệ tọa độ khi vẽ trong Solidworks và khi chuyển sang file *STL
không bị dịch chuyển
- Kết quả thu được file “binh.stl”
- Tiến hành hoàn toàn tương tự với các khâu khác của đối tượng
Dưới đây là danh sách các file STL tạo ra sau khi vẽ tất các khâu (trong thư mục Model file)
Trang 26Hình 11.15: Các file dùng trong chương trình dưới dạng *.STL.
Trang 2711.3.5 Chạy mô phỏng sau khi hoàn thành.
Dưới đây là một số hình ảnh khi chạy chương trình