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
86 trang |
Chia sẻ: lethao | Lượt xem: 5978 | Lượt tải: 2
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:
- 74574641-Do-an-Tot-Nghiep-31-05-2009.pdf