LẬP TRÌNH ĐỒ HỌA ỨNG DỤNG THƯ VIỆN OPENGL TRÊN LINUX

37 1.9K 7
LẬP TRÌNH ĐỒ HỌA  ỨNG DỤNG THƯ VIỆN OPENGL TRÊN LINUX

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Ngày nay đồ họa máy tính đóng một vai trò quan trong, quyết định không nhỏ đến sự thành công hay thất bại của một sản phẩm phần mềm.

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN MẠNG VÀ TRUYỀN THÔNG  BÀI TẬP LỚN CHUYÊN ĐỀ II ĐỀ TÀI: LẬP TRÌNH ĐỒ HỌA ỨNG DỤNG THƯ VIỆN OPENGL TRÊN LINUX Sinh viên : Lê Phương Tiến 07T2 Hà Phước Việt 07T1 Cán bộ hướng dẫn : Nguyễn Tấn Khôi Đà Nẵng 2010 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 2 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 3 MỤC LỤC TỔNG QUAN VỀ ĐỀ TÀI CHƯƠNG 1. GIỚI THIỆU THƯ VIỆN OPENGL VÀ CÁCH CÀI ĐẶT 5 1.1. GIỚI THIỆU .5 1.2. CÁCH CÀI ĐẶT 6 1.2.1. Môi trường cài đặt .6 1.2.2. Cài đặt 6 1.2.3. Sử dụng thư viện openGL 7 CHƯƠNG 2. CƠ BẢN VỀ OPENGL .7 2.1. CẤU TRÚC CHƯƠNG TRÌNH OPENGL ĐƠN GIẢN .8 2.1.1. Khởi tạo .8 2.1.2. Tạo của sổ 9 2.1.3. Chức năng hiển thị .9 2.1.4. Chức năng định lại hình .9 2.1.5. Vòng lặp chính .10 2.1.6. Mã nguồn 1 chương trình đơn giản 10 2.2. DỮ LIỆU VÀ THUỘC TÍNH .11 2.2.1. Cú pháp lệnh của OpenGL .11 2.2.2. Máy trạng thái 13 2.3. CÁC THƯ VIỆN LIÊN QUAN .13 2.4. HOẠT CẢNH (ANIMATION ) .14 CHƯƠNG 3. CÁC KỸ THUẬT OPENGL CƠ BẢN .15 3.1. CÁC ĐỐI TƯỢNG HÌNH HỌC ( GEOMETRIC OBJECTS ) .15 3.1.1. Points, Lines and Polygons 17 3.1.2. Vẽ các đối tượng không gian ( Drawing 3-D Objects ) 19 3.1.3. Các phép biến đổi ( Transformations ) .19 3.1.4. Danh sách hiển thị ( Display Lists ) .20 3.2. KHUNG HIỂN THỊ ( VIEWING ) .22 3.2.1. Màu sắc ( Color ) .22 3.2.2. Độ bóng ( Shading ) 23 3.2.3. Khung hình biến đổi ( Viewing Transformation ) 23 3.2.4. Phép chiếu ( Projection ) 24 3.2.5. Thao tác ngăn xếp ma trận ( Manipulating the Matrix Stacks ) 25 3.2.6. Ánh sáng ( Light ) 26 3.2.7. Khung quan sát biến đổi ( Viewport Transformation ) .27 CHƯƠNG 4. CHƯƠNG TRÌNH DEMO 27 4.1. CÁC KỸ THUẬT SỬ DỤNG CHO CHƯƠNG TRÌNH .27 4.2. MÃ NGUỒN .28 4.3. KẾT QUẢ CHẠY .35 GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 4 TỔNG QUAN VỀ ĐỀ TÀI 1. Bối cảnh và lý do thực hiện đề tài Ngày nay đồ họa máy tính đóng một vai trò quan trong, quyết định không nhỏ đến sự thành công hay thất bại của một sản phẩm phần mềm. Sản phẩm làm ra ngoài tính năng đáp ứng được nhu cầu sử dụng thì mẫu giao diện đồ họa phải bắt mắt, than thiện với người sử dụng, có như thế thì sản phẩm mới có thể thành công. Ngoài các sản phẩm phần mềm thì một xu hướng mới nữa đó là các bộ phim hoạt hình 3D cũng đang rất được quan tâm. Nhận thấy tìm năng vả khả năng phát khiển mạnh của công nghiệp đồ họa, chúng em lựa chọn đề tài: Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux. Đây là một thư viên hỗ trợ các công cụ mạnh mẽ để vẽ và xử lý các đối tượng đồ họa. 2. Mục tiêu đề tài • Tìm hiểu lý thuyết thư viện OpenGL • Xây dựng chương trình đồ họa demo với OpenGL GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 5 Chương 1. GIỚI THIỆU THƯ VIỆN OPENGL CÁCH CÀI ĐẶT 1.1. Giới thiệu OpenGL là một cấp thấp thư viện đồ họa đặc điểm kỹ thuật. Nó làm cho có sẵn cho các lập trình một nhóm nhỏ các hình học cơ bản - điểm, đường, đa giác, hình ảnh, và ảnh bitmap. OpenGL cung cấp một bộ các lệnh cho phép các đặc điểm kỹ thuật của các đối tượng hình học trong hai hoặc ba chiều, sử dụng bản cung cấp, cùng với các lệnh để điều khiển các đối tượng này là kết xuất (GLUT). Từ bản vẽ lệnh OpenGL được giới hạn bởi các hình học đơn giản (điểm, đường, và đa giác), các OpenGL Utility Toolkit đã được tạo ra để trợ giúp trong việc phát triển phức tạp hơn các đối tượng ba chiều như một quả cầu, một xuyến, và thậm chí một ấm trà. GLUT có thể không được thỏa đáng cho đầy đủ tính năng ứng dụng OpenGL, nhưng nó là một điểm khởi đầu hữu ích cho việc học OpenGL. GLUT được thiết kế để lấp đầy sự cần thiết cho một hệ thống độc lập lập trình giao diện cửa sổ cho các chương trình OpenGL. Giao diện được thiết kế đơn giản nhưng vẫn đáp ứng các nhu cầu của các chương trình hữu ích OpenGL. Loại bỏ các hoạt động hệ thống cửa sổ từ OpenGL là một quyết định âm thanh bởi vì nó cho phép hệ thống đồ họa OpenGL được retargeted cho các hệ thống khác nhau bao gồm nhưng đắt tiền máy trạm đồ họa mạnh mẽ cũng như sản xuất hàng loạt hệ thống đồ họa như trò chơi video, hộp set-top cho truyền hình tương tác, và máy tính cá nhân. GLUT đơn giản hóa việc thực hiện các chương trình sử dụng OpenGL rendering. Việc áp dụng dư thừa giao diện lập trình (API) đòi hỏi vài thói quen rất để hiển thị một cảnh kết xuất bằng cách sử dụng đồ họa OpenGL.Việc dư thừa thói quen cũng có thông số tương đối ít. GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 6 1.2. Cách cài đặt 1.2.1. Môi trường cài đặt Quá trình tìm hiểu và viết chương trình được thực hiện trên môi trường Linux phiên bản Ubuntu 10.10. OpenGL là một bộ thư viện mở có thể sử dụng ở môi cả môi trường Windows nhưng Ubuntu là một hệ điều hành mở, kho tài liệu phong phú, luôn có một cộng động sẵn sang giúp đỡ khi có vẫn đề khó khăn. Các gói thư viện của openGL : GLUT,AUX, XLIB… 1.2.2. Cài đặt • Cài đặt trình biên dịch C/C++ GNU: tại terminal gõ Sudo apt-get install gcc Sudo apt-get install g++ Sau khi cài đặt kiểm tra lại thử đã có hay chưa GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 7 • Cài đặt bộ thư viện Opengl Administrator->synaptic->search với từ khóa opengl: Lựa chọn và make các file cần thiết và apply 1.2.3. Sử dụng thư viện openGL • Cách biên dịch 1 bài C đơn giản • Cách biên dịch C có sử dụng thư viện OpenGL  Tại terminal gõ: gcc [filenam].c –o [filenam] –lglut –lGLU –lGL  Dùng makefile : vào terminal đưa về thư mục chứa code và makefile  gõ make là xong Chương 2. CƠ BẢN VỀ OPENGL GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 8 2.1. Cấu trúc chương trình openGL đơn giản 2.1.1. Khởi tạo Điều đầu tiên chúng ta cần làm là gọi glutInit () làm thủ tục khởi tạo. Nó phải được gọi trước khi bất kỳ đối tượng GLUT nào bởi vì nó khởi tạo thư viện GLUT . Các tham số để glutInit () được truyền từ main (), cụ thể (int argv mà, char ** argv) và glutInit & argv mà, (argv) , nơi argcp là một con trỏ đến chương trình của cố định biến argv mà từ chính. Khi trả về, giá trị được trỏ đến bởi argcp sẽ được cập nhật, và argv là argv biến của chương trình chưa sửa đổi từ chính. Giống như argcp, các dữ liệu cho argv sẽ được cập nhật. Điều tiếp theo chúng tôi cần làm là gọi glutInitDisplayMode () làm thủ tục để xác định chế độ hiển thị cho cửa sổ.Bạn phải quyết định xem bạn muốn sử dụng một RGBA (GLUT_RGBA) hoặc màu chỉ số (GLUT_INDEX) mô hình màu. Các chế độ RGBA cửa hàng các bộ đệm màu sắc của nó là thành phần màu đỏ, xanh lá cây, xanh dương, và alpha. Các thành phần ra màu sắc, alpha, tương ứng với khái niệm mờ(độ sang). Một giá trị alpha là 1.0 có nghĩa opacity hoàn tất, và giá trị alpha của một độ trong suốt hoàn toàn 0.0. Chế độ chỉ số màu sắc, tương phản, màu sắc bộ đệm trong các cửa hàng indicies. Quyết định của bạn về chế độ màu nên được dựa trên phần cứng sẵn có và những gì bạn ứng dụng đòi hỏi màu sắc khác thường có thể được đại diện đồng thời với chế độ RGBA hơn với chế độ chỉ số màu. Và cho các hiệu ứng đặc biệt, như bóng, ánh sáng, và sương mù, RGBA chế độ cung cấp linh hoạt hơn. Nhìn chung, sử dụng chế độ RGBA bất cứ khi nào có thể. RGBA chế độ mặc định. Khi thiết lập chế độ hiển thị là liệu bạn muốn sử dụng đệm đơn (GLUT_SINGLE) hoặc đệm đôi (GLUT_DOUBLE. Các ứng dụng sử dụng cả hai mặt trước và các bộ đệm màu sắc trở lại là đôi đệm.Sự mền mại hoạt hình được thực hiện bằng cách vẽ vào bộ đệm chỉ trở lại (không hiển thị), sau đó gây ra mặt trước và sau bộ đệm được đổi chỗ. Nếu bạn không sử dụng annimation, gắn bó với đệm duy nhất, đó là mặc định. Cuối cùng, bạn phải quyết định xem bạn muốn sử dụng một bộ đệm chiều sâu (GLUT_DEPTH), đệm stencil (GLUT_STENCIL) và / hoặc đệm một sự tích lũy (GLUT_ACCUM). Các đệm cửa hàng chuyên sâu một giá trị chuyên sâu cho mỗi điểm ảnh. Bằng cách sử dụng một "bài kiểm tra chiều sâu", bộ đệm độ sâu có thể được sử dụng để hiển thị các đối tượng có giá trị độ sâu nhỏ hơn ở phía trước của các đối tượng GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 9 có giá trị độ sâu lớn hơn. Các bộ đệm thứ hai, bộ đệm stencil được sử dụng để hạn chế vẽ để phần nào đó của màn hình, chỉ như là một stencil tông có thể được sử dụng với một hộp sơn xịt để làm cho một hình ảnh in. Cuối cùng, bộ đệm tích lũy được sử dụng để tích lũy một loạt các hình ảnh vào một hình ảnh sáng tác cuối cùng. Không ai trong số này là các bộ đệm mặc định. Cần phải tạo ra các đặc tính của cửa sổ. Một tham số đến glutInitWindowSize () sẽ được sử dụng để xác định kích thước, trong ảnh, trong cửa sổ inital của bạn. Chiều cao và chiều rộng (bằng pixel) của cửa sổ yêu cầu. Tương tự như vậy, glutInitWindowPosition () được sử dụng để xác định vị trí màn hình cho góc trên bên trái của cửa sổ ban đầu. Những giá trị, x và y, cho biết vị trí của các cửa sổ liên quan đến toàn bộ màn hình hiển thị. 2.1.2. Tạo của sổ Để thực sự tạo ra một cửa sổ, với các thiết lập đặc điểm trước đó (hiển thị chế độ, kích thước, vị trí, vv), sử dụng glutCreateWindow () để khởi tạo. Lệnh này có một chuỗi như một tham số mà có thể xuất hiện trong thanh tiêu đề nếu hệ thống cửa sổ bạn đang sử dụng hỗ trợ nó cửa sổ là không thực sự hiển thị cho đến khi glutMainLoop () được nhập vào. 2.1.3. Chức năng hiển thị Hàm glutDisplayFunc () làm thủ tục là sự kiện quan trọng đầu tiên của hầu hết các chức năng gọi lại và hiển thị . Một chức năng gọi lại là một trong những nơi hàm đã được định nghĩa ,ứng với mỗi hàm sẽ có một sự kiện phù hợp . Ví dụ, các đối số của glutDisplayFunc () là chức năng được GLUT xác định rằng nội dung của cửa sổ cần phải được hiển thị lại. Vì vậy, bạn nên đặt tất cả các hàm mà bạn cần hiển thị ra một cảnh trong chức năng gọi lại hiển thị. 2.1.4. Chức năng định lại hình Hàm glutReshapeFunc () là một chức năng gọi lại rằng quy định cụ thể chức năng đó được gọi là bất cứ khi nào cửa sổ được thu nhỏ hoặc di chuyển. Thông thường, các chức năng đó được gọi khi cần thiết cho thay đổi hình dáng chức năng hiển thị cửa sổ với kích thước mới và định nghĩa lại các đặc tính xem như mong muốn. Nếu glutReshapeFunc () là không được gọi, một mặc định chức năng thay đổi hình dáng mà GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 10 được gọi là bộ giao diện để giảm thiểu sự biến dạng và đặt ra các màn hình hiển thị lên tầm cao mới và chiều rộng. 2.1.5. Vòng lặp chính Cuối là gọi glutMainLoop (). Tất cả các cửa sổ đã được tạo ra có thể được hiển thị, và vẽ những cửa sổ hiện có hiệu quả. Chương trình sẽ có thể xử lý các sự kiện như chúng xảy ra (click chuột, thay đổi kích thước cửa sổ, vv.). Ngoài ra, các cuộc gọi lại hiển thị (từ glutDisplayFunc () ) được kích hoạt. Sau khi vòng lặp này được nhập vào, nó không bao giờ đã thoát! Điều quan trọng cần lưu ý rằng các lệnh OpenGL không nhất thiết phải thực hiện ngay khi chúng được phát hành. Nó là cần thiết để gọi lệnh glFlush () để đảm bảo rằng tất cả các lệnh đã ban hành trước đây được thực hiện. glFlush () được gọi chung là ở phần cuối của một chuỗi các bản vẽ lệnh để đảm bảo tất cả các đối tượng trong cảnh được vẽ trước khi bắt đầu chấp nhận của người dùng . 2.1.6. Mã nguồn 1 chương trình đơn giản • Cấu trúc một chương trình #include <GLUT/glut.h> #include <GL/glut.h> void handleKeypress(unsigned char key, int x, int y) { } void initRendering() { glEnable(GL_DEPTH_TEST); } void handleResize(int w, int h) { glViewport(0, 0, w, h); } void drawScene() { } int main(int argc, char** argv) { //Khoi tao GLUT glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(400, 400); / // Tao cua so glutCreateWindow("Demo"); GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt [...]... 34 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux return 1; } Makefile ITF: gcc -o ITF ITF.c -lglut -lGLU -lGL clean: rm -f ITF.o GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux 4.3 35 Kết quả chạy Hình ảnh được dùng : file ITF.bmp Kết quả chạy trên ubuntu 10.10 GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 36 Lập trình. .. Việt 36 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 1 Những kết quả đạt được OpenGl thư viện mở, luôn được cộng động theo dõi, phát triển và cập nhật ngay khi có những cái mới hoặc những vấn đề nảy sinh Nắm được những kỹ thuật đồ họa cơ bản trong việc đồ họa máy tính và có thể nâng cao hơn để phát triễn nhiều ứng dụng dòi hỏi giao diện cũng như đồ họa cao cấp 2... biến 2.3 Các thư viện liên quan OpenGL cung cấp một bộ thư viện mạnh mẽ của các lệnh vẽ, và các thư viện hỗ trợ cao hơn cho người lập trình Do đó, có thể muốn viết thư viện riêng trên đầu trang của OpenGL để đơn giản hóa công việc lập trình Ngoài ra, có thể muốn viết một số một thủ tục chương trình OpenGL để làm việc dễ dàng với hệ thống cửa sổ của bạn Trong thực tế, chẳng hạn một số thư viện và thói... các frame và kỹ thuật này được dùng để làm hoạt hình, các đồ họa khác Nhưng với sự vẽ xóa liên tục GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 15 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux các frame sẽ làm cho hệ thống không đáp ứng được và hình ảnh hiển thị không được mượt mà OpenGL cung cấp bộ thư viện với các phương thư c nhắm đưa các frame vào các bộ đệm và kỹ thuật dùng... của hình chữ nhật khung nhìn Chương 4 4.1 CHƯƠNG TRÌNH DEMO Các kỹ thuật sử dụng cho chương trình Chương trình Demo sử dụng các kỹ thuật vẽ cơ bản :  Vẽ đa giac  Vẽ đối tượng 3D  Sử dụng màu GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 28 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux  Các phép dịch chuyển và quay Ngoài ra còn sử dụng kỹ thuật tạo hình ảnh bề mặt cho đối tượng... của OpenGL Có thể quan sát được từ chương trình đơn giản trong phần trước, lệnh OpenGL sử dụng các chữ cái và vốn ban đầu gl tiền tố cho mỗi từ tạo thành tên lệnh (gọi lại glClearColor () Tương tự như vậy, OpenGL xác định hằng số bắt đầu bằng GL_, sử GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 12 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux dụng tất cả các chữ in hoa, và sử dụng. .. The OpenGL Utility Library (GLU), có chứa một số thủ tục sử dụng các lệnh OpenGL cấp thấp hơn để thực hiện các công việc như thiết lập các ma GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 14 trận để xem định hướng cụ thể và các dự đoán, thực hiện sự lót đá đa giác, Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux và các bề mặt vẽ Thư viện này được cung cấp như một phần của OpenGL. .. trận trên đầu của ma trận stack mà lần cuối tham chiếu bởi GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 26 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux glMatrixMode () chỉ huy Nội dung ma trận, do đó, được nhân đôi ở hàng đầu và cả trong matracies thứ hai-to-the-top Điều này trên ma trận sau đó có thể được dịch và rút ra, như mong muốn, và cuối cùng bị phá hủy bằng cách sử dụng. .. Tiến – Hà Phước Việt 22 Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux glEnd(); glTranslate(-1.5, 0.0, 0.0); // di chuyển đối tượng glEndList(); 3.2 Khung hiển thị ( Viewing ) 3.2.1 Màu sắc ( Color ) Vẽ trên một màn hình máy tính khác với bản vẽ giấy ở trong đó giấy bắt đầu ra màu trắng, và tất cả các bạn phải làm là vẽ các bức tranh Trên máy tính, bộ nhớ giữ hình ảnh thư ng chứa đầy những hình... thực hiện trên một đối tượng Để bắt đầu, chúng tôi sẽ khởi tạo các ma trận xem bằng cách tải nó với bản sắc ma trận, sử dụng lệnh glLoadIdentity () , và tiếp tục kết hợp nó với những người mới theo nơi mà GVHD: Nguyễn Tấn Khôi SVTH: Lê Phương Tiến – Hà Phước Việt 24 chúng tôi muốn đặt "máy ảnh” Các gluLookAt lệnh được sử dụng để chỉ ra nơi người Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux xem

Ngày đăng: 26/04/2013, 11:46

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan