Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
89,32 KB
Nội dung
Bùi Minh Trường Lập trình Opengl với thư viện AUX Bùi Minh Trường Lập trình Opengl với thư viện AUX Chào mừng bạn đón đọc đầu sách từ dự án sách cho thiết bị di động Nguồn: http://vnthuquan.net/ Tạo ebook: Nguyễn Kim Vỹ MỤC LỤC 10 Bùi Minh Trường Lập trình Opengl với thư viện AUX (Tài liệu tham khảo trường đại học wakayama Nhật) I-Giới thiệu Opengl: Opengl thư viện lập trình đồ hoạ 3D, bạn muốn biết thêm xem trang chủ opengl Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Lập trình Opengl với thư viện AUX Bùi Minh Trường Org.Bài viết dành cho bạn biết opengl gì, cho việc học đồ hoạ với opengl sau II-Opengl Windows: Lập trình opengl Windows Visual C, bạn phải sử dụng ba thư viện sau glaux.lib glu32.lib opengl32.lib.Trong Visual C muốn link tới thư viện bạn làm sau: menu(trình đơn) chọn Project sau chọn setting cuối tab link bạn dánh tên thư viện vào(nhớ có dấu cách tên thư viện).Nếu bạn thích sử dụng phím tắt việc bấm Alt+F7 kết trên.Một điều quan trọng tạo project bạn phải chọn Window32 console application.Từ bạn sẵn sàng viết mã lệnh (Nên nhớ bạn khơng phải thêm VC có đầy đủ tơi đề cập trên) III-Tạo cửa sổ opengl: Dưới mã nguồn cho chương trình bạn để tạo cửa sổ.Hãy lưu với tên tuỳ bạn(ví dụ hello.c truyền thống) 1-Chương trình bạn: /*filename: hello.c*/ /*Chương trình tạo cửa sổ opengl*/ #ifdef unix /*Phần dùng để xác định môi trường làm việc bạn*/ #include #include “aux.h“ /*Nó xác định bạn biên dịch chương trình unix*/ /*hay Windows, với lập trình viên windows bạn có #define CALLBACK */ /*thể bỏ phần bên lấy phần in đậm*/ #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitWindow(argv[0]); return 0; } Lệnh auxInitWindow(string); có tác dụng tạo cửa sổ mới, string tiêu đề cửa sổ đó, bạn viết tiều đề tuỳ bạn Chương trình sau biên dịch cửa sổ đóng ngay, windows Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX bạn chạy nhanh bạn khơng nhìn thấy chi hết Sau bắt Window dùng lại chừng giây để quan sát.Cũng với mã lệnh bạn cần thêm dòng lệnh: sleep(số_giây_muốn_xem x 1000);(tức lệnh bắt window tạm dừng vòng phần nghìn giây) Bùi Minh Trường Lập trình Opengl với thư viện AUX (Tài liệu tham khảo trường đại học wakayama Nhật) 2-Theo dõi Window /*file name: hello1s.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitWindow(argv[0]); /*dòng lệnh , window vòng giây*/ Sleep(1000); /*dòng lệnh mới*/ return 0; } Trong phần source code mã nguồn nằm file hello1s.cpp 3-Xố hình opengl Tiếp theo giới thiệu với bạn cách xố hình opengl.Dưới mã nguồn: Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX /*filename: clear.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitWindow(argv[0]); /*Những dòng lệnh mới*/ glClearColor(1.0,1.0,1.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glFlush(); /*Những dòng lệnh mới*/ Sleep(1000); return 0; } Các lệnh glClearColor(), glClear(),glFush() lệnh Opengl.glClearColor() có nhiệm vụ chọn màu để xoá window, bạn dễ dàng nhận có tham số, tham số RGBA( red green blue alpha).Không giống với hàm RGB() Win32 API , tham số có giá trị khoảng 0.0f đến 1.0f(kiểu float).Ba tham số đầu màu đỏ xanh xanh da trời, tham số thứ độ sáng tối window.Bây thay đổi giá trị màu xem thử!Hàm glClear() thực xố window, có số xác định.Có trường hợp có hàm chưa chạy đến kết thúc chương trình, để tránh trường hợp hàm glFlush()được gọi, thực tất hàm chưa chạy kết thúc chương trình Bùi Minh Trường Lập trình Opengl với thư viện AUX Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX (Tài liệu tham khảo trường đại học wakayama Nhật) 4-Vẽ hình opengl Từ trước đến nói cách tạo xố cửa sổ, thực vẽ số hình đơn giản: /*filename line.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitWindow(argv[0]); glClearColor(1.0,1.0,1.0,0.0); glClear(GL_COLOR_BUFFER_BIT); /*những dòng lệnh mới*/ glBegin(GL_LINE_LOOP); glVertex2d(0.1,0.1); glVertex2d(0.9,0.1); glVertex2d(0.9,0.9); glVertex2d(0.1,0.9); /*những dòng lệnh mới*/ glEnd(); glFlush(); Sleep(1000); return 0; } Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX Tất hình khối vẽ opengl nằm hai dòng lệnh glBegin() glEnd() (Hơi giống với pascal- bạn học pascal dễ hiểu nhé!).Có thể có nhiều cặp dòng lệnh vậy, tức bạn viết hàm vẽ khác dùng cặp câu lệnh hàm đó.Tham số glBegin() GL_LINE_LOOP có nghĩa bảo window vẽ đường khép kín điểm đầu trùng với điểm cuối Dưới số số bản: Hằng số ý nghĩa GL_POINT Vẽ điểm GL_LINÉ Vẽ đường thẳng nối hai điểm GL_LINE_STRIP Tập hợp đoạn đựơc nối với GL_LINE_LOOP Đường gấp khúc khép kín GL_TRIANGLES Vẽ hình tam giác GL_QUADS Vẽ tứ giác GL_TRIANGLES_STRIP Vẽ tập hợp tam giác liền nhau, chung cạnh GL_QUAD_STRIP Vẽ tập hợp tứ giác liền nhau, chung cạnh GL_TRIANGLE_FAN Vẽ hình quạt Dưới tranh tồn cảnh thơng số Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Lập trình Opengl với thư viện AUX Bùi Minh Trường Hàm glVertex2d() xác định điểm hai chiều.Bạn nên biết số tiền tố hàm opengl, hàm dùng thư viện bắt đầu tên thư viện ví dụ dùng hàm opengl thường bắt đầu với gl, hàm dùng thư viện glut bắt đầu với glu hàm dùng thư viện aux bắt đầu với aux Các hàm có hậu tố ví dụ glVertex2d() vẽ điểm chiều, glVertex3d() vẽ điểm chiều, học bạn phát nhiều 5-Sử dụng màu vẽ: Tiếp theo hướng dẫn bạn cách sử dụng màu để vẽ cách thể Dưới mã nguồn: /*filename: color1.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitDisplayMode(AUX_RGBA); /*hàm mới*/ auxInitWindow(argv[0]); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3d(1.0,0.0,0.0); /*hàm mới*/ glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); /*tham số mới*/ glVertex2d(0.1,0.1); glVertex2d(0.9,0.1); glVertex2d(0.9,0.9); glVertex2d(0.1,0.9); glEnd(); Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Lập trình Opengl với thư viện AUX Bùi Minh Trường glFlush(); Sleep(1000); return 0; } Hàm auxInitDisplayMode() báo với window chọn cách hiển thị mà vẽ tới đây, tham số AUX_RGBA mode RGBA mà đề cập trên.Hàm glColor3d() cho phép chọn màu vẽ, tham số red green blue giá trị kiểu double bạn muốn dùng kiểu float có hàm glColor3f(), hai kiểu giá trị màu nằm khoảng đến 1.Chú ý chương trình đổi tham số cho hàm glBegin(), vẽ tứ giác, chương trình hình vng Trong phần tơi muốn trình bày với bạn kỹ thuật nữa, chương trình cho nhìn thấy màu đỏ đặt màu trước vẽ Để tạo nhiều màu ấn tượng bạn cài đặt cài đặt lại hàm glColor3d() vẽ Dưới mã nguồn: /*filename: color2.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif int main(int argc, char *argv[]) { auxInitDisplayMode(AUX_RGBA); auxInitWindow(argv[0]); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3d(1.0,0.0,0.0); /*hàm chuyển xuống đây*/ Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX glVertex2d(0.1,0.1); glColor3d(0.0,1.0,0.0); /*tham số cho hàm*/ glVertex2d(0.9,0.1); glColor3d(0.0,0.0,1.0); /*tham số cho hàm*/ glVertex2d(0.9,0.9); glColor3d(1.0,0.0,1.0); /*tham số cho hàm*/ glVertex2d(0.1,0.9); glEnd(); glFlush(); Sleep(1000); return 0; } Biên dịch chạy thử bạn có hình vng trơng đẹp mắt, tiếp tục học, tạo nhiều hiệu ứng ấn tượng nhiều Nói thêm chút cách sử dụng hàm, với hậu tố: ví dụ với hàm glVertex*() glColor*(), hay hàm khác có dấu hoa thị * có nhiều hậu tố.Và có cấu tạo sau: lấy ví dụ hàm glVertex*() Có hàm glVertex4dv(Gldouble x,Gldouble y,Gldouble z,Gldouble w) số thể hàm có tham số, chữ d thể tham số có giá trị double(ngồi float,int,short, unsigned int, unsigned short, unsigned char,char) chữ v thể dùng pointer.Các bạn cần hiểu qua vậy, sau nói rõ Bùi Minh Trường Lập trình Opengl với thư viện AUX (Tài liệu tham khảo trường đại học wakayama Nhật) 6-Giao diện cửa sổ quản lý cửa sổ: Với chương trình cần vẽ đơn giản bạn dùng chương trình trên, với chương trình phức tạp sau viết thể nữa.Dưới tơi trình bày với bạn cấu trúc chương trình opengl Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Bùi Minh Trường Lập trình Opengl với thư viện AUX Trước hết từ khoá CALLBACK, bạn lập trinh WIN API hiểu rõ lệnh này, nói đơn giản sử dụng thư viện AUX ta phải dùng từ khố để định nó.Các chương trình bên viết dùng lệnh Sleep(1000) để bắt window dừng lại cho theo dõi, tới làm cách chuyên nghiệp dùng hàm auxMailLoop() thân hàm main() – hàm chương trình.Tham số hàm trỏ trỏ đến hàm mà vẽ , thị muốn(trong chương trình tham số hàm draw()).Điều xảy người dùng thay đổi kích cỡ cửa sổ? Để thực hiên điều dùng hàm tương tự hàm auxMainLoop(),đó hàm auxReshapeFunc(), tham số trỏ đến hàm mà thay đơi thơng số cửa sổ, tham số chương trình hàm resize().Nếu bạn học qua đồ hoạ máy tính dễ dàng hiểu toạ độ đồ hoạ, hàm glLoadIdentity() có nhiệm vụ thiết định ma trận toạ độ ma trận đơn vị Mã nguồn cho rõ hơn: /*filename: interface.cpp*/ #ifdef unix #include #include "aux.h" #define CALLBACK #else #include #include #include #endif GLvoid CALLBACK draw(void){ /*chú ý bạn khơng cần chữ void */ glClearColor(0.0,0.0,0.0,0.0); /*khi lập trình với VC, Glvoid kiểu */ glClear(GL_COLOR_BUFFER_BIT);/*hàm opengl, tương tụ */ glClearColor(0.0,0.0,0.0,0.0); /*như void C hay C++*/ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3d(1.0,0.0,0.0); glVertex2d(0.1,0.1); glColor3d(0.0,1.0,0.0); glVertex2d(0.9,0.1); glColor3d(0.0,0.0,1.0); Tạo Ebook: Nguyễn Kim Vỹ Nguồn truyện: vnthuquan.net Lập trình Opengl với thư viện AUX Bùi Minh Trường glBegin(GL_QUADS); for(i=0;i