Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
0,91 MB
Nội dung
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 : Lê Phƣơng Tiến Hà Phƣớc Việt Cán hướng dẫn : Nguyễn Tấn Khôi Sinh viên 07T2 07T1 Đà Nẵng 2010 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux MỤC LỤC TỔNG QUAN VỀ ĐỀ TÀI CHƢƠNG GIỚI THIỆU THƢ VIỆN OPENGL VÀ CÁCH CÀI ĐẶT 1.1 GIỚI THIỆU 1.2 CÁCH CÀI ĐẶT 1.2.1 Môi trƣờng cài đặt 1.2.2 Cài đặt 1.2.3 Sử dụng thƣ viện openGL CHƢƠNG CƠ BẢN VỀ OPENGL 2.1 CẤU TRÚC CHƢƠNG TRÌNH OPENGL ĐƠN GIẢN 2.1.1 Khởi tạo 2.1.2 Tạo sổ 10 2.1.3 Chức hiển thị 10 2.1.4 Chức định lại hình 10 2.1.5 Vịng lặp 11 2.1.6 Mã nguồn chƣơng trình đơn giản 11 2.2 DỮ LIỆU VÀ THUỘC TÍNH 13 2.2.1 Cú pháp lệnh OpenGL 13 2.2.2 Máy trạng thái 14 2.3 CÁC THƢ VIỆN LIÊN QUAN 15 2.4 HOẠT CẢNH (ANIMATION ) 17 CHƢƠNG CÁC KỸ THUẬT OPENGL CƠ BẢN 18 3.1 CÁC ĐỐI TƢỢNG HÌNH HỌC ( GEOMETRIC OBJECTS ) 18 3.1.1 Points, Lines and Polygons 19 3.1.2 Vẽ đối tƣợng không gian ( Drawing 3-D Objects ) 22 3.1.3 Các phép biến đổi ( Transformations ) 23 3.1.4 Danh sách hiển thị ( Display Lists ) 24 3.2 KHUNG HIỂN THỊ ( VIEWING ) 26 3.2.1 Màu sắc ( Color ) 26 3.2.2 Độ bóng ( Shading ) 27 3.2.3 Khung hình biến đổi ( Viewing Transformation ) 28 3.2.4 Phép chiếu ( Projection ) 28 3.2.5 Thao tác ngăn xếp ma trận ( Manipulating the Matrix Stacks ) 30 3.2.6 Ánh sáng ( Light ) 31 3.2.7 Khung quan sát biến đổi ( Viewport Transformation ) 32 CHƢƠNG CHƢƠNG TRÌNH DEMO 33 4.1 CÁC KỸ THUẬT SỬ DỤNG CHO CHƢƠNG TRÌNH 33 4.2 Mà NGUỒN 34 GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 4.3 KẾT QUẢ CHẠY 44 GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux TỔNG QUAN VỀ ĐỀ TÀI Bối cảnh lý thực đề tài Ngày đồ họa máy tính đóng vai trị quan trong, định khơng nhỏ đến thành công hay thất bại sản phẩm phần mềm Sản phẩm làm ngồi tính đáp ứng đƣợc nhu cầu sử dụng 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ƣ sản phẩm thành cơng Ngồi sản phẩm phần mềm xu hƣớng phim hoạt hình 3D đƣợc quan tâm Nhận thấy tìm vả khả phát khiển mạnh 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 Linux Đây thƣ viên hỗ trợ công cụ mạnh mẽ để vẽ xử lý đối tƣợng đồ họa 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux Chương 1.1 GIỚI THIỆU THƢ VIỆN OPENGL VÀ CÁCH CÀI ĐẶT Giới thiệu OpenGL cấp thấp thƣ viện đồ họa đặc điểm kỹ thuật Nó làm cho có sẵn cho lập trình nhóm nhỏ hình học - điểm, đƣờng, đa giác, hình ảnh, ảnh bitmap OpenGL cung cấp lệnh cho phép đặc điểm kỹ thuật đối tƣợng hình học hai ba chiều, sử dụng cung cấp, với lệnh để điều khiển đối tƣợng kết xuất (GLUT) Từ vẽ lệnh OpenGL đƣợc giới hạn hình học đơn giản (điểm, đƣờng, đa giác), OpenGL Utility Toolkit đƣợc tạo để trợ giúp việc phát triển phức tạp đối tƣợng ba chiều nhƣ cầu, xuyến, chí ấm trà GLUT khơng đƣợc thỏa đáng cho đầy đủ tính ứng dụng OpenGL, nhƣng điểm khởi đầu hữu ích cho việc học OpenGL GLUT đƣợc thiết kế để lấp đầy cần thiết cho hệ thống độc lập lập trình giao diện cửa sổ cho chƣơng trình OpenGL Giao diện đƣợc thiết kế đơn giản nhƣng đáp ứng nhu cầu chƣơng trình hữu ích OpenGL Loại bỏ hoạt động hệ thống cửa sổ từ OpenGL định âm cho phép hệ thống đồ họa OpenGL đƣợc retargeted cho hệ thống khác bao gồm nhƣng đắt tiền máy trạm đồ họa mạnh mẽ nhƣ sản xuất hàng loạt hệ thống đồ họa nhƣ trò chơi video, hộp settop cho truyền hình tƣơng tác, máy tính cá nhân GLUT đơn giản hóa việc thự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 để hiển thị cảnh kết xuất cách sử dụng đồ họa OpenGL.Việc dƣ thừa thói quen có thơng số tƣơng đối GVHD: Nguyễn Tấn Khơi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 1.2 Cách cài đặt 1.2.1 Mơi trƣờng cài đặt Q trình tìm hiểu viết chƣơng trình đƣợc thực mơi trƣờng Linux phiên Ubuntu 10.10 OpenGL thƣ viện mở sử dụng mơi mơi trƣờng Windows nhƣng Ubuntu hệ điều hành mở, kho tài liệu phong phú, ln có cộng động sẵn sang giúp đỡ có đề khó khăn Các gói thƣ viện openGL : GLUT,AUX, XLIB… 1.2.2 Cài đặt Cài đặt trình biên dịch C/C++ GNU: terminal gõ Sudo apt-get install gcc Sudo apt-get install g++ GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux Sau cài đặt kiểm tra lại thử có hay chƣa Cài đặt thƣ viện Opengl Administrator->synaptic->search với từ khóa opengl: Lựa chọn make file cần thiết apply 1.2.3 Sử dụng thƣ viện openGL Cách biên dịch C đơn giản GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 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 thƣ mục chứa code makefile gõ make xong Chương CƠ BẢN VỀ OPENGL 2.1 Cấu trúc chƣơng trình openGL đơn giản 2.1.1 Khởi tạo Điều cần làm gọi glutInit () làm thủ tục khởi tạo Nó phải đƣợc gọi trƣớc đối tƣợng GLUT 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) glutInit & argv mà, (argv) , nơi argcp trỏ đến chƣơng trình cố định biến argv mà từ Khi trả về, giá trị đƣợc trỏ đến argcp đƣợc cập nhật, argv argv biến chƣơng trình chƣa sửa đổi từ Giống nhƣ argcp, liệu cho argv đƣợc cập nhật Điều cần làm gọi glutInitDisplayMode () làm thủ tục để xác định chế độ hiển thị cho cửa sổ.Bạn phải định xem bạn muốn sử dụng RGBA (GLUT_RGBA) màu số (GLUT_INDEX) mơ hình màu Các chế độ RGBA cửa hàng đệm màu sắc thành phần màu đỏ, xanh cây, xanh dƣơng, alpha Các thành phần màu sắc, GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux alpha, tƣơng ứng với khái niệm mờ(độ sang) Một giá trị alpha 1.0 có nghĩa opacity hồn tất, giá trị alpha độ suốt hoàn toàn 0.0 Chế độ số màu sắc, tƣơng phản, màu sắc đệm cửa hàng indicies Quyết định bạn chế độ màu nên đƣợc dựa phần cứng sẵn có bạn ứng dụng địi hỏi màu sắc khác thƣờng đƣợc đại diện đồng thời với chế độ RGBA với chế độ số màu Và cho hiệu ứng đặc biệt, nhƣ bóng, ánh sáng, sƣơng mù, RGBA chế độ cung cấp linh hoạt Nhìn chung, sử dụng chế độ RGBA RGBA chế độ mặc định Khi thiết lập chế độ hiển thị liệu bạn muốn sử dụng đệm đơn (GLUT_SINGLE) đệm đôi (GLUT_DOUBLE Các ứng dụng sử dụng hai mặt trƣớc đệm màu sắc trở lại đôi đệm.Sự mền mại hoạt hình đƣợc thực cách vẽ vào đệm trở lại (không hiển thị), sau gây mặt trƣớc sau đệm đƣợc đổi chỗ Nếu bạn khơng sử dụng annimation, gắn bó với đệm nhất, mặc định Cuối cùng, bạn phải định xem bạn muốn sử dụng đệm chiều sâu (GLUT_DEPTH), đệm stencil (GLUT_STENCIL) / đệm tích lũy (GLUT_ACCUM) Các đệm cửa hàng chuyên sâu giá trị chuyên sâu cho điểm ảnh Bằng cách sử dụng "bài kiểm tra chiều sâu", đệm độ sâu đƣợc sử dụng để hiển thị đối tƣợng có giá trị độ sâu nhỏ phía trƣớc đối tƣợng có giá trị độ sâu lớn Các đệm thứ hai, đệm stencil đƣợc sử dụng để hạn chế vẽ để phần hình, nhƣ stencil tơng đƣợc sử dụng với hộp sơn xịt để làm cho hình ảnh in Cuối cùng, đệm tích lũy đƣợc sử dụng để tích lũy loạt hình ảnh vào hình ảnh sáng tác cuối Khơng số đệm mặc định GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 10 Cần phải tạo đặc tính cửa sổ Một tham số đến glutInitWindowSize () đƣợc sử dụng để xác định kích thƣớc, ảnh, cửa sổ inital bạn Chiều cao chiều rộng (bằng pixel) cửa sổ yêu cầu Tƣơng tự nhƣ vậy, glutInitWindowPosition () đƣợc sử dụng để xác định vị trí hình cho góc bên trái cửa sổ ban đầu Những giá trị, x y, cho biết vị trí cửa sổ liên quan đến tồn hình hiển thị 2.1.2 Tạo sổ Để thực tạo cửa sổ, với 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 có chuỗi nhƣ tham số mà xuất tiêu đề hệ thống cửa sổ bạn sử dụng hỗ trợ cửa sổ khơng thực hiển thị glutMainLoop () đƣợc nhập vào 2.1.3 Chức hiển thị Hàm glutDisplayFunc () làm thủ tục kiện quan trọng hầu hết chức gọi lại hiển thị Một chức gọi lại nơi hàm đƣợc định nghĩa ,ứng với hàm có kiện phù hợp Ví dụ, đối số glutDisplayFunc () chức đƣợc GLUT xác định nội dung cửa sổ cần phải đƣợc hiển thị lại Vì vậy, bạn nên đặt tất hàm mà bạn cần hiển thị cảnh chức gọi lại hiển thị 2.1.4 Chức định lại hình Hàm glutReshapeFunc () chức gọi lại quy định cụ thể chức đƣợc gọi cửa sổ đƣợc thu nhỏ di chuyển Thơng thƣờng, chức đƣợc gọi cần thiết cho thay đổi hình dáng chức hiển thị cửa sổ với kích thƣớc định nghĩa lại đặc tính xem nhƣ mong muốn Nếu glutReshapeFunc () không đƣợc gọi, GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 33 bên trái khung nhìn chiều rộng chiều cao hình chữ nhật khung nhìn Chương 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 kỹ thuật vẽ : Vẽ đa giac Vẽ đối tƣợng 3D Sử dụng màu Các phép dịch chuyển quay Ngồi cịn sử dụng kỹ thuật tạo hình ảnh bề mặt cho đối tƣợng đƣợc vẽ (texture) Với kỹ thuật thay màu sắc đơn giản hình ảnh sinh động hơn, phủ lên bề mặt khối hình học mà cần vẽ Muốn sử dụng texture cần phải có bƣc ảnh nguồn, định dạng ảnh sử dụng đƣợc, nhƣng với định dạng ảnh BMP ( bitmap ) việc sử dụng dễ dàng nhiều Sử dụng hàm cần thiết để đƣa ảnh thành mãng nhƣ sau ( R1,G1,B1,R2,G2,B2….) giá trị lần lƣợt tƣơng ứng red, green, blue ; giá trị màu sắc cho pixel ảnh GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 34 Nó đơn giản Chúng tơi tải hình ảnh, sau tải texture OpenGL, sau xóa đối tƣợng hình ảnh, kể từ chúng tơi khơng cần Bắt đầu sử dụng, cách gọi glEnable (GL_TEXTURE_2D) phép áp dụng kết cấu glBindTexture (GL_TEXTURE_2D, _textureId) để nói với OpenGL mà muốn sử dụng kết cấu với id _textureId Chƣơng trình khởi tạo OpenGL qua thƣ viện GLUT tạo cửa sỗ, sét chế độ mở trạng thái ( vẽ 3D, texture, chế độ màu, đệm … ) Sau tải file ảnh *.bmp chuyển dƣới dạng mãng kiểu int để chƣa giá trị màu pixel, chuyển mãng giá trị thành texture OpenGL Hàm vẽ gọi hàm glBindTexture (GL_TEXTURE_2D, _textureId) ( GL_TEXTURE texture dạng 2D _textureId texture vừa tạo ra) để sử dụng texture texture hiển thị lên bề mặt đối tƣợng mà OpenGL vẽ 4.2 Mã nguồn File “ITF.c” #include #include #include #include #include #include #define ESCAPE 27 // ma ascii cua phim escape int window; // so cua so GLUT float xrot, yrot, zrot; // gia tri goc quay cua cac truc X,Y,Z int texture[1]; GVHD: Nguyễn Tấn Khôi // mang chua texture SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 35 /* Kieu du lieu Image - chieu rong, cao, du lieu */ struct Image { unsigned long sizeX; unsigned long sizeY; char *data; }; typedef struct Image Image; // Load mot buc anh len int ImageLoad(char *filename, Image *image) { FILE *file; unsigned long size; // size of the image in bytes unsigned long i; // standard counter unsigned short int planes;// number of planes in image (must be 1) unsigned short int bpp; // number of bits per pixel (must be 24) char temp; // temporary color storage for bgr-rgb conversion // mo file if ((file = fopen(filename, "rb"))==NULL) { printf("File Not Found : %s\n",filename); return 0; } // seek through the bmp header, up to the width/height: fseek(file, 18, SEEK_CUR); // doc chieu rong if ((i = fread(&image->sizeX, 4, 1, file)) != 1) { printf("Error reading width from %s.\n", filename); return 0; } printf("Width of %s: %lu\n", filename, image>sizeX); // doc chieu cao if ((i = fread(&image->sizeY, 4, 1, file)) != 1) { GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 36 printf("Error reading height from %s.\n", filename); return 0; } printf("Height of %s: %lu\n", filename, image>sizeY); // calculate the size (assuming 24 bits or bytes per pixel) size = image->sizeX * image->sizeY * 3; // read the planes if ((fread(&planes, 2, 1, file)) != 1) { printf("Error reading planes from %s.\n", filename); return 0; } if (planes != 1) { printf("Planes from %s is not 1: %u\n", filename, planes); return 0; } // read the bpp if ((i = fread(&bpp, 2, 1, file)) != 1) { printf("Error reading bpp from %s.\n", filename); return 0; } if (bpp != 24) { printf("Bpp from %s is not 24: %u\n", filename, bpp); return 0; } // seek past the rest of the bitmap header fseek(file, 24, SEEK_CUR); // read the data image->data = (char *) malloc(size); if (image->data == NULL) { printf("Error allocating memory for colorcorrected image data"); return 0; } GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 37 if ((i = fread(image->data, size, 1, file)) != 1) { printf("Error reading image data from %s.\n", filename); return 0; } for (i=0;i rgb) temp = image->data[i]; image->data[i] = image->data[i+2]; image->data[i+2] = temp; } // we're done return 1; } // Load Bitmaps And Convert To Textures void LoadGLTextures() { // Load Texture Image *image1; // allocate space for texture image1 = (Image *) malloc(sizeof(Image)); if (image1 == NULL) { printf("Error allocating space for image"); exit(0); } if (!ImageLoad("Data/ITF.bmp", image1)) { exit(1); } // tao Texture glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]);// 2d texture (x and y size) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR); // tuyen tinh neu kich co lon hon texture GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 38 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); // tuyen tinh neu kich co nho hon texture // 2d texture, level of detail (normal), components (red, green, blue), x size from image, y size from image, // border (normal), rgb color data, unsigned byte data, and finally the data itself glTexImage2D(GL_TEXTURE_2D, 0, 3, image1->sizeX, image1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, image1>data); }; /* Khoi tao OpenGL */ void InitGL(int Width, int Height) khoi tao cua so { LoadGLTextures(); glEnable(GL_TEXTURE_2D); Texture Mapping glClearColor(0.0f, 0.0f, 0.0f, backgroud ve mau den glClearDepth(1.0); Xoa bo dem chieu xau glDepthFunc(GL_LESS); Depth Test To Do glEnable(GL_DEPTH_TEST); Depth Testing glShadeModel(GL_SMOOTH); Smooth Color Shading glMatrixMode(GL_PROJECTION); glLoadIdentity(); ma tran chieu // goi sau // tai Texture(s) // mo trang thai 0.0f); // xoa // mo trang thai // The Type Of // mo trang thai // moi trang thai // khoi dong lai gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height, 0.1f,100.0f); // Calculate The Aspect Ratio Of The Window glMatrixMode(GL_MODELVIEW); } GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 39 /* Ham tu dong chinh cua so bi thay doi kich co */ void ReSizeGLScene(int Width, int Height) { if (Height==0) // Neu cua so qua nho Height=1; glViewport(0, 0, Width, Height);// dai lai Viewport And Perspective Transformation glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height, 0.1f,100.0f); glMatrixMode(GL_MODELVIEW); } /* Ham ve */ void DrawGLScene() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // lam sach mang anh va bo dem chieu sau glLoadIdentity(); // dat lai khung nhin glTranslatef(0.0f,0.0f,-5.0f); don vi // di chuyen glRotatef(xrot,1.0f,0.0f,0.0f); truc x glRotatef(yrot,0.0f,1.0f,0.0f); truc y glRotatef(zrot,0.0f,0.0f,1.0f); truc z // quay tren // quay tren // quay tren glBindTexture(GL_TEXTURE_2D, texture[0]);// chon texture de su dung glBegin(GL_QUADS); dau ve lap phuong GVHD: Nguyễn Tấn Khôi // bat SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 40 // mat truoc glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad // mat sau glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Bottom Left Of The Texture and Quad // mat tren glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad // mat day glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 41 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad // ben phai glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad // ben trai glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Bottom Left Of The Texture and Quad glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad glEnd(); // ket thuc ve cac da giac xrot+=1.0f; tri truc X yrot+=1.0f; tri truc Y zrot+=1.0f; tri truc Z // thay doi tinh tuyen gia glutSwapBuffers(); // thay doi tinh tuyen gia // thay doi tinh tuyen gia // dung bo dem doi de ve len } /* ham su kien nhan phim */ void keyPressed(unsigned char key, int x, int y) { /* thoi gian delay */ GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 42 usleep(100); /* thoat chuong trinh neu nhan phim ESCAPE */ if (key == ESCAPE) { /* tat cua so GLUT */ glutDestroyWindow(window); /* thoat chuong trinh */ exit(0); } } int main(int argc, char **argv) { glutInit(&argc, argv); // khoi tao OpenGL voi thu vien GLUT /* chon kieu mang hinh voi: bo dem doi RGBA color ho tro anh sang bo dem chieu xau */ glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH); /* khoi tao cua so voi kich thuoc truyen vao*/ glutInitWindowSize(640, 480); /* set diem treo cua cua so */ glutInitWindowPosition(0, 0); /*�� cua so */ window = glutCreateWindow("ITF - cube "); /* thuc hien ve */ glutDisplayFunc(&DrawGLScene); /* chon full man hinh */ //glutFullScreen(); /* ve lai */ glutIdleFunc(&DrawGLScene); /* tu dong chinh neu thay doi kich co cua so */ GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 43 glutReshapeFunc(&ReSizeGLScene); /* Su kien nhan phim */ glutKeyboardFunc(&keyPressed); /* khoi tao cac gia tri cho cua so */ InitGL(640, 480); /* vong lap chinh */ glutMainLoop(); 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 4.3 44 Kết chạy Hình ảnh đƣợc dùng : file ITF.bmp Kết chạy ubuntu 10.10 GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 45 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN Những kết đạt đƣợc OpenGl thƣ viện mở, đƣợc cộng động theo dõi, phát triển cập nhật có những vấn đề nảy sinh Nắm đƣợc kỹ thuật đồ họa việc đồ họa máy tính nâng cao để phát triễn nhiều ứng dụng dòi hỏi giao diện nhƣ đồ họa cao cấp Những vấn đề tồn Chƣa làm đƣợc đồ họa hoạt hình đồ họa 3D cấp cao, nhƣ : Terrain Drawing Text Animation Collision Detection Putting It All Together Hiệu ứng 3D Alpha Blending Particle Systems Drawing Reflections Fog Tốc độ hiển thị Backface Culling Display Lists Normalizing Normals Mipmapping Materials Hƣớng phát triển Kết hợp nhiều thƣ viện khác openGL Lập trình ngơn ngữ khác nhau: VB.VC++,C,java… 3D Hoạt hình Đồ họa máy tính Quản cáo Film GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 46 Kiến trúc … GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 47 TÀI LIỆU THAM KHẢO [1] The Red Book, http://fly.cc.fer.hr/~unreal/theredbook/ [2] Video OpenGL tutorial, http://www.videotutorialsrock.com/index.php [3] Game Development, http://nehe.gamedev.net/ [4] OpenGL Programming Guide, http://glprogramming.com/red/ [5] OpenGL Tutorial, http://cs.uccs.edu/~semwal/indexGLTutorial.html [6] API OpenGL http://www.opengl.org/sdk/docs/man/ GVHD: Nguyễn Tấn Khôi SVTH: Lê Phƣơng Tiến – Hà Phƣớc Việt LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... 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 Linux Đây thƣ viên hỗ trợ công cụ mạnh mẽ để vẽ xử lý đối tƣợng đồ họa Mục tiêu đề tài Tìm hiểu lý thuyết thƣ viện. .. trình đồ họa ứng dụng thƣ viện OpenGL Linux 1.2 Cách cài đặt 1.2.1 Môi trƣờng cài đặt Quá trình tìm hiểu viết chƣơng trình đƣợc thực môi trƣờng Linux phiên Ubuntu 10.10 OpenGL thƣ viện mở sử dụng. .. luanvanchat@agmail.com Lập trình đồ họa ứng dụng thƣ viện OpenGL Linux 17 dùng, cao cấp thành phần ứng dụng cho việc tạo ba chiều cảnh chỉnh sửa, khả in ấn đối tƣợng trao đổi liệu đồ họa khác định dạng