Tiếp nội dung phần 1, Bài giảng Đồ họa máy tính: Phần 2 cung cấp cho người học những kiến thức như: Các phép biến đổi hình học 3 chiều; Màu sắc trong đồ họa. Mời các bạn cùng tham khảo để nắm chi tiết nội dung giáo trình!
Đồ họa máy tính Chƣơng CÁC PHÉP BIẾN ĐỔI HÌNH HỌC CHIỀU 5.1 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 nhƣ 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 Ngồ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 5.1.1 Tổng quan đồ họa ba chiều Khi mơ hình hóa hiển thị cảnh ba chiều, 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 Ngồi ra, đơi 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 đƣợc 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 ta phải chọn lựa nhiều tham số mô tả cảnh ba chiều xuất hình nhƣ Hình 5.1 Một cảnh đồ họa ba chiều 123 Đồ họa máy tính 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 nhƣ 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 cảnh, ứng với hệ quan sát đƣợc chọn đó, phải đƣợc xác định cuối cùng, thuật toán vẽ mặt đƣợc áp dụng nhằm tạo hình ảnh trung thực (gần với thực tế) cảnh 5.1.2 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 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 đƣợc 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 đƣợc dùng để mơ tả 124 Đồ họa máy tính đối tƣợng tích (volume) Trong boundary representations(B-reps), đối tƣợng đƣợc định nghĩa bề mặt chúng Các mô hình thƣờng đƣợc biểu diễn hệ tọa độ cục bộ, mà ta gọi hệ tọa độ đối tƣợng Trong hệ tọa độ chỉcó thân đối tƣợng đƣợc định nghĩa, gốc tọa độ đơn vị đo lƣờng thƣờng đƣợc 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 đƣợ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) cần loại trừ tất đối tƣợng khơng thể nhìn thấy Điều giúp tránh đƣợc 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 phải chiếu sáng (illumination) đối tƣợng nhìn thấy đƣợc 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, cần thực phép biến đổi hệ tọa độ để đặt vị trí quan sát (viewing position) gốc tọa độvà 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 đƣợc 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 đƣợc 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 đƣợc ảnh Bƣớc 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, tồn cảnh đƣợc hiển thị lên hình 125 Đồ họa máy tính 5.1.3 Mơ hình khung nối kết (Wireframe Model) a 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ế Để hồ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 b Biểu diễn vật thể ba chiều mô hình khung nối kết Mơ hình khung nối kết, hình dạng đối tƣợng ba chiều đƣợc 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, cịn 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 Hãy quan sát vật thể ba chiều đƣợc biểu diễn mô hình khung nối kết nhƣ sau: Bảng danh sách cạnh đỉnh biểu diễn vật thể: Hình 5.3 Vật thể ba chiều biểu diễn mơ hình khung nối kết 126 Đồ họa máy tính Có nhiều cách để đặc tả mơ hình khung nối kết máy tính 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 nhƣ sau: #define MAXVERTS 50 //số đỉnh tối đa biểu diễn #define MAXEDGES 100 //số cạnh tối đa typedef struct { float x, y, z; } POINT3D; typedef struct { int NumVerts; //Số đỉnh mơ hình int NumEdges; //Số cạnh mơ hình 127 Đồ họa máy tính POINT3D Vert[MaxVerts]; int Edge[MaxEdges][2]; }WIREFRAME; Ngồi ra, đơi mơ hình wireframe ngƣời ta cịn mơ tả mặt (phẳng) đối tƣợng Mỗi mặt đƣợc định nghĩa đa giác bao Ví dụ, đối tƣợng hình 5.3 có mặt 5.2 Một số khái niệm 5.2.1 Phƣơng pháp biểu diễn điểm không gian chiều Việc biểu diễn hiển thị đối tƣợng không gian chiều sở tảng cho việc hiểu nắm bắt đƣợc hình dạng đối tƣợng Qua phép biểu diễn quan sát đƣợc đối tƣợng từ tất góc, nhƣ thao tác cách dễ dàng lên đối tƣợng Việc tƣơng tác nhƣ quay, tịnh tiến, tỉ lệ lên đối tƣợng phức tạp đơn giản cách nhấn chuột lên đối tƣợng kết đƣợc hiển thị hình Các đối tƣợng đồ họa 3D đƣợc mơ tả nhƣ tập điểm mặt phẳng Các điểm đƣợc biểu diễn thông qua tọa độ chúng viết dƣới dạng ma trận hay đƣợc gọi vector vị trí Có phƣơng pháp biểu diễn ma trận mà phép biến đổi đồ họa nhƣ bao gồm phƣơng pháp biểu diễn tọa độ theo ma trận hàng cột ma trận hàng cột x y z Tập điểm đƣợc lƣu trữ máy tính dƣới dạng ma trận hay chuỗi điểm mà vị trí chúng định hình dạng đƣờng thẳng, đƣờng cong hay ảnh dễ dàng kiểm sốt thơng qua phép biến đổi Phép biến đổi đồ họa đƣợc mô tả dƣới dạng ma trận tƣơng ứng cho phép thể biến đổi tọa độ điểm qua phép tốn nhân ma trận Điều tạo điều kiện thuận lợi cho ngƣời sử dụng hình dung nhƣ thao tác với đối tƣợng hình học cách dễ dàng tính mạnh đồ họa máy tính 128 Đồ họa máy tính 5.2.2 Phƣơng pháp biểu diễn sử dụng hệ tọa độ đồng Phép biểu diễn thông qua ma trận 3x3 thỏa mãn với phép biến đổi nhƣ quay, tỉ lệ, đối xứng, biến dạng Điều có nghĩa ln xây dựng đƣợc ma trận tổng hợp từ phép biến đổi thành phần Tuy nhiên phép tịnh tiến mặt phẳng chiều đƣợc mô tả phƣơng trình sau: x‘= x + tx y‘= y + ty z‘= z + tz khơng thể biểu diễn thông qua ma trận biến đổi 3x3 Nhƣ với q trình biến đổi mà tồn phép tịnh tiến khả đƣa ma trận biến đổi tổng hợp Điều buộc phải tìm giải pháp hữu hiệu mà phép biểu diễn điếm thông qua ma trận đồng giải pháp tối ƣu Phƣơng pháp biểu diễn mở rộng thông qua tọa độ đồng vector vị trí khơng đồng [x y z] ứng dụng phép chiếu hình học mà tọa độ điểm đƣợc mô tả dƣới dạng ma trận [hx hy hz h] h số thực tùy ý Để đơn giản chọn h = Vậy điểm mặt phẳng hệ tọa độ đồng có thành phần [x y z 1] Các phép biến đổi mặt phẳng đƣợc biểu diễn dƣới dạng [ X‘ ] = [X ] * [ T ] [ X‘] = [x‘ y‘ z‘ 1], [ X] = [x y z 1], [T] ma trận vng cấp Có thể cải tiến ma trận vuông cấp phép biến đổi thành ma trận vuông cấp mà không làm thay đổi đến phép biến đổi cách thêm hàng, cột vào ma trận 129 Đồ họa máy tính 5.2.3 Công thức biến đổi Affine Phép biến đổi affine phép biến đổi tuyến tính tọa độ điểm đặc trƣng đối tƣợng thành tập tƣơng ứng điểm để tạo hiệu ứng cho toàn đối tƣợng [ X‘ ] = [ X ] * [ M ] Với M4x4 ma trận biến đổi a b c p d e f q [ x' y' z' 1] [ x y z 1] * g i j r l m n s Một số tính chất phép biến đổi ba chiều : - Tính chất đƣờng thẳng đƣợc bảo toàn Nghĩa là, đƣờng thẳng không gian ba chiều biến đổi thành đƣờng thẳng - Tính song đƣợc bảo tồn Nghĩa là, hai đƣờng thẳng song biến đổi thành hai đƣờng thẳng song - Tính tỉ lệ khoảng cách đƣợc bảo toàn Nghĩa là, ảnh điểm P chia đoạn thẳng AB theo tỉ lệ f, chia đoạn thẳng A‘B‘ theo tỉ lệ f, với A‘B‘ ảnh đoạn thẳng AB Hình 5.4 Một cảnh ba chiều tạo nhờ phép biến đổi 130 Đồ họa máy tính 5.2.4 Các hệ trục tọa độ theo quy ƣớc bàn tay phải bàn tay trái Hệ tọa độ Descartes ba chiều định nghĩa theo quy ƣớc bàn tay trái bàn tay phải Hình 5.5(a)Các hệ tọa độ theo quy ước bàn tay phải, (b) quy ước bàn tay trái Định nghĩa: - Hệ tọa độ theo quy ƣớc bàn tay phải hệ tọa độ với trục x, y, z thỏa điều kiện: Nếu để bàn tay phải cho ngón hƣớng chiều với trục z, nắm tay lại, chiều ngón tay chuyển động theo hƣớng từ trục x đến trục y - Hệ tọa độ theo quy ƣớc bàn tay trái hệ tọa độ với trục x, y, z thỏa điều kiện: Nếu để bàn tay trái cho ngón hƣớng chiều với trục z, nắm tay lại, chiều ngón tay chuyển động theo hƣớng từ trục x đến trục y 5.3 Các phép biến đổi hình học chiều sở 5.3.1 Phép tịnh tiến Hình 5.6 Phép tịnh tiến với vector tịnh tiến tr=(trx, try, trz) Vector tịnh tiến tr phép biến đổi ba chiều có tác động trực quan: điểm đƣợc dịch khoảng trx, try, trz theo ba trục Công thức biến đổi: 131 Đồ họa máy tính x' x trx y ' y try z ' z trz Ma trận phép tịnh tiến có dạng nhƣ sau: 0 1 0 [T (trx, try, trz )] 0 trx try trz 0 0 0 1 5.3.2 Phép biến đổi tỉ lệ Phép biến đổi tỉ lệ ba chiều mở rộng phép biến đổi tỉ lệ hai chiều: Nếu thay đổi đối tƣợng tỉ lệ sx theo trục Ox, sy theo trục Oy sz theo trục Oz tọa độ đối tƣợng biến đổi theo công thức: x' x * Sx y ' y * Sy z ' z * Sz Ma trận biến đổi: Sx 0 0 Sy 0 S = 0 Sz 0 0 1 Trong số sx, sy, sz hệ số tỉ lệ tƣơng ứng theo trục x, y, z Hình 5.7 Phép biến đổi tỉ lệ Chú ý 132 Đồ họa máy tính // kiểm tra trường hợp ánh sáng khơng màu if( s = ) begin r = g = b = v; end; h /= 60; i = floor( h ); f = h - i; p = v * ( - s ); q = v * ( - s * f ); t = v * ( - s * ( - f ) ); // Xác định giá trị r, g, b if (i= 0) begin r = v; g = t; b = p; end; if (i=1) begin r = q; g = v; b = p; end; if (i= 2) begin r = p; g = v; b = t; 207 Đồ họa máy tính end; if (i= 3) begin r = p; g = q; b = v; end; if (i= 4) begin r = t; g = p; b = v; end; if (i=5) begin // case 5: r = v; g = p; b = q; end; End Giải thuật chuyển đổi từ RGB sang HSV procedure rgb_to_hsv () Begin h: Sắc độ màu [0-360] với màu đỏ điểm s: Độ bão hòa [0-1] v: Giá trị cường độ sáng [0-1] Max: Hàm lấy giá trị maximum Min: Hàm lấy giá trị minimum 208 Đồ họa máy tính //Xác định giá trị cường độ sáng rc = r / 255.0; gc =g / 255.0; bc = b / 255.0; max = MAX(rc, MAX(gc, bc)); = MIN(rc, MIN(gc, bc)); delta = max - min; //xác định giá trị cường độ sáng V=max; //Xác định độ bão hòa if (max 0.0) s = delta / max; else s = 0.0; //xác định sắc độ màu if (s = 0.0) begin h = 0.0; end; else begin // Màu nằm khoảng vàng đỏ tía(magenta) if (rc = max) h = (gc - bc) / delta; else //Màu nằm Vàng(yellow) khoảng xanh tím if (gc = max) h = + (bc - rc) / delta; 209 (cyan) Đồ họa máy tính else //Màu nằm khoảng đỏ tươi (magenta) xanh ngọc(cyan) if (bc = max) begin h = + (rc - gc) / delta; h=60*h; end; // Các loại giá trị âm if (h < 0)h += 360.0; end; End Giải thuật chuyển đổi từ HLS sang RGB procedure HSL2RGB(real h, sl, l) Begin real v; real r, g, b; h = h/360; r = l; // default to gray g = l; b = l; v = (l 0) begin real m; real sv; integer sextant; real fract, vsf, mid1, mid2; 210 Đồ họa máy tính m = l + l - v; sv = (v - m) / v; h *= 6.0; sextant = (int)h; fract = h - sextant; vsf = v * sv * fract; mid1 = m + vsf; mid2 = v - vsf; switch (sextant) begin case 0: r = v; g = mid1; b = m; break; case 1: r = mid2; g = v; b = m; break; case 2: r = m; g = v; b = mid1; break; case 3: r = m; g = mid2; b = v; 211 Đồ họa máy tính break; case 4: r = mid1; g = m; b = v; break; case 5: r = v; g = m; b = mid2; break; end; end; r = r*255; g = g*255; b = b*255 ; write("HSL to RGB\nR = ",r) ; write(" G = ",g); write(" B = ",b); End Giải thuật chuyển đổi từ RGB sang HLS procedure RGB2HSL(real R, G, B) Begin real r = R / 255.0; real g = G / 255.0; real b = B / 255.0; real v,m,vm; real r2, g2, b2; real h,s,l; 212 Đồ họa máy tính h = 0; s = 0; l = 0; v = MAX(r,g); v = MAX(v, b); m = MIN(r, g); m = MIN(m, b); l = (m + v) / 2.0; if (l 0.0) s /= (l