Lập trình mô phỏng hoạt động cuả rôbốt Scara 4 bậc tự do

MỤC LỤC . 4

LỜI NÓI ĐẦU .9

GIỚI THIỆU TỔNG QUAN VỀ ROBOT CÔNG NGHỆP VÀ MÔ PHỎNG

HOẠT ĐỘNG. 11

CHƯƠNG I: CÁC C NG C ĐỂ XÂY DỰNG BÀI TOÁN PHỎNG HOẠT

ĐỘNG CỦA ROBOT . 13

1.1. Giới thiệu về Open GL .13

1.1.1.Đ c điểm của OpenGLBN. .14

1.1.2. Các thƣ viện hỗ trợ lập trình OpenGL . 20

1.1.3. Các bƣớc tổng quan khi xây dựng ứng dụng đồ họa với OpenGL .21

1.1.4. Xây dựng các đối tƣợng 3 chiều . 23

1.1.5. Quan sát các đối tƣợng 3 chiều . 24

MFC . . .27

1.3. Tìm hiểu phần mềm thiết kế VS 6.0 và AutoCAD ,

SolidWorks . .28

CHƯƠNG II: CÁC BƢỚC XÂY DỰNG BÀI TOÁN PHỎNG 32

2.1. Cách tạo ra một project MFC để mô phỏng. .32

2.2. Khởi tạo và thiết lập các gói thƣ viOpenGL .39

2.3. Thiết kế mô hình Robot trên SolidWork

2007 . .58

2.4. Xây dựng module đọc file .*STL và

.*BDF . . 61

2.4.1. Xây dựng module đọc file .*STL 61

2.4.2 Xây dựng module đọc file .*BDF .. . 65

2.5. Mô phỏng chƣơng trình trên OpenGL.. 74

CHƯƠNG III: CHẠY CHƢƠNG TRÌNH PHỎNG. 75

KẾT LUẬN . 81

Tài liệu tham khảo . 83

pdf86 trang | Chia sẻ: lethao | Lượt xem: 5978 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Lập trình mô phỏng hoạt động cuả rôbốt Scara 4 bậc tự do, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
chóng và dễ dàng hơn. Đ c biệt phiên bản OpenInventer trên hệ điều hành Linux của hãng SGI. 2. Các bƣớc tổng quan khi xây dựng ứng dụng đồ hoạ với thƣ viện OpenG 2.1. Khởi tạo môi trường hỗ trợ cho OpenGL. OpenGL là một thƣ viện đồ hoạ độc lập với hệ thống giao diện của các hệ điều hành, do đó các ứng dụng đồ hoạ sử dụng OpenGL trên các hệ điều hành khác nhau đều phải có một quá trình khởi tạo thích hợp với các hàm xử lí đồ hoạ của OpenGL. Quá trình này đƣợc thực hiện b ng việc gọi một số hàm thích hợp của các ______________________________________________________________________________________ 28 ĐỒ ÁN TỐT NGHIỆP thƣ viện hỗ trợ giao tiếp với OpenGL trong chƣơng trình ứng dụng. Quá trình khởi tạo bao gồm: đ nh ngh a một kiểu cấu trúc dữ liệu đồ hoạ phù hợp với quản lí thông tin về đ nh dạng điểm ảnh và lựa chọn các thông số phù hợp với hệ thống. Các thông số này bao gồm: kiểu điểm ảnh (RGBA hay color index), bộ đệm hoán đổi đơn hay k p (single/double buffer), độ phân giải màu s c, khả năng hỗ trợ bộ đệm chiều sâu (depth buffer), bộ đệm stencil(stencil buffer), bộ đệm tích luỹ (accumulation buffer). Dƣới đây là kiểu cấu trúc dữ liệu đồ hoạ trên các hệ điều hành khác nhau: + Điều khiển Rendering(Control Rendering) Sau khi thiết lập và lựa chọn đ nh dạng điểm ảnh phù hợp với từng hệ thống, tất cả các hệ thống đều phải thực hiện việc điều khiển quá trình tô vẽ (Rendering). Quá trình này thực hiện các việc sau: Tạo và sử dụng ngữ cảnh tô vẽ (rendering context), thực hiện quá trình đồng bộ hoá (synchronizing execution), hoán đổi các bộ đệm (swaping buffers), sử dung các phông hệ thống... + Tô vẽ (rendering) là một quá trình toạ và hển th điểm ảnh hai chiều lên các thiết b kết xuất đồ hoạ nhƣ: màn hình máy tính, máy in... từ các đối tƣợng đồ hoạ ba chiều. + Ngữ cảnh (context): Trong OpenGL, ngữ cảnh là một khái niệm ch một tập hợp đầy đủ các biến trạng thái của OpenGL. + Biến trạng thái: Các trạng thái trong OpenGL nhƣ: đ nh dạng điểm ảnh, màu s c, ánh sáng... đều đƣợc điều khiển b ng các biến trạng thái tƣơng ứng. + Ngữ cảnh tô vẽ (rendering context): Có thể coi ngữ cảnh tô vẽ của OpenGL nhƣ một cổng mà tất cả các hàm của OpenGL phải đi qua để giao tiếp với thiết b đồ hoạ phần cứng. Ngữ cảnh tô vẽ tạo ra đ nh dạng điểm ảnh giống hệt với đ nh dạng điểm ảnh của ngữ cảnh thiết b (divice context) g n với nó. Tuy vậy ngữ cảnh tô vẽ ______________________________________________________________________________________ 29 ĐỒ ÁN TỐT NGHIỆP không giống với ngữ cảnh thiết b . Một ngữ cảnh thiết b lƣu giữ các thông tin của GDI (Graphic Divice Interface), còn một ngữ cảnh tô vẽ lƣu giữ các thông tin của OpenGL. Về m t nào đó, chức năng của ngữ cảnh tô vẽ đối với OpenGL cũng giống nhƣ chức năng của ngữ cảnh thiết b đối với GDI. Một chƣơng trình ứng dụng có thể có nhiều ngữ cảnh tô vẽ. + Quá trình đồng bộ hoá: Quá trình này buộc các hàm của OpenGL hay các hàm đồ hoạ của hệ thống phải chờ cho đến khi hàm trƣớc đó đƣợc thực hiện xong. Điều này có ngh a các lệnh của OpenGL ở trƣớc lệnh chờ của hệ thống sẽ đƣợc đảm bảo đƣợc thực hiện trƣớc các lệnh của hệ thống n m ở sau lệnh chờ đó. Ngƣợc lại các lệnh của OpenGL ở phía sau lệnh chờ của OpenGL ch đƣợc thực hiện khi các lệnh của hệ thống n m ở trƣớc lệnh chờ của OpenGL đã thực hiện xong. + Hoán đổi bộ đệm(Swaping buffer): Mục đích chính của các chƣơng trình đồ hoạ là thể hiện các hình ảnh trên màn hình. Một hình ảnh chuyển động cần có 24 hình/giây. Các hình ảnh trƣớc khi đƣợc đƣa lên màn hình vẽ sẽ đƣợc vẽ lên bộ đệm trung gian, sau đó toàn bộ hình ảnh trên bộ đệm mới đƣợc đƣa ra màn hình cùng một lúc. Nếu hệ thống ch hỗ trợ một bộ đệm, những phần vẽ đầu của khung hình sẽ tồn tại trong suốt 1/24 giây, nhƣng các phần vẽ sau của khung hình sẽ b xoá ngay khi vừa đƣợc vẽ để chuẩn b cho khung hình tiếp theo. Giải pháp để nâng cao chất lƣợng điểm ảnh và hạn chế nhƣợc điểm trên là sử dụng bộ đệm k p. Khi hình ảnh trên bộ đệm thứ nhất đƣợc đƣa ra màn hình trong suốt 1/24 giây, thì cùng lúc, hình ảnh cho khung hình tiếp theo đƣợc vẽ trên bộ đệm kia. Sau 1/24 giây thì các bộ đệm hoán đổi v trí cho nhau. Quá trình liên tục nhƣ vậy sẽ giúp cải thiện chất lƣợng đồ hoạ. 2.2.Xây dựng các đối tượng 3 chiều (3D). Công việc đầu tiên khi tạo cảnh trong OpenGL là xây dựng các mô hình 3 chiều.Một số thƣ viện mở rộng nhƣ GLUT hay AUX cung cấp thêm các đối tƣợng ______________________________________________________________________________________ 30 ĐỒ ÁN TỐT NGHIỆP 3 chiều cơ bản khác nhƣ: Hình nón, hình tứ diện hình thập nh diện...Tuy nhiên trong thực tế các đối tƣợng thực tế nói chung và các cơ cấu máy nói riêng rất phức tạp nhƣng cũng có thể xây dựng từ các đa giác nhỏ cơ sở. Việc xây dựng đối tƣợng 3 chiều phức tạp b ng OpenGL đƣợc thực hiện nhƣ sau : - Thiết kế các mô hình 3 chiều b ng một phần mềm nhỏ hỗ trợ thiết kế chuyên dùng nhƣ AutoCAD hay SolidWork, 3D Max.. - Sử dụng các lệnh trong các phần mềm đó để xuất đối tƣợng 3 chiều ra các dạng tập tin nh phân hay ASCII (American Standard Code for Information Interchange) có chứa các thông tin của đối tƣợng dƣới dạng các đ nh và quy t c nối các đ nh đó thành đa giác. Ví dụ các tập tin *.BDF, *.SLT,*.NVT - Đọc thông tin các đối tƣợng từ các tập tin đó và sử dụng các hàm vẽ đối tƣợng cơ bản của OpenGL xây dựng lại đối tƣợng 3 chiều cơ bản ban đầu. Vì vậy đây chính là cơ sở cho để xây dựng các bài toán mô phỏng hoạt động của ROBOT. Hình 1.10: Các dối tượng 3D được xây dựng lại trên OpenGL. ______________________________________________________________________________________ 31 ĐỒ ÁN TỐT NGHIỆP Hình 1.11: Quá trình Render màu sắc của vật liệu 2.3 .Quan sát các đối tượng 3 chiều Quan sát các đối tƣợng là một khái niệm cho ph p các đối tƣợng hình học 3 chiều hiển th lên màn hình máy tính (hai chiều ) với hiệu ứng không gian ba chiều. Quan sát đối tƣợng gồm các thao tác: Xác đinh v trí quan sát, hƣớng quan sát, phạm vi quan sát, xác đ nh v trí các đối tƣợng trong không gian ba chiều, chọn các ph p chiếu, chọn khung nhìn vv. Quá trình chuyển các đối tƣợng ba chiều trong không gian ba chiều thành các điểm ảnh trên màn hình máy tính có thể chia làm các bƣớc: ______________________________________________________________________________________ 32 ĐỒ ÁN TỐT NGHIỆP + Các ph p biến đổi: biến đổi v trí quan sát hay v trí của vật quan sát. Vì OpenGL xây dựng vật thể trên mô hình không gian 3 chiều nên các ph p biến đổi sẽ đƣợc thực hiện thông qua việc thực hiện các ph p toán trên ma trận. Quá trình thực hiện biến đổi sẽ diễn ra nhƣ sau: Sau khi ta khai báo vật thể thông qua các vertex, ta đã có đƣợc các điểm trong không gian 3 chiều với tọa độ dƣới dạng vector 4 phần tử. Để thực hiện di chuyển, quay, phối cảnh,.. ta cần áp vào các thông số nhƣ góc quay, độ di dời... tƣơng ứng với thay đổi muốn thực hiện. OpenGL sẽ dùng các thông số biến đổi mà ta nhập vào (đƣợc lƣu trữ dƣới dạng ma trận 4x4) và thực hiện các ph p toán biến đổi trên các vector nhập vào. Kết quả là tọa độ các vertex mà chúng ta đã nhập sẽ thay đổi tƣơng ứng. Để chọn ma trận nào sẽ đƣợc thay đổi (muốn thực hiện ph p biến đổi nào), ta dùng hàm : void glMatrixMode(GLenum mode) Mode có thể là: GL_MODELVIEW Các ph p toán ma trận sau đó sẽ tác động lên ma trận modelview GL_PROJECTION Các ph p toán ma trận sau đó sẽ tác động lên ma trận projection GL_TEXTURE Các ph p toán ma trận sau đó sẽ tác động lên ma trận texture Sau khi gọi hàm này và đƣa tham số tƣơng ứng, ma trận đƣợc chọn sẽ trở thành ma trận biến đổi hiện hành và mọi hàm biến đổi tƣơng ứng sẽ tác động lên ma trận đó. Để đƣa một ma trận biến đổi hiện hành về ma trận đơn v , dùng hàm: void glLoadIdentity(void) Để đƣa giá tr mới vào cho ma trận biến đổi hiện hành, dùng hàm: void glLoadMatrix*() Để áp các phép biến đổi trực tiếp khỏi gọi hàm thì ta cung cấp một ma trận và gọi glMulMatrix*() với tham số là ma trận biến đổi. Hàm này sẽ nhân ma trận tham số vào ma trận biến đổi hiện hành (ví dụ ma trận tham số là và ma trận biến đổi ______________________________________________________________________________________ 33 ĐỒ ÁN TỐT NGHIỆP hiện hành là C thì sau khi nhân, kết quả ma trận hiện hành là C ). Chú ý: khi lập trình OpenG trong C, khi khai báo ma trận 4x4 để thực hiện thay đổi ma trận biến đổi hiện hành thì M[i][j] chỉ vị trí phần tử cột i hàng j, khác với quan niệm thông thƣờng trong C là hàng i cột j, để tránh nhầm lẫn, tốt nhất là khai báo mảng 16 phần tử + Chọn các ph p chiếu: trực giao hay phối cảnh. - Ph p chiếu trực giao : Vật thể ở gần ống kính (ở đây là điểm nhìn) thì thấy lớn và ngƣợc lại. OpenGL cho ta một hàm để xác đ nh không gian nhìn. void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); - Ph p chiếu phối cảnh: Các đƣờng thẳng song song trong không gian thì khi thể hiện lên màn hình cũng sẽ song song. Nói cách khác, không gian nhìn đƣợc xác đ nh bởi một hình hộp chữ nhật. Để thiết lập chế độ quan sát này, ta dùng hàm void glOrtho(GLdouble left, GLdouble right, GLdouble bottom,GLdouble top, GLdouble near, GLdouble far); Hình 1.12: Phép chiếu trực giao ______________________________________________________________________________________ 34 ĐỒ ÁN TỐT NGHIỆP Các tham số có ý ngh a tƣơng tự nhƣ hàm glFrustum(). Khi ch cần chiếu hình 2 chiều, có thể gọi void glOrtho2D(). Hàm này ch nhận 4 tham số đầu có ý ngh a giống glOrtho(), nhƣng khối hộp không gian nhìn có giá tr z dao động trong đoạn [-1.0,1.0]. Tuy nhiên, vì là hình 2 chiều nên giá tr z luôn b ng 0 và do đó không b mất hình. + Chọn khung nhìn: (Viewport) Viewport là một khung hình chữ nhật trong cửa sổ chƣơng trình vẽ. Nó là nơi mà vật thể sẽ đƣợc vẽ vào (có thể có kích thƣớc nhỏ hơn, b ng ho c lớn hơn kích thƣớc cửa sổ chƣơng trình). Hàm void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) xác đ nh một khung nhìn có tọa độ góc trái dƣới là (x,y) so với góc trái dƣới của cửa sổ và đƣợc tính b ng pixel; width và height xác đ nh kích thƣớc của khung nhìn. M c đ nh, viewport có kích thƣớc b ng kich thƣớc cửa sổ. Tỷ lệ giữa chiều dài và chiều rộng của viewport nên b ng với t lệ tƣơng ứng trong không gian nhìn mà ta đã xác đ nh thông qua các hàm glFrustum() ho c glOrtho(), nếu không hình ảnh sẽ b biến dạng Hình 1.13: Phép chiếu phối cảnh ______________________________________________________________________________________ 35 ĐỒ ÁN TỐT NGHIỆP + Sự biến đổi v trí quan sát và v trí vật thể. Do sự biến đổi v trí quan sát và v trí vật thể có liên quan tƣơng đối với nhau nên trong OpenGL chúng đƣợc gom vào một ma trận biến đổi (ch dành cho vật thể). M c đ nh ban đầu là điểm nhìn và vật thể ở chung một chỗ tại gốc hệ trục tọa độ và phƣơng nhìn theo hƣớng âm của trục z (hƣớng vào bean trong màn hình). OpenGL cung cấp 3 hàm để thay đổi góc nhìn và hƣớng nhìn: glTranslate*() (di chuyển), glRotate*() (quay), glScale*() (dùng để k o dãn ho c co nhỏ vật thể). Các hàm này tác động lên tọa độ vật thể. Các thành phần của hàm glTranslate(): void glTranslate{fd} (TYPE x, TYPE y, TYPE z): dời vật thể đi một đoạn x, y, và z theo phương các trục tọa độ tương ứng. Các thành phần của hàm glRotate() : void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z): quay vật thể 1 góc angle độ theo chiều ngược chiều kim đồng hồ quanh trục có vector chỉ phương xác định từ gốc trục toạ độ (0,0,0) và điểm (x,y,z).Ví dụ: glRatated(45,0,0,1); Các thành phần của hàm glScale(): void glScale{fd}(TYPEx, TYPE y, TYPEz): co dãn vật thể theo các phương Ox, Oy, Oz một lượng tương ứng. Nếu x hoặc y hoặc z âm thì vật thể sẽ bị lật lại đối xứng theo trục có độ giãn âm.Ví dụ: glScalef(2.0,-0.5,1.0); Hình 1.14: Hệ tọa dộ chuẩn trongOPENGL ______________________________________________________________________________________ 36 ĐỒ ÁN TỐT NGHIỆP Hình 1.15: Các phép biến đổi trong OpenGL - Tạo chuyển động cho các đối tƣợng. Nguyên t c chung để tạo các hình ảnhchuyển động là vẽ và xoá liên tục các v trí khác nhau của đối tƣợng chuyển động. Việc phân tích, tính toán v trí các vật r n thuộc cơ hệ phải đƣợc thực hiện trƣớc khi mô phỏng. Quá trình mô phỏng thực hiện vẽ các v trí đã đƣợc tính toán trƣớc. Không nên thực hiện song song vừa vẽ, vừa tính toán đối với các chuyển động đòi hỏi tính toán phức tạp ho c cấu hình máy tính không đủ cao. Chuyển động của các vật r n đƣợc cập nhập theo thời gian vì vậy việc tính toán các v trí cũng phải đƣợc cập nhập theo thời gian. Theo lý thuyết hệ nhiều vật, v trí của một vật r n trong m t phẳng ho c trong không gian có thể xác đ nh b ng các ma trận côsin ch phƣơng so với hệ toạ độ cố đ nh. Trong OpenGL v trí của đối tƣợng cũng đƣợc thay đổi b ng ph p nhân các toạ độ của đối tƣợng với ma trận hiện hành. Giá tr của các ma trận hiện hành đƣợc biến đổi b ng các ph p biến hình nhƣ : t nh tiến, quay. 3. Giới thiệu về ngôn ngữ lập trình Visual C++ và các ứng dụng của FC. ______________________________________________________________________________________ 37 ĐỒ ÁN TỐT NGHIỆP Visual C ++ là một trong các ngôn ngữ lập trình thuộc dòng Visual Studio của hãng Microsoft, 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à đơn giả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ập trì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 là lớp nền tảng của Microsoft (Microsoft Foundation Classes), là một công cụ mạnh trong lập trình ứng dụng cho hầu hết các l nh vực vì nó có giao diện đáp ứng mọi nhu cầu của ngƣời sử dụng trong việc thiết kế các giao diện của chƣơng trình mô phỏng. ______________________________________________________________________________________ 38 ĐỒ ÁN TỐT NGHIỆP CHƢƠNG 2 XÂY DỰNG CHƢƠNG TRÌNH PHỎNG Các bƣớc xây dựng bài toán mô phỏng gồm có: - Cách tạo ra project MFC để thực hiện quá trình mô phỏng. - Khởi tạo các gói thƣ viện của OpenGL. - Thiết kế mô hình trên Solidworks. - Chuyển mô hình sang tệp tin *.STL. - Xây dựng Module đọc File *.STL. - Xây dựng Module đọc File quỹ đạo đã số hóa trên AutoCAD. - Chạy file quỹ đạo đã số hóa trên AutoCAD. - Mô phỏng trên OpenGL. 2.1 Cách tạo ra một Project FC để mô phỏng hoạt động + Nhƣ chƣơng 1 em đã trình bày về phần mềm Visual 6.0 bây giờ ta tạo 1 Project MFC nhƣ sau : - Chọn File -> New sau đó chọn Tab Projects và sẽ hiện ra các Project đƣợc lập trình trên Visual C++ 6.0.Ở đây ta chọn loại MFC AppWizard(exe).Trong Project name ta g tên của dự án ở đây là “DoanTinhoc” nhƣ hình vẽ ______________________________________________________________________________________ 39 ĐỒ ÁN TỐT NGHIỆP Hình 2.1 : Bắt đầu thiết lập project MFC Các bƣớc tiếp theo để thiết lập project 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ó 1 tài liệu đƣợc mở và hiện hành, để cho ngƣời dùng thao tác trên nó.Trong đồ án tin học này chủ yếu là mô phỏng hoạt động của Rôbốt nên ta sử dụng kiểu đơn tài liệu. ______________________________________________________________________________________ 40 ĐỒ ÁN TỐT NGHIỆP Hình 2.2 : Thiết lập 1 Bước 2 : Ta chọn nhƣ hình vẽ ở dƣới và do ứng dụng không sử lý Dữ liệu nên ở Database Support ta chọn None. ______________________________________________________________________________________ 41 ĐỒ ÁN TỐT NGHIỆP Hình 2.3 : Thiết lập 2 Bước 3 : Ta chọn nhƣ hình vẽ dƣới đây - Chọn None vì trong ứng dụng không sử dụng tài liệu phức hợp. Hình 2.3 : Thiết lập 2 H 2.4 : T ế 3 Bước 4 : Đến bƣớc số 4 ta 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 and Printer Preview : No – Không in ấn gì - 3D controls : Yes – Có điều khiển nổi ______________________________________________________________________________________ 42 ĐỒ ÁN TỐT NGHIỆP - Toolbars look : Normal – Dạng thanh công cụ bình thƣờng. Hình 2.3 : Thiết lập 4 Bước 5 : Chọn các thiết lập nhƣ sau : - MFC Standard : dạng chuẩn của MFC - MFC Library : As a shared DLL – Thƣ viện của MFC – có chia sẻ thƣ viện liên kết động. ______________________________________________________________________________________ 43 ĐỒ ÁN TỐT NGHIỆP Hình 2.6 : Thiết lập 5 Bước 6 : Finish – Hoàn tất việc thiết lập. ______________________________________________________________________________________ 44 ĐỒ ÁN TỐT NGHIỆP Hình 2.7 : Hoàn thành thiết lập Project MFC Sau khi khởi tạo xong ta chạy thử chƣơng trình thì thu đƣợc giao diện của 1 project MFC cơ bản nhƣ hình vẽ dƣới đây. ______________________________________________________________________________________ 45 ĐỒ ÁN TỐT NGHIỆP Hình 2.8 : Chạy thử Project MFC Nhƣ vậy có thể thấy r MFC đã làm gì cho ta .M c dù chƣa xây dựng code chƣơng trình nhƣng MFC đã cung cấp sẵn giao diện của một ứng dụng chuẩn trong môi trƣờng Windows.Mà Visual C++ là một ngôn ngữ lập trình hƣớng đối tƣợng, cho nên mọi ứng dụng đều đƣợc xây dựng trên cơ sở của các lớp.Khi một ứng dụng đƣợc tạo ra nó có các lớp cơ sở sau : Hình 2.9 : Các lớp ứng dụng trong MFC Chức năng của các lớp cơ sở của ứng dụng MFC nhƣ sau : - 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ột thiế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ông cần quan tâm nhiều đến lớp này. ______________________________________________________________________________________ 46 ĐỒ ÁN TỐT NGHIỆP - 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 trong lớ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. 2.2- Khởi tạo và Thiết lập các gói thƣ viện của OpenGL Mục đích chính của chƣơng trình là mô phỏng quá trình hoạt động của Robot, vì vậy cần thiết phải có một môi trƣờng đồ họa.Khi mới tạo ra một dự án MFC thì ứng dụng ch cung cấp cho ta khung giao diện chuẩn dạng cửa sổ,và môi trƣờng làm việc chủ yếu là thao tác với CSDL.Do đó chúng ta cần phải tiến hành khởi tạo một môi trƣờng đồ họa, cụ thể trong đồ án này em dùng OpenGL. Cũng giốn nhƣ GDI cần một ngữ cảnh thiết b (Device Context – DC )để vẽ, OpenGL cũng cần có một ngữ cảnh biểu diễn (Rendering Context – RC) .Tuy nhiên, không giống nhƣ GDI là mỗi lệnh GDI yêu cầu một DC để vẽ, thì OpenGL lại dùng khái niệm một RC hiện hành. Khi một ngữ cảnh biểu diễn đƣợc hiện hành trong một thread (luồng), mọi lời gọi OpenGL trong thread sẽ sử dụng cùng một ngữ cảnh biểu diễn hiện hành.Trong khi rất nhiều ngữ cảnh biểu diễn có thể, đƣợc sử dụng để vẽ vào trong một cửa sổ đơn, thì ch có một ngữ cảnh duy nhất đƣợc hiện hành tại một thời điểm trong thread đơn. Để 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 nhƣ 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. ______________________________________________________________________________________ 47 ĐỒ ÁN TỐT NGHIỆP 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 Rôbốt thì ta phải thiết lập môi trƣờng đồ họa. Hình 2.10 : Thiết lập các gói thư viện OpenGL Để tạo đƣợc ngữ cảnh biểu diễn của OpenGL thì trƣớc tiên ta phải include(bao gồ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 glaux.lib” nhƣ hình vẽ trên và chọn nút OK. Sau đó ta mở tệp “stdafx.h” ra và thêm vào các dòng code sau : #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include // MFC core and standard components #include // MFC extensions //------------------------------------------------------------------------ // Các đọa mã thêm vào ở đây . #include //OpenGL Main Library Header #include //OpenGL Utility Library Header #include //----------------------------------------------------------------------- ______________________________________________________________________________________ 48 ĐỒ ÁN TỐT NGHIỆP #include // MFC Automation classes #include // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT Open GL yêu cầu cửa sổ phải có kiểu WS_CLIPCHILDREN và WS_CLIPSIBLINGS vì vậy cần phải thêm vào hàm PreCreateWindow(CREATESTRUCT& cs) của lớp CDoanTinhocView nhƣ sau : BOOL CDoanTinhocView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); } Bây giờ chúng ta sẽ thực hiện bƣớc thứ nhất, tạo đ nh dạng điểm ảnh.Đ nh dạng điểm ảnh sẽ miêu tả cách lƣu trữ trong bộ nhớ các phần tử đồ họa mà Windows hiển th .Thông số đƣợc điều khiển bởi đ nh dạng điểm ảnh bao gồm độ sâu màu, phƣơng pháp bộ đệm và giao diện đồ họa đƣợc hỗ trợ. Đầu tiên tạo một protected member function trong lớp CDoanTinhocView có tên là BOOL CDoanTinhocView::SetWindowPixelFormat(HDC hDC) có nội dung nhƣ sau : //------------------------------------------- Code here ---------------------- --------// BOOL CDoanTinhocView::SetWindowPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pixelDesc; pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); pixelDesc.nVersion = 1; pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pixelDesc.iPixelType = PFD_TYPE_RGBA; pixelDesc.cColorBits = 32; pixelDesc.cRedBits = 0; pixelDesc.cRedShift = 0; pixelDesc.cGreenBits = 0; pixelDesc.cGreenShift = 0; pixelDesc.cBlueBits=0; pixelDesc.cBlueShift=0; pixelDesc.cAlphaBits=0; pixelDesc.cAlphaShift=0; pixelDesc.cAccumBits=0; pixelDesc.cAccumRedBits=0; pixelDesc.cAccumGreenBits=0; pixelDesc.cAccumBlueBits=0; pixelDesc.cAccumAlphaBits=0; ______________________________________________________________________________________ 49 ĐỒ ÁN TỐT NGHIỆP pixelDesc.cDepthBits=32; pixelDesc.cStencilBits=0; pixelDesc.cAuxBuffers=0; pixelDesc.iLayerType= PFD_MAIN_PLANE; pixelDesc.bReserved=0; pixelDesc.dwLayerMask=0; pixelDesc.dwVisibleMask=0; pixelDesc.dwDamageMask=0; m_GLPixelIndex = ChoosePixelFormat( hDC,&pixelDesc); if (m_GLPixelIndex==0) { 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; // glCullFace(GL_BACK); } Tiếp theo chúng ta thêm vào protected member variable trong lớp CDoanTinhocView: int m_GLPixelIndex; // protected variable Sau đó, mở ClassWizard, thêm vào hàm OnCreate đáp ứng thông báo VM_CREATE nhƣ sau: ______________________________________________________________________________________ 50 ĐỒ ÁN TỐT NGHIỆP Hình 2.11 : Chọn hàm Oncreate() để thiết lập OpenGL Sau khi các đ nh dạng điểm đƣợc thiết lập, tất cả những gì chúng ta cần làm bây giờ là tạo ra một ngữ cảnh biểu diễn và làm cho nó hiện hành. B t đầu thêm vào một protected member function vào lớp CDoanTinhocView có tên là : //----------------------------------------------------------------------// BOOL CDoanTinhocView::CreateViewGLContext(HDC hDC) { m_hGLContext= wglCreateContext(hDC); if(m_hGLContext == NULL) return FALSE; if (wglMakeCurrent(hDC,m_hGLContext)== FALSE) return FALSE; return TRUE; } //------------------------------------------------------------------------// và ta thêm biến thành viên p

Các file đính kèm theo tài liệu này:

  • pdf74574641-Do-an-Tot-Nghiep-31-05-2009.pdf