Đề tài Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux

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

doc38 trang | Chia sẻ: tuandn | Lượt xem: 3884 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Lập trình đồ họa ứng dụng thư viện OpenGL trên Linux, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN MỤC LỤC TỔNG QUAN VỀ ĐỀ TÀI 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 GIỚI THIỆU THƯ VIỆN OPENGL VÀ CÁCH CÀI ĐẶT 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 cơ 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. Cách cài đặt 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….. 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 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 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 CƠ BẢN VỀ OPENGL Cấu trúc chương trình openGL đơn giản 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 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ị. 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. 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ị. 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à đượ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. 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 . Mã nguồn 1 chương trình đơn giản Cấu trúc một chương trình #include #include 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"); initRendering(); //Khoi tao cac thuoc tinh lien qua // cac ham ve, lay ban phim va resize glutDisplayFunc(drawScene); glutKeyboardFunc(handleKeypress); glutReshapeFunc(handleResize); glutMainLoop(); //vong lap chinh de duy tri su ve return 0; } Ví dụ chương trình đơn giản “Hello.c” #include void display(void) { glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glBegin(GL_POLYGON); glVertex3f (0.25, 0.25, 0.0); glVertex3f (0.75, 0.2 5, 0.0); glVertex3f (0.75, 0.75, 0.0); glVertex3f (0.25, 0.75, 0.0); glEnd(); glFlush (); } void init (void) { glClearColor (0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (250, 250); glutInitWindowPosition (100, 100); glutCreateWindow ("hello"); init (); glutDisplayFunc(display); glutMainLoop(); return 0; } Dữ liệu và thuộc tính Cú pháp lệnh 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ử dụng tất cả các chữ in hoa, và sử dụng gạch dưới những từ riêng biệt (như GL_COLOR_BUFFER_BIT). Bạn cũng có thể đã nhận thấy một số không liên quan thư dường như nối thêm vào một số tên lệnh (các 3f trong glColor3f ()). Sự thật là phần màu của tên lệnh là đủ để xác định các lệnh là một trong những bộ màu sắc hiện hành. Tuy nhiên, nhiều hơn một lệnh như vậy đã được xác định để bạn có thể sử dụng các loại khác nhau của các đối số;. Trong đó, 3 phần của hậu tố chỉ ra rằng ba đối số được đưa ra một phiên bản của lệnh màu có bốn tham số của. F Phần hậu tố cho thấy rằng các đối số là số điểm float. Một số các lệnh OpenGL chấp nhận có đến tám loại dữ liệu khác nhau cho các đối số của họ. Các chữ được sử dụng như là hậu tố để xác định các kiểu dữ liệu cho ANSI C triển khai thực hiện của OpenGL được thể hiện trong Bảng 1-1, cùng với các định nghĩa OpenGL loại tương ứng. Việc thực hiện cụ thể của OpenGL mà bạn đang sử dụng có thể không tuân theo sơ đồ chính xác, một thực hiện trong C + + hay Ada, ví dụ, không cần. Như vậy, hai lệnh glVertex2i(1, 3); glVertex2f(1.0, 3.0); là tương đương, trừ trường hợp đầu tiên xác định tọa độ của đỉnh là số nguyên 32-bit và lần thứ hai quy định chúng như là một điểm chính xác con số thực. Máy trạng thái OpenGL là một máy trạng thái. Bạn đặt nó vào trạng thái khác nhau (hay chế độ) mà sau đó vẫn có hiệu lực cho đến khi thay đổi chúng. Như đã thấy, màu sắc hiện nay là một biến trạng thái. Có thể đặt màu hiện tại để trắng, đỏ, hoặc bất kỳ màu nào khác, và sau đó mỗi đối tượng được vẽ với màu sắc cho đến khi bạn thiết lập màu hiện tại để cái gì khác. Màu sắc hiện tại chỉ là một trong nhiều biến trạng thái OpenGL lưu trữ . Những điều khiển kiểm soát những thứ như xem hiện tại và biến đổi chiếu, đường và các mẫu cách ve từng đốm đa giác, đa giác chế độ vẽ, pixel-đóng gói các công ước, vị trí và đặc điểm sáng,các đối tượng vẽ. Nhiều biến trạng thái tham khảo các chế độ được kích hoạt hay vô hiệu hóa với lệnh glEnable () hoặc glDisable (). Mỗi biến trạng thái hoặc có một giá trị mặc định, và tại bất kỳ điểm nào bạn có thể truy vấn các hệ thống giá trị hiện tại của mỗi biến. Thông thường, bạn sử dụng một trong bốn lệnh sau đây để làm điều này: glGetBooleanv () glGetDoublev, (), glGetFloatv (), hoặc glGetIntegerv (). Những lệnh này bạn chọn phụ thuộc vào kiểu dữ liệu bạn muốn trả lời được cho in Một số biến trạng thái có lệnh truy vấn cụ thể hơn (như glGetLight * (), glGetError (), hoặc glGetPolygonStipple ()). Ngoài ra, bạn có thể lưu và sau đó khôi phục lại các giá trị của một tập hợp các biến trạng thái trên một thuộc tính stack với glPushAttrib () và glPopAttrib () lệnh. Bất cứ khi nào có thể, bạn nên sử dụng các lệnh này hơn là bất kỳ trong những lệnh truy vấn, vì chúng tôi có thể sẽ hiệu quả hơn. Danh sách đầy đủ của các biến trạng thái bạn có thể truy vấn được tìm thấy trong Phụ lục B. Đối với mỗi biến, phụ lục này cũng liệt kê các * glGet () lệnh trả về giá trị của biến, lớp thuộc tính mà nó thuộc về, và giá trị mặc định của biến. 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 quen đã được bằng văn bản để cung cấp các tính năng chuyên ngành. 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 trận để xem định hướng cụ thể và các dự đoán, thực hiện sự lót đá đa giác, và các bề mặt vẽ. Thư viện này được cung cấp như một phần của OpenGL thực hiện của bạn. Đó là mô tả chi tiết tại Phụ lục C và trong OpenGL Reference Manual. Glu sử dụng tiền tố Glu. The OpenGL Extension to the X Window System (GLX), cung cấp một phương tiện của việc tạo ra một bối cảnh OpenGL và liên kết nó với một cửa sổ drawable trên một máy có sử dụng X Window System. GLX được cung cấp như là một hỗ trợ cho OpenGL. Đó là mô tả chi tiết hơn trong cả hai D Phụ lục và OpenGL Reference Manual. Một trong những sử dụng GLX (cho framebuffer trao đổi) được mô tả trong "hoạt hình”. GLX sử dụng tiền tố glx. The OpenGL Programming Guide Auxiliary Library ( AUX ), Thư viện đã được viết riêng cho cuốn sách này để làm ví dụ lập trình đơn giản và chưa hoàn chỉnh hơn. Đó là chủ đề của phần tiếp theo, và đó là mô tả chi tiết tại Phụ lục E, sử dụng thư viện aux tiền tố. "Làm thế nào để Lấy mẫu mã" mô tả làm thế nào để có được những mã nguồn cho các thư viện phụ trợ. Open Inventor là một bộ công cụ định hướng đối tượng dựa trên OpenGL cung cấp các đối tượng và phương pháp để tạo chiều tương tác đồ họa ba ứng dụng. Có sẵn từ Silicon Graphics và viết bằng C + +, Open Inventor cung cấp xây dựng các đối tượng trước và tích hợp sẵn trong trường hợp mô hình cho tương tác người dùng, cao cấp thành phần ứng dụng cho việc tạo và ba chiều cảnh chỉnh sửa, và khả năng in ấn các đối tượng và trao đổi dữ liệu trong đồ họa khác định dạng. Hoạt cảnh (Animation ) Một trong những điều thú vị nhất mà bạn có thể làm trên một máy tính đồ họa được vẽ hình ảnh chuyển động. Cho dù bạn là một kỹ sư đang cố gắng để xem tất cả các mặt của một phần cơ khí bạn đang thiết kế, một phi công học tập để bay một máy bay sử dụng một mô phỏng, hay chỉ đơn thuần là trò chơi máy tính một người đam mê, thì rõ ràng rằng hoạt hình là một phần quan trọng trong đồ họa máy tính . Để tạo ra một sử chuyển động của hình ảnh thì chỉ việc thay đổ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 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 bộ đệm làm cho hình ảnh đưa ra được như ý muốn. Ví dụ minh họa việc sử dụng các glXSwapBuffers () trong một ví dụ đó rút ra một hình vuông mà quay liên tục, như trong hình. CÁC KỸ THUẬT OPENGL CƠ BẢN Các đối tượng hình học ( Geometric Objects ) Tất cả các hình khối được vẽ trong opengl đều được nằm giữa hai dòng lệnh glBegin() và glEnd() (Hơi giống với pascal).Có thể có nhiều cặp dòng lệnh như vậy, tức là có thể viết các hàm vẽ khác nhau và dùng cặp câu lệnh trên trong các hàm đó.Tham số của glBegin() là GL_LINE_LOOP có nghĩa là nó bảo window vẽ một đường khép kín điểm đầu trùng với điểm cuối. Dưới đây là một số hằng số cơ bản: Hằng số ý nghĩa GL_POINT Vẽ điểm GL_LINE Vẽ đường thẳng nối hai điểm GL_LINE_STRIP Tập hợp của những đoạn đựơc nối với nhau 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ẽ một tập hợp các tam giác liền nhau, chung một cạnh GL_QUAD_STRIP Vẽ một tập hợp các tứ giác liền nhau, chung một cạnh GL_TRIANGLE_FAN Vẽ hình quạt Dưới đây là bức tranh toàn cảnh về các thông số này. Points, Lines and Polygons Mỗi đối tượng hình học được mô tả bằng một tập các đỉnh và các loại nguyên thủy được rút ra. Đỉnh A là không nhiều hơn một điểm được xác định trong không gian ba chiều. Hay không và làm thế nào các đỉnh được kết nối được xác định bởi các loại nguyên thủy. Mỗi đối tượng hình học là cuối cùng được mô tả như là một yêu cầu thiết lập các đỉnh. Sử dụng * glVertex () lệnh để xác định một đỉnh. . Các '*' được dùng để chỉ ra rằng có những khác biệt để các lệnh cơ bản glVertex () . Một số tên lệnh OpenGL có một, hai, hoặc ba chữ cái ở cuối để biểu thị số lượng và kiểu của các tham số cho lệnh. Các ký tự đầu tiên chỉ số giá trị của các loại chỉ ra rằng phải được trình bày cho lệnh. Nhân vật thứ hai cho các loại hình cụ thể của các đối số. Cuối cùng, nếu có, là 'v', cho biết lệnh này có một con trỏ tới một mảng (vector) của giá trị hơn là một loạt các đối số cá nhân. Ví dụ, trong lệnh glVertex3fv () , '3 'được dùng để chỉ ba đối số,' f 'được dùng để chỉ các đối số là điểm trôi, và' v 'chỉ ra rằng các đối số là ở định dạng vector. Điểm: điểm A là xác định bởi một đỉnh duy nhất. Đỉnh quy định bởi người sử dụng như là hai chiều (chỉ có x và y-tọa độ). Để điều chỉnh kích thước của một điểm kết xuất, sử dụng glPointSize () và cung cấp các kích thước mong. Mặc định là như 1 điểm ảnh theo điểm pixel 1. Nếu chiều rộng quy định là 2,0, điểm sẽ được một hình vuông của 2 bằng 2 điểm ảnh. glVertex * () được sử dụng để mô tả một điểm, nhưng nó chỉ có hiệu quả giữa một glBegin () và một glEnd () cặp. Các đối số được truyền cho glBegin () xác định những loại hình học nguyên thủy được xây dựng từ các đỉnh. Ví dụ : glBegin (GL_POINTS) ; glVertex2f(0.0, 0.0) ; glVertex2f(0.0, 3.0) ; glVertex2f(4.0, 3.0) ; glVertex2f(6.0, 1.5) ; glVertex2f(4.0, 0.0) ; glEnd() ; Lines: Trong OpenGL, dòng ám chỉ đến một đoạn đường, không phải là phiên bản của toán học kéo dài đến vô cực ở cả hai hướng. Cách dễ nhất để xác định một đường là có điểm đầu và điểm cuối. Như với những điểm nêu trên, tham số truyền cho glBegin () bắt đầu thực hiện vẽ. Các tùy chọn cho các dòng bao gồ
Luận văn liên quan