Bài giảng Đồ họa máy tính - Chương 6: Mô hình hóa đối tượng 3D bằng lưới đa giác
Lưới đa giác
Khối đa diện
Khối quét
Lưới xấp xỉ mặt cong
Mặt chứa cạnh thẳng
Mặt tròn xoay
Mặt bậc hai
Mặt siêu bậc hai
Mặt biểu diễn bởi hàm tường minh
Tóm tắt nội dung Bài giảng Đồ họa máy tính - Chương 6: Mô hình hóa đối tượng 3D bằng lưới đa giác, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ID * vert ; // the list of vertex and normal index Face() { nVerts = 0; vert = NULL; } ~Face() { delete[] vert ; nVerts = 0; } }; LƯỚI ĐA GIÁC TRONG CT class Mesh { private: int numVerts ; // number of vertices in the mesh Point3* pt; // array of 3D vertices int numNormals ; // number of normal vectors for the mesh Vector3* norm; // array of normals int numFaces ; // number of faces in the mesh Face* face ; // array of face data // ... others to be added later public: Mesh(); ~Mesh(); int readFile(char * fileName ); // ... others }; LƯỚI ĐA GIÁC TRONG CT void Mesh::draw () { for ( int f = 0; f < numFaces ; f++) { glBegin(GL_POLYGON ); for ( int v = 0; v < face[f].nVerts ; v++) { int in = face[f].vert[v].normIndex ; int iv = face[f].vert[v].vertIndex ; glNormal3f(norm[in].x, norm[in].y, norm[in].z); glVertex3f(pt[iv].x, pt[iv].y, pt[iv].z); } glEnd() ; } } LƯỚI ĐA GIÁC TRONG CT Ví dụ KHỐI ĐA DIỆN Định nghĩa : là lưới liên thông của các đa giác phẳng đơn giản . Các đa giác này bao bọc một kg giới hạn . Tính chất : (1) mỗi cạnh thuộc 2 mặt , (2) đỉnh là giao điểm của ít nhất 3 cạnh , (3) các mặt không xuyên qua nhau . Công thức Euler: (1) V + F – E = 2 (cube V=8,F=6,E=12), (2) V + F – E = 2 + H – 2G (H: tổng lỗ hổng nằm trên các mặt , G: tổng lỗ hỗng xuyên qua đa diện ) HÌNH LĂNG TRỤ VÀ PHẢN LĂNG TRỤ Hình lăng trụ : quét đa giác dọc theo đoạn thẳng . Khi d vuông góc với đa giác thì lăng trụ là lăng trụ đứng Lăng trụ đều : đa giác là đa giác đều Phản lăng trụ : đa giác đỉnh quay 180/n độ so với đáy KHỐI ĐA DIỆN ĐỀU (PLATONIC) Định nghĩa : các mặt bằng nhau và đều là đa giác đều số cạnh của mặt số mặt ở đỉnh KHỐI ĐA DIỆN ĐỀU (PLATONIC) Khối đa diện đều đối ngẫu : D là đối ngẫu của P thì đỉnh của D là tâm của P D nối tâm hai mặt kề nhau của P. D có số cạnh bằng số đỉnh của P và số đỉnh bằng số cạnh của P. Nếu P có giá trị Schlafli là (p, q) thì D có giá trị Schlafli là (q, p) KHỐI ĐA DIỆN ĐỀU (PLATONIC) Mô hình của khối đa diện đều - mặt 4 của lập phương gồm 1,5,6,2 đỉnh 4 của (c) là giao của các mặt 1,5,6,2 - tứ diện tự đối ngẫu danh sách các đỉnh của mặt k sẽ trùng với danh sách các mặt giao nhau tại k. KHỐI ĐA DIỆN ĐỀU (PLATONIC) Pháp tuyến của khối Platonic KHỐI ĐA DIỆN ĐỀU (PLATONIC) Khối tứ diện đều : có thể nội tiếp trong khối lập phương sao cho các đỉnh trùng với các đỉnh của lập phương , các cạnh nằm trên các mặt . Giả sử khối lập phương có các đỉnh là ( 1, 1, 1), một đỉnh của tứ diện là (1, 1, 1) KHỐI ĐA DIỆN ĐỀU (PLATONIC) Khối Platonic 20 mặt : xây dựng bằng dùng 3 hình chữ nhật vàng có cạnh dài bằng 1, cạnh ngắn là KHỐI ĐA DIỆN ĐỀU (PLATONIC) Khối Platonic 12 mặt : là khối đối ngẫu của khối Platonic 20 mặt đỉnh k của khối này nằm ở tâm mặt k của khối 20 mặt KHỐI ĐA DIỆN NỬA ĐỀU Các mặt vẫn là đa giác đều nhưng có nhiều loại mặt khác nhau : hình lập phương vát góc khối cầu bucky khối vòm geodesic KHỐI QUÉT Được tạo bằng cách quét một hình 2D trong không gian Hình lăng trụ : pháp tuyến đỉnh là pháp tuyến mặt Xây dựng lưới đa giác : xây dựng ds đỉnh xây dựng ds mặt pháp tuyến mặt được tính bằng phương pháp Newell KHỐI QUÉT Mảng các hình lăng trụ : một số thư viện đồ họa không vẽ được đa giác lõm khi đa giác là lõm thì cần phải tách nó thành tập đa giác lồi KHỐI QUÉT Quét kết hợp với xoắn : P = { p 0 , p 1 , ..., p N-1 } ( đáy ) P’ = {M p 0 , M p 1 , ..., M p N-1 } (đỉnh) ds mặt giữ nguyên , đỉnh và pháp tuyến thay đổi KHỐI QUÉT Xây dựng khối quét phân đoạn : gồm nhiều đoạn , mỗi đoạn có ma trận biến đổi riêng . Thiết kế hình ống dựa trên đường cong 3D C ( t ) = (cos( t ), sin( t ), bt ) KHỐI QUÉT Lấy mẫu C(t ) ở {t 0 , t 1 ...}, xây dựng đa giác eo nằm trong mặt phẳng vuông góc với đường cong ở C(t i ). Xây dựng hệ trục tọa độ sao cho trục z tiếp tuyến với đường cong Dùng C(t ) để xác định hệ tọa độ cục bộ - T(t i ) tiếp tuyến đc , N(t i ), B(t i ) vuông góc với T(t i ) - Ma trận M i biến đổi đa giác đáy thành đa giác eo - M i = ( N ( t i ) | B ( t i ) | T ( t i ) | C ( t i )) KHỐI QUÉT Tạo khung Frenet C’ ( t ) = ( C’ x ( t ), C’ y ( t ), C’ z ( t )) T (t ) là C’ ( t ) sau khi chuẩn hóa N ( t ) = B ( t ) T ( t ) KHỐI QUÉT Tạo khung Frenet bằng phương pháp tính VÍ DỤ C ( t ) = (( a + b cos( qt ))cos( pt ), ( a + b cos( qt ))sin( pt ), c sin( qt )) KHỐI QUÉT VÍ DỤ KHỐI QUÉT Dùng khối quét xấp xỉ mặt tròn xoay : phép biến đổi affine là phép quay, đc xương sống ở gốc tọa độ các điểm nằm trên đường gấp khúc thứ i là ( x j cos( i ), y j , x j sin( i )) LƯỚI XẤP XỈ MẶT CONG Phương pháp chung : “ đa giác hóa ” mặt cong, đỉnh và pháp tuyến được tính từ công thức của mặt cong. Biểu diễn mặt cong: dạng tham số : P ( u , v ) = ( X ( u , v ), Y ( u , v ), Z ( u , v )), dạng ẩn : F ( x , y , z ) = 0 hàm trong ngoài : điểm (x, y, z) nằm trên mặt cong nếu F ( x , y , z ) = 0 nằm bên trong nếu F ( x , y , z ) < 0 nằm bên ngoài nếu F ( x , y , z ) > 0 LƯỚI XẤP XỈ MẶT CONG Tìm vector pháp tuyến LƯỚI XẤP XỈ MẶT CONG Mặt cong được biểu diễn dưới dạng tham số (n có thể được chuẩn hóa nếu muốn ) Ví dụ : mặt phẳng P ( u , v ) = C + a u + b v n ( u , v ) = a b LƯỚI XẤP XỈ MẶT CONG Mặt cong được biểu diễn dưới dạng ẩn Ví dụ : dạng ẩn của mặt phẳng là : F ( x , y , z ) = n (( x , y , z ) – A ) = 0 hay: n x x + n y y + n z z - n A =0 pháp tuyến là ( n x , n y , n z ) CÁC MẶT CƠ SỞ Mặt cầu cơ sở : dạng ẩn F(x , y, z) = x 2 + y 2 + z 2 – 1 pháp tuyến (2x, 2y, 2z) dạng tham số P( u , v ) = (cos( v )cos( u ), cos( v )sin( u ), sin( v )) pháp tuyến n ( u , v ) = - cos( u , v ) p ( u , v ) CÁC MẶT CƠ SỞ Mặt trụ cơ sở : dạng ẩn F ( x , y , z) = x 2 + y 2 – (1 + ( s – 1 ) z ) 2 0< z <1 n ( x , y , z ) = ( x , y , -( s – 1)(1 + ( s -1) z )) dạng tham số P ( u , v ) = ((1 + ( s – 1) v )cos( u ), (1 + ( s – 1) v )sin( u ), v ) n ( u , v ) = (cos( u ), sin( u ), 1- s ) CÁC MẶT CƠ SỞ Mặt nón cơ sở - dạng ẩn : F ( x , y , z ) = x 2 + y 2 – (1 – z )2 = 0 0 < z < 1 n = ( x , y , 1 – z ) dạng tham số P ( u , v ) = ((1 – v ) cos( u ), (1 – v )sin( u ), v ) n(u , v) = (cos( u ), sin( u ), 1) XÂY DỰNG LƯỚI ĐA GIÁC Xây dựng lưới đa giác cho hình cầu : chia thành nhiều lát(stack ) và múi(slice ) u i = 2 i /nSlices với i = 0, 1, ..., nSlices -1 v j = /2 - j /nStacks, với j = 0, 1, ..., nStacks pháp tuyến norm[k ] chính là pt[k ] MẶT CHỨA CẠNH THẲNG Tồn tại ít nhất một đt thuộc mặt đi qua mỗi điểm Dạng biểu diễn tham số P ( u , v ) = (1- v ) P 0 ( u )+ vP 1 ( u ) P ( u , v ) = (1- v ) P 0 + vP 1 Mỗi hàm cho bởi 3 thành phần P 0 ( u ) = ( X 0 ( u ), Y 0 ( u ), Z 0 ( u )) MẶT CHỨA CẠNH THẲNG Mặt nón : P ( u , v ) = (1- v ) P 0 + vP 1 ( u ) P 0 là đỉnh của mặt nón Ví dụ : P 1 ( u ) = ( r ( u )cos( u ), r ( u )sin( u ), 1) r ( u ) = 0.5 + 0.2cos(5 u ) MẶT CHỨA CẠNH THẲNG Mặt trụ : P 1 ( u ) = P 0 ( u ) + d biểu diễn tham số : P ( u , v ) = P 0 ( u ) + d v MẶT CHỨA CẠNH THẲNG Mảnh tuyến tính đôi P 0 ( u ) = (1 - u ) P 00 + uP 01 P ( u , v ) = (1 - v )(1 - u ) P 00 + (1 - v ) uP 01 + v (1 - u ) P 10 + uvP 11 MẶT CHỨA CẠNH THẲNG Một số mặt chứa cạnh thẳng khác MẶT CHỨA CẠNH THẲNG Mảnh trộn tuyến tính đối : mảnh Coons tổng quát hóa của mặt chứa cạnh thẳng là mặt được tạo bởi 4 đường cong biên p u0 ( u ), p u1 ( u ), p 0v ( v ) và p 1v ( v ), với u và v nhận giá trị trong đoạn [0, 1] MẶT CHỨA CẠNH THẲNG Mảnh trộn tuyến tính đôi : cách xây dựng Công thức : P ( u , v ) = [ p 0v ( v )(1 - u ) + p 1v ( v ) u ] + [ p u0 ( u )(1 - v ) + p u1 ( u ) v ] - [(1 - u )(1 - v ) p 0v (0) + u (1 - v ) p 1v (0) + v (1 - u ) p 0v (1) + uvp 1v (1)] MẶT TRÒN XOAY Mặt tròn xoay được tạo bởi quét đc phẳng C (profile) xung quanh một trục Profile có phương trình C ( v ) = ( X ( v ), Z ( v )) khi quay quanh trục z góc u ( X ( v )cos( u ), X ( v )sin( u ), Z ( v )) Kinh tuyến : đc profile ở một thời điểm nào đó . Vĩ tuyến : một điểm bất kỳ thuộc đường cong khi quay một vòng . Phương trình tham số : P ( u , v ) = ( X ( v )cos( u ), X ( v )sin( u ), Z ( v )) Tiếp tuyến : n ( u , v ) = X ( v )( Z '( v )cos( u ), Z '( v )sin( u ), - X '( v )) MẶT TRÒN XOAY Ví dụ : đc profile: C ( v ) = ( D + A cos( v ), A sin( v )) P ( u , v ) = (( D + A cos( v ))cos( u ), ( D + A cos( v ))sin( u ), A sin( v )) MẶT BẬC HAI MẶT BẬC HAI MẶT BẬC HAI Lưu ý: - vết cắt : là giao của mặt phẳng với mặt cong. - vết cắt chính : khi mặt phẳng song song với mặt phẳng chính . - vết cắt là thiết diện nón Ellipsoid: hai tham số bằng nhau mặt tròn xoay ba tham số bằng nhau mặt cầu vết cắt là ellipse Hyperboloid một tầng a = b mặt tròn xoay vết cắt chính z = k là ellipse, hai vết cắt chính kia là hyperbola là mặt chứa cạnh thẳng MẶT BẬC HAI Hyperboloid hai tầng : a = b mặt tròn xoay vết cắt chính x = k là ellipse, hai vết cắt chính kia là hyperbola Elliptic Cone : a = b mặt tròn xoay mặt nón có đường sinh tựa trên ellipse là mặt chứa cạnh thẳng , vết cắt chính z = k là ellipse Elliptic Paraboloid : vết cắt chính z = k là ellipse a = b mặt tròn xoay MẶT BẬC HAI Hyperbolic Paraboloid : mặt yên ngựa là mặt chứa cạnh thẳng vết cắt với z = k là hyperbola, hai vết cắt kia là parabol Pháp tuyến của mặt bậc hai : Ví dụ : pháp tuyến của ellipsoid tính theo hàm ẩn F' = (2 x , 2 y , 2 z ) thay dạng biểu diễn ẩn của x, y và z n ( u , v ) = (cos( v )cos( u ), cos( v )sin( u ), sin( v )) MẶT SIÊU BẬC HAI MẶT SIÊU BẬC HAI MẶT BIỂU DIỄN BỞI HÀM TƯỜNG MINH Hàm đơn trị theo một trục tọa độ nào đó MẶT BIỂU DIỄN BỞI HÀM TƯỜNG MINH Dạng tham số : P ( u , v ) = ( u , f ( u , v ), v ) Pháp tuyến : n ( u , v ) = (- f / u , 1, - f / v )
File đính kèm:
- bai_giang_do_hoa_may_tinh_chuong_6_mo_hinh_hoa_doi_tuong_3d.ppt