+Đồ họa sv cong nghe thuc pham graphics distant5 tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về...
CHƯƠNG GIỚI THIỆU ĐỒ HỌA BA CHIỀU Các đối tượng giới thực phần lớn đối tượng ba chiều, nên việc thể đối tượng ba chiều máy tính công việc cần thiết để đưa tin học gần gũi với thực tế Cũng giống cách biểu diễn đối tượng ba chiều mặt phẳng khác (như máy ảnh, camera, ), biểu diễn máy tính phải tuân theo quy luật phối cảnh, sáng, tối, nhằm giúp người xem tưởng tượng lại hình ảnh cách gần Ngoài biểu diễn máy tính có ưu giúp ta quan sát đối tượng nhiều góc cạnh khác nhau, khoảng cách khác Chương giới thiệu số kó thuật biểu diễn đối tượng ba chiều máy tính, từ đối tượng đơn giản hình khối, đa diện, đến đối tượng tương đối phức tạp mặt tìm hiểu chương trước TỔNG QUAN VỀ ĐỒ HỌA BA CHIỀU Khi mô hình hóa hiển thò cảnh ba chiều, ta cần phải xem xét nhiều khía cạnh vấn đề khác không đơn giản thêm vào tọa độ thứ ba cho đối tượng Bề mặt đối tượng xây dựng nhiều tổ hợp khác mặt phẳng mặt cong Ngoài ra, cần mô tả số thông tin bên đối tượng Các công cụ hỗ trợ đồ họa (graphics package) thường cung cấp số hàm hiển thò thành phần bên trong, đường nét tiêu biểu hiển thò phần đối tượng ba chiều (solid object) Ngoài ra, phép biến đổi hình học thường sử dụng nhiều đa dạng đồ họa ba chiều so với đồ họa hai chiều Phép biến đổi hệ quan sát không gian ba chiều phức tạp nhiều so với không gian hai chiều phải chọn lựa nhiều tham số mô tả cảnh ba chiều xuất Hình 5.1 – Một cảnh đồ họa ba chiều Các mô tả cảnh ba chiều phải qua quy trình xử lí gồm nhiều công đoạn phép biến đổi hệ tọa độ quan sát phép chiếu chuyển cảnh từ hệ tọa độ quan sát ba chiều xuống hệ tọa độ thiết bò hai chiều Những phần nhìn thấy cảnh, ứng với hệ quan sát chọn đó, phải xác đònh cuối cùng, thuật toán vẽ mặt áp dụng nhằm tạo hình ảnh trung thực (gần với thực tế) cảnh 1.1 Sơ lược quy trình hiển thò Quy trình xử lí thông tin đồ họa ba chiều chuỗi bước nối tiếp nhau, kết bước đầu vào bước Hình 5.2 – Quy trình hiển thò đối tượng ba chiều Modeling Transformation Trivial Rejection Illumination Viewing Transformation Clipping Projection Rasterization Display Bieán đổi từ hệ toạ độ đối tượng sang hệ toạ độ giới thực Loại bỏ đối tượng không nhìn thấy Chiếu sáng đối tượng Chuyển từ world space sang eye space Loại bỏ phần nằm viewing frustum Chiếu từ eye space xuống screen space Chuyển đối tượng sang dạng pixel Hiển thò đối tượng Quy trình bắt đầu việc xây dựng mô hình đối tượng Các mô hình thường mô tả không gian ba chiều (x,y,z) Các mô hình thường thể vật thể (solid) bề mặt (boundaries) đối tượng Như ta có hai kiểu mô hình hóa Trong solid modeling đối tượng đồ họa sở thường dùng để mô tả đối tượng tích (volume) Trong boundary representations(B-reps), đối tượng đònh nghóa bề mặt chúng Các mô hình thường biểu diễn hệ tọa độ cục bộ, mà ta gọi hệ tọa độ đối tượng Trong hệ tọa độ có thân đối tượng đònh nghóa, gốc tọa độ đơn vò đo lường thường chọn cho việc biểu diễn đối tượng tiện lợi Bước quy trình hiển thò biến đổi đối tượng từ không gian đối tượng (object-space) vào không gian chung gọi không gian thực (world space) Trong không gian đối tượng, nguồn sáng, người quan sát tồn Bước gọi giai đoạn biến đổi mô hình (modeling transformation) Bước bước tối ưu hóa Trong giai đoạn loại bỏ đơn giản (trivial rejection) ta cần loại trừ tất đối tượng nhìn thấy Điều giúp tránh việc xử lí số phần không cần thiết cảnh (scene) mà ta chuẩn bò hiển thò bước sau Tiếp theo ta phải chiếu sáng (illumination) đối tượng nhìn thấy cách gán cho chúng màu sắc dựa đặc tính chất tạo nên vật nguồn sáng tồn cảnh Sau chiếu sáng, ta phải thực phép biến đổi hệ tọa độ để đặt vò trí quan sát (viewing position) gốc tọa độ mặt phẳng quan sát (viewing plane) vò trí mong ước Bước gọi bước đổi hệ quan sát Sau bước này, đối tượng chuyển từ không gian thực sang không gian quan sát (eye space) Trong không gian quan sát, ta phải thực việc xén đối tượng cảnh để cảnh nằm gọn phần không gian chóp cụt mà ta gọi viewing frustum Bước loại bỏ hoàn toàn đối tượng (các mảnh đối tượng) không nhìn thấy ảnh Bước ta chiếu đối tượng xuống mặt phẳng hai chiều Bước Projection thực phép biến đổi từ không gian quan sát sang không gian hình (screen-space) Trong bước rời rạc hóa (rasterization) ta chuyển đối tượng thành pixel Cuối cùng, toàn cảnh hiển thò lên hình 1.2 Mô hình khung nối kết (Wireframe Model) 1.2.1 Khái niệm Một phương pháp thông dụng đơn giản để mô hình hóa đối tượng mô hình khung nối kết Một mô hình khung nối kết gồm có tập đỉnh tập cạnh nối đỉnh Khi thể mô hình này, đối tượng ba chiều rỗng không giống thực tế Để hoàn thiện hơn, người ta dùng kó thuật tạo bóng loại bỏ đường mặt khuất (Chúng ta đề cập vấn đề chương sau) Tuy nhiên vẽ mô hình thường nhanh nên người ta thường dùng việc xem phác thảo (preview) đối tượng, đặc biệt hệ CAD 1.2.2 Biểu diễn vật thể ba chiều mô hình khung nối kết Với mô hình khung nối kết, hình dạng đối tượng ba chiều biểu diễn hai danh sách (list) : danh sách đỉnh (vertices) danh sách cạnh (edges) nối đỉnh Danh sách đỉnh cho biết thông tin hình học vò trí đỉnh, danh sách cạnh xác đònh thông tin kết nối, cho biết cặp đỉnh tạo cạnh Chúng ta quan sát vật thể ba chiều biểu diễn mô hình khung nối kết sau : Bảng danh sách cạnh đỉnh biểu diễn vật thể Vertex 10 x 0 0 1 1 Vertex y 1 0.5 0 1 0.5 List z 0 1.5 0 1.5 back side front side Edge 10 11 12 13 14 15 16 17 Edge List Vertex1 Vertex2 2 3 4 5 7 8 9 10 10 6 10 z 10 x 1 y Hình 5.3 – Vật thể ba chiều biểu diễn mô hình khung nối kết Có nhiều cách để đặc tả mô hình khung nối kết máy tính dùng xâu, mảng, cách có ưu điểm riêng ứng dụng cụ thể Ở ta minh họa biểu diễn mô hình khung nối kết cấu trúc liệu mảng sau : #define MAXVERTS #define MAXEDGES 50 //số đỉnh tối đa biểu diễn 100 //số cạnh tối đa typedef struct { float } POINT3D; x, y, z; typedef struct { int int POINT3D int }WIREFRAME; NumVerts; //Số đỉnh mô hình NumEdges; //Số cạnh mô hình Vert[MaxVerts]; Edge[MaxEdges][2]; Ngoài ra, mô hình wireframe người ta mô tả mặt (phẳng) đối tượng Mỗi mặt đònh nghóa đa giác bao Ví dụ, đối tượng hình 5.3 có mặt 1.3 Vẽ đối tượng theo mô hình khung nối kết cách sử dụng phép chiếu Để vẽ đối tượng biểu diễn mô hình khung nối kết, đơn giản cần vẽ cạnh danh sách cạnh mà Tuy nhiên đỉnh cạnh đònh nghóa ba chiều nên vấn đề đặt làm để vẽ đường thẳng ba chiều mặt phẳng hai chiều Để làm điều này, phải thực phép chiếu từ ba chiều vào hai chiều để bỏ bớt chiều Có hai loại phép chiếu đơn giản thường dùng phép chiếu song song (parallel projection) phép chiếu phối cảnh (perspective projection) Phép chiếu song song sử dụng đường thẳng song song qua đỉnh đối tượng, phép chiếu phối cảnh dùng đường thẳng qua đỉnh đối tượng hội tụ điểm gọi tâm chiếu (center of projection) Các đường thẳng gọi tia chiếu giao điểm đường thẳng với mặt phẳng chiếu (hay gọi mặt phẳng quan sát (view plane)) hình chiếu đỉnh hay gọi điểm chiếu Trong phần này, giả sử mặt phẳng chiếu mặt phẳng z=0 Phép chiếu song song bảo toàn mối quan hệ chiều đối tượng, kó thuật dùng phác thảo để tạo phần khung đối tượng ba chiều Người ta dùng phương pháp để quan sát xác mặt khác đối tượng Tuy nhiên, phép chiếu song song không cho biểu diễn thực đối tượng ba chiều Trong đó, phép chiếu phối cảnh tạo biểu diễn thực lại không bảo toàn mối liên hệ chiều Các đường thẳng xa có ảnh chiếu nhỏ Nói chung, kó thuật để vẽ đường thẳng ba chiều : Chiếu điểm đầu mút thành điểm hai chiều Vẽ đường thẳng nối hai điểm ảnh qua phép chiếu Mặt phẳng chiếu Mặt phẳng chiếu Tia chiếu (a) (b) Tâm chiếu Hình 5.4 – Phép chiếu song song (a) phép chiếu phối cảnh (b) Sở dó làm điều phép chiếu mà sử dụng bảo toàn đường thẳng 1.4 Phép chiếu song song (parallel projection) Khi hướng tia chiếu vuông góc với mặt phẳng chiếu ta có phép chiếu trực giao (orthographic projection) Ngược lại, ta có phép chiếu xiên (oblique projection) 1.4.1 Phép chiếu trực giao Xét điểm ba chieàu, P P x , P y , P z , cách đơn giản bỏ thành phần z để chiếu P thành P ' Px , P y Điều tương đương với chiếu điểm lên mặt phẳng xy theo phương trục z Mặt phẳng xy mặt phẳng quan sát Xem hình vẽ minh họa 5.5, điểm chiếu giao điểm tia a qua P song song với trục z vuông góc với mặt phẳng xy Tia a tia chiếu Dễ dàng thấy phép chiếu bảo toàn đường thẳng z a P(P x ,P y ,P z ) Mặt phẳng chiếu P'(P x ,P y ) O x y Hình 5.5 – Phép chiếu trực giao Phép chiếu trực giao thường gọi phép nhìn từ xuống (top-view) lên (bottom-view) Có hai phép chiếu khác thông dụng là: Phép nhìn từ phía trước (front-view): Tia chiếu song song với trục x mặt phẳng quan sát yz Phép chiếu loại bỏ thành phần x P Phép nhìn từ phía bên cạnh (side-view): Tia chiếu song song với trục y mặt phẳng quan sát xz Phép chiếu loại bỏ thành phần y P Hình 5.6 minh họa ba phép chiếu trực giao đề cập lên vật thể nhà Nhận xét với phép chiếu nhìn từ phía trước ta không phân biệt tường trước tường sau chúng nằm chồng lên nhau, tương tự cho trường hợp phép chiếu nhìn từ phía bên cạnh Nhìn từ phía z y x y x Nhìn từ mặt bên z z Nhìn từ phía trước x y Hình 5.6 – Kết ba phép chiếu trực giao 1.4.2 Phép chiếu xiên z P(P x ,P y ,P z ) Mặt phẳng chiếu O (x P ,y P ) (P x ,P y ) x y Hình 5.7 – Phép chiếu xiên Hình 5.7 minh họa phép chiếu xiên Điểm P P x , P y , Pz qua phép chiếu xiên nhận điểm P ' xP , yP P x , P y hình chiếu P qua phép chiếu trực giao góc hợp tia chiếu đoạn nối xP , yP Px , P y Giả sử đoạn nối có độ dài L góc đoạn nối với trục y 1.5 Phép chiếu phối cảnh (perspective projection) 1.5.1 Phép chiếu phối cảnh đơn giản Phép chiếu phối cảnh phụ thuộc vào vò trí tương đối hai đối tượng mắt nhìn mặt phẳng quan sát Quan sát hình sau, với mặt phẳng quan sát yz mắt nhìn E E ,0,0 đặt dọc theo trục x Khoảng cách mắt E mặt phẳng quan sát gọi tầm nhìn (eye distance).Để xác đònh hình chiếu P x, y, z , ta nối P với E tìm giao điểm P’ đường thẳng với mặt phẳng quan sát Lúc P’ điểm cần tìm Hình 5.8 – Phép chiếu phối cảnh đơn giản z P(x,y,z) P' y x E Trong phép chiếu phối cảnh tia chiếu không song song với mà hội tụ điểm mắt Chúng ta giả sử P không nằm phía sau mắt nhìn, tức x E P nằm sau mặt phẳng quan sát, hay mặt phẳng quan sát, hay mắt mặt phẳng quan sát Ta có, tia từ mắt đến P có dạng : r t E ,0,01 t x, y, z t Tia giao với mặt quan sát (mặt phẳng x=0) x = nên giá trò t ứng với trường hợp : t' 1 x/ E Suy tọa độ điểm chiếu : y' z' 1 y x/ E z 1 x / E Phép chiếu phối cảnh gần giống phép chiếu trực giao khác hai tọa độ y, z nhân lên thêm lượng t' Hệ số tỉ 1 x / E lệ dẫn đến khái niệm phối cảnh theo luật xa gần (perspective foreshortening) nghóa : vật xa mắt (theo chiều âm trục x, để có x E ) t’ nhỏ dẫn đến y’, z’ nhỏ vật thấy nhỏ hơn, ngược lại vật gần mắt thấy lớn Cũng tương tự trên, ta dễ dàng kiểm chứng phép chiếu phối cảnh bảo toàn đường thẳng Nhận xét phép chiếu song song trường hợp đặc biệt phép chiếu phối cảnh Nếu cho tầm nhìn E ngày lớn tiến dần đến vô cực tia chiếu qua mắt trở nên song song hệ số t' 1 x / E trở thành Lúc phép chiếu phối cảnh trở thành phép chiếu song song 1.5.2 Các trường hợïp khác Trường hợp có mắt nhìn nằm trục x mặt phẳng quan sát yz Cũng phép chiếu trực giao ta hoán đổi vò trí mắt mặt phẳng quan sát để nhìn đối tượng góc cạnh khác Ví dụ trường hợp mắt nằm trục z mặt phẳng quan sát xy kết tương tự : 1 z/ E x x' 1 z/ E y y' 1 z/ E t' p p p' p p' p' p' Hình 5.26 – Ghép nối hai đoạn cong Cài đặt minh họa thuật toán vẽ đường cong Bezier qua (N+1) điểm kiểm soát #include #include #include #include #include #define MAXPOINTS #define MAXSEG 100 // So diem kiem soat toi da 100 // So diem toi da thuoc duong cong typedef struct { int x; int y; }POINT; // Kieu mang cac diem thuoc duong cong typedef POINT BEZPOINT[MAXSEG+1]; // Kieu mang cac diem kiem soat typedef POINT CTRLPOINT[MAXPOINTS+1]; // Kieu mang luu he so C(k, N) typedef long COEFF[MAXPOINTS+1]; // Tinh he so aCoeff[i] = C(k, n) = N!/k!*(N-k)! = (k+1)(k+2) N)/(N-k)!; // aCoeff co (N+1) phan tu danh so tu den N void ComputeCoefficient(COEFF aCoeff, int N) { for(int k=0; kk; j ) aCoeff[k] *= j; for(j=2; j