Chương 2 tạo mô hình trong VRML các nút hình học cơ bản

24 278 0
Chương 2 tạo mô hình trong VRML các nút hình học cơ bản

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thực tại ảo (VR Virtual Reality) là công nghệ sử dụng các kỹ thuật mô hình hóa không gian, cùng với sự hỗ trợ của các thiết bị đa phương tiện để xây dựng một thế giới mô phỏng (môi trường ảo) bằng máy tính nhằm đưa người sử dụng vào một thế giới nhân tạo với không gian như thật. Người sử dụng sẽ không như người quan sát bên ngoài, mà trở thành một phần của hệ thống. Thế giới “nhân tạo” này không tĩnh tại, mà lại phản ứng, thay đổi theo ý muốn của người sử dụng nhờ hành động, lời nói,... Người sử dụng có thể nhìn thấy sự vật thay đổi trên màn hình theo ý muốn của họ và cảm nhận bằng các giác quan bởi sự mô phỏng này. Trong thực tế, người dùng không những nhìn thấy đối tượng đồ họa 3D nổi, điều khiển được đối tượng như quay, di chuyển,… trên màn hình, mà còn sờ và cảm thấy chúng như có thật. Ngoài khả năng nhìn (thị giác), nghe (thính giác), sờ (xúc giác), thực tại ảo còn có khả năng tạo các cảm giác khác như ngửi (khứu giác), nếm (vị giác), tuy nhiên hiện nay các cảm giác này ít được sử dụng đến. Hiện nay có khá nhiều khái niệm về thực tại ảo, một trong các định nghĩa được chấp nhận rộng rãi là của C. Burdea và P. Coiffet: “Thực tại ảo là một hệ thống giao diện cấp cao giữa người sử dụng và máy tính. Hệ thống này mô phỏng các sự vật và hiện tượng theo thời gian thực và tương tác với người sử dụng qua tổng hợp các kênh cảm giác. Đó là ngũ giác gồm: thị giác, thính giác, xúc giác, khứu giác, vị giác”.

Chương 2: Tạo mơ hình VRML 2.1 Các nút hình học Các đối tượng hình học giới ảo thường cấu tạo từ đối tượng hình học hình hộp, hình tròn, hình trụ, hình cầu … Và VRML cung cấp sẵn cho số đối tượng hình học đơn giản dạng nút Box (hình hộp), Cone (hình nón), Cylinder (hình trụ tròn), Sphere (hình cầu)… Nút Sharp nút sở dùng để chứa đối tượng hình học thơng qua “Geometry nodes” thuộc tính cần thể đối tượng hình học qua “Appearance nodes” Điều có nghĩa ta muốn tạo đối tượng nút hình dáng đối tượng phải tạo trước 2.1.1 Shape Shape { exposedField SFNode appearance NULL exposedField SFNode geometry NULL } Nút có hai trường appearance geometry dùng để tạo đối tượng kết xuất giới Trường appearance chứa nút Appearance xác định thuộc tính trực quan (ví dụ, material texture) để áp dụng cho đối tượng hình học chứa nút geometry Nút hình học định dựng cách áp dụng nút appearance Ví dụ #VRML V2.0 utf8 Group { children [ Transform { translation -3 0 children Shape { geometry Box {} appearance Appearance { material Material { diffuseColor 0 } } } } Transform { children Shape { geometry Sphere {} appearance Appearance { material Material { diffuseColor } } } } Transform { translation 0 children Shape { geometry Cone {} appearance Appearance { material Material { diffuseColor 0 } } } } ]} 2.1.2 Appearance Cú pháp Appearance { material texture NULL NULL textureTransform NULL } Xác định thuộc tính trực quan đối tượng hình học Giá trị trường khác NULL chứa nút có kiểu thích hợp Thuộc tính Material: Chứa nút Material Nếu trường material NULL không định tắt chiếu sáng (bỏ qua tất đèn dựng đối tượng) màu đối tượng khơng có ánh sáng (1,1,1) Texture: Chứa kiểu ImageTexture, MovieTexture, PixelTexture nút Texture Nếu NULL trường texture khơng định khơng tham chiếu texture Transform: Nếu định chứa nút TextureTransform Nếu trường texture NULL khơng định trường trường textureTransform khơng có hiệu lực Ví dụ: Shape { appearance Appearance { material Material { specularColor 1 shininess 0.2 } texture ImageTexture { url "marble.gif" } } geometry Sphere { radius 1.3 } } 2.1.3 WorldInfo { field MFString info [] field SFString title "" } Chứa thông tin giới Dùng cho mục đích tài liệu khơng có hiệu lực hiển thị hình ảnh trực quan hay hành vi giới Thuộc tính title: Dùng để lưu trữ tên tiêu đề giới để trình duyệt trình bày cho người sử dụng info: Chứa thông tin khác giới, chẳng hạn thông tin tác giả, quyền, dẫn 2.1.4 Hình hộp (Box) Cú pháp Box { # (0, ∞) size 2 } Xác định khối hộp lục diện tâm (0,0,0) hệ tọa độ địa phương Thuộc tính size X Y Z: Kích thước hình hộp (chiều rộng, chiều cao, chiều sâu) Mặc định giới hạn hộp đơn vị theo chiều, từ -1 đến Texture áp dụng riêng cho mặt hộp Nút Box xác định mặt ngồi Ví dụ: Shape { geometry Box{ size 2.0 2.0 2.0 } } 2.1.5 Hình cầu (Sphere) Cú pháp Sphere { radius # (0, ∞) } Xác định cầu có tâm tâm (0, 0, 0) hệ tọa độ địa phương Thuộc tính Radius: Bán kính mặt cầu >0.0 Khi áp dụng texture cho hình cầu, texture bao phủ toàn bề mặt, quấn ngược chiều kim đồng hồ từ phía sau Nút Sphere xác định bề mặt ngồi Để tạo hình dạng ellip ta dùng scale Ví dụ: Shape { geometry Sphere { radius 1.0 } } 2.1.6 Hình trụ (Cylinder) Cú pháp Cylinder { bottom TRUE height radius side TRUE top TRUE # (0, ∞) # (0, ∞) } Xác định hình trụ có đáy, tâm (0,0,0) hệ tọa độ địa phương, trục tâm định hướng dọc theo trục địa phương Y Mặc định hình trụ có kích thước “-1” đến “+1” ba chiều Thuộc tính: height: Chiều cao radius: Bán kính đáy side: Cho phép hay không tồn bề mặt top: Cho phép hay không tồn nắp bottom: Cho phép hay không tồn nắp Khi áp dụng texture mặt bên, texture phủ ngược chiều kim đồng hồ (từ xuống) mặt sau trụ Đường may thẳng đứng phía sau Đối với nắp dưới, vòng tròn cắt từ texture vng dán vào Nút Cylinder xác định bề mặt Khi nhìn từ bên kết khơng xác định Ví dụ: Shape { geometry Cylinder{ height 2.0 radius 1.0 bottom TRUE top TRUE side TRUE } } 2.1.7 Hình nón (Cone) Cú pháp Cone { bottomRadius # (0, ∞) height # (0, ∞) side TRUE bottom TRUE } Xác định hình nón tâm hệ trục tọa độ địa phương, trục trung tâm y Thuộc tính height: Chiều cao hình nón tính từ tâm Mặc định 2.0 bottomRadius: Bán kính đáy Mặc định 1.0 bottom TRUE / FALSE: Hiện / ẩn đáy side TRUE / FALSE: Tồn / khơng tồn mặt bên Nếu FALSE khơng đủ điều kiện để phát va chạm cảm biến Khi áp dụng texture lên bề mặt, texture phủ ngược chiều kim đồng hồ từ xuống dưới, mặt sau Texture có đường may thẳng đứng phía sau Đối với nắp đáy, vòng tròn cắt từ texture vuông dán vào Cone phụ thuộc vào bề mặt Khi nhìn từ bên kết khơng xác định Ví dụ Shape { geometry Cone { height 2.0 bottomRadius 1.0 bottom TRUE side TRUE } } 2.2 Các nút dựng mơ hình phức tạp 2.2.1 Text Cú pháp Text { string [] fontStyle NULL length # [0, ∞) [] maxExtent 0.0 # [0, ∞) } Xác định văn đặt mặt phẳng Z=0 hệ tọa độ địa phương Thuộc tính string [“Nội dung văn bản”]: Chứa xâu văn Xâu đặt cặp dấu “” length [N1 N2]: Độ dài xâu “string” maxExtent N: Giới hạn kéo dãn FontStyle:  family: Tên font  style BOLD / ITALIC / BOLDITALIC / PLAIN: Kiểu chữ  size M: Chiều cao chữ  spacing N: Khoảng cách dòng  justify BEGIN / MIDDLE / END: Canh lề trái / / phải cho dòng  horizontal TRUE / FALSE: Trình bày ngang / dọc hình  leftToRight TRUE / FALSE: Trình bày từ trái sang phải (TRUE) từ phải sang trái (FALSE)  topToBottom TRUE / FALSE: Trình bày từ xuống (TRUE) từ lên (FALSE) Nút Text không tham gia phát va chạm Ví dụ Shape { geometry Text{ string [“Hello” “VRML”] fontStyle FontStyle{ size family “ARIAL” style “BOLD” spacing justify “MIDDLE” horizontal TRUE leftToRight TRUE topToBottom TRUE } length [1 1] maxExtent 5.0 } } 2.2.2 IndexLineSet Cú pháp IndexedLineSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex exposedField SFNode color NULL exposedField SFNode coord NULL [] # [-1, ∞) field MFInt32 colorIndex field SFBool colorPerVertex TRUE field MFInt32 coordIndex [] # [-1, ∞) } Vẽ tập hợp đường thẳng hệ tọa độ không gian ba chiều với tập hợp màu tương ứng cho đường thẳng Thuộc tính coord  Chỉ đỉnh 3D tập đường thẳng chứa nút Coordinate  Coordinate nút xác định tập hợp điểm ảnh không gian (điểm đỉnh đường thẳng) Color  Xác định màu sắc điểm ảnh nút Coordinate  Số thành phần nút khơng thiết phải với số thành phần nút Coordinate Nếu trường color khác NULL, chứa nút Color màu áp dụng cho đường thẳng sau:  Nếu colorPerVertex FALSE  Nếu trường colorIndex không rỗng màu dùng cho đường IndexedLineSet Số mục trường colorIndex số đường IndexedLineSet Nếu số lớn trường colorIndex N nút Color số màu phải N+1 Trường colorIndex không chứa phần tử âm  Nếu trường colorIndex rỗng, màu sắc từ nút Color áp dụng cho đường IndexedLineSet theo thứ tự Số màu nút Color phải phù hợp với số đường  Nếu colorPerVertex TRUE  Nếu trường colorIndex không rỗng màu áp dụng cho điểm đỉnh IndexedLineSet, trường coordIndex dùng cung cấp tọa độ cho đỉnh từ nút Coordinate Trường colorIndex phải chứa số mục tương ứng trường coordIndex phải chứa dấu hiệu đường cuối (-1) tương ứng với trường coordIndex (Ví dụ: colorIndex [0 -1 1], coordIndex [0 -1 0]) Nếu số lớn trường colorIndex N số màu nút Color phải N+1  Nếu trường colorIndex rỗng, trường coordIndex dùng để chọn màu từ nút Color Nếu số lớn trường coordIndex N số màu nút Color phải N+1  Nếu trường color NULLvà Material định nghĩa cho Appearance ảnh hưởng tới IndexedLineSet, emissiveColor Material sử dụng để vẽ đường  Ví dụ: Vẽ tam giác màu đỏ #VRML V2.0 utf8 Shape{ appearance Appearance { material Material { emissiveColor 1.0 0.0 0.0 } } geometry IndexedLineSet{ coord Coordinate{ point [3.0 0.0 0.0, 0.0 4.0 0.0, 0.0 0.0 5.0] } coordIndex [0 0] colorPerVertex FALSE } } coordIndex: Trường bao gồm dãy số thứ tự cho điểm ảnh tạo nên đường thẳng  Ví dụ1: coordIndex [0 0] có nghĩa đường thẳng tạo điểm thứ nối với điểm thứ hai, điểm thứ hai nối với điểm thứ ba, điểm thứ ba nối với điểm thứ nhất, điểm ảnh xác định nút Coordinate  Một ví dụ 2: coordIndex [0 -1 0], kí hiệu “-1” cho biết hình ảnh tạo gồm hai đường thẳng: đường thẳng tạo điểm thứ nối với điểm thứ hai đường thẳng khác tạo điểm thứ ba nối với điểm thứ colorIndex o Chỉ định màu sắc cho điểm ảnh coordIndex colorPerVertex có giá trị TRUE o Chỉ định màu sắc cho đường thẳng coordIndex colorPerVertex có giá trị FALSE o Trường lấy màu sắc quy định từ nút Color o Ví dụ1 colorIndex [0 1], coordIndex [0 0] colorPerVertex TRUE  xác định màu sắc thứ cho điểm thứ điểm thứ ba, màu sắc thứ hai cho điểm thứ hai thứ tư o Ví dụ 2: colorIndex [0 1], coordIndex [0 -1 0] colorPerVertex FALSE đường thẳng nối hai điểm thứ thứ hai có màu thứ nhất, đường thẳng nối hai điểm thứ tư thứ năm có màu sắc thứ hai ColorPerVertex o Nếu giá trị TRUE màu đường thẳng màu trung bình hai màu hai điểm tạo nên đường thẳng o Nếu giá trị FALSE đường thẳng có màu đơn lẻ màu mặc định (trắng) Đường thẳng không dùng chiếu sáng, không dùng texture, không tham gia vào phát va chạm Chiều rộng đường thẳng phụ thuộc thực thi(độ phân giải hình,…) Ví dụ Shape{ appearance Appearance{} geometry IndexedLineSet{ coord Coordinate{ point [3.0 0.0 0.0, 0.0 4.0 0.0, 0.0 0.0 5.0] } color Color{ color [1.0 0.0 0.0, 0.0 0.0 1.0] } colorIndex [0 1] coordIndex [0 0] colorPerVertex TRUE } } 2.2.3 IndexFaceSet Cú pháp IndexedFaceSet { eventIn MFInt32 set_colorIndex eventIn MFInt32 set_coordIndex eventIn MFInt32 set_normalIndex eventIn MFInt32 set_texCoordIndex exposedField SFNode color NULL exposedField SFNode coord NULL exposedField SFNode normal NULL exposedField SFNode texCoord field SFBool ccw TRUE field MFInt32 colorIndex [] # [-1, ∞) field SFBool colorPerVertex TRUE NULL field SFBool convex TRUE field MFInt32 coordIndex [] # [-1, ∞) field SFFloat creaseAngle # [0, ∞) field MFInt32 normalIndex [] # [-1, ∞) field SFBool normalPerVertex TRUE field SFBool solid TRUE field MFInt32 texCoordIndex [] # [-1, ∞) } Nút IndexedFaceSet mơ tả hình dạng 3D hình thành cách xây dựng bề mặt (đa giác) từ điểm đỉnh Mỗi bề mặt IndexedFaceSet có Ít đỉnh khơng trùng Các đỉnh xác định đa giác phẳng Các đỉnh xác định đa giác không tự giao Nếu không kết khơng xác định Thuộc tính coord Chỉ đỉnh 3D tập đường thẳng chứa nút Coordinate Coordinate nút xác định tập hợp điểm ảnh không gian Color  Nút xác định màu sắc điểm ảnh nút Coordinate  Số thành phần nút không thiết phải với số thành phần nút Coordinate  Nếu trường color khơng NULL chứa nút Color áp dụng cho đỉnh bề mặt IndexedFaceSet sau:  Nếu colorPerVertex FALSE màu áp dụng cho mặt  Nếu trường colorIndex không rỗng, màu sắc sử dụng cho bề mặt IndexedFaceSet Trong trường colorIndex phải có số tương ứng số bề mặt IndexedFaceSet Nếu số lớn trường colorIndex N phải N+1 màu nút Color Trường colorIndex không chứa thành phần có giá trị âm  Nếu trường colorIndex rỗng màu áp dụng cho bề mặt IndexedFaceSet theo thứ tự Số màu nút Color tương ứng với bề mặt  Nếu colorPerVertex TRUE, màu áp dụng với đỉnh sau:  Nếu trường colorIndex không rỗng, màu sắc áp dụng cho đỉnh IndexedFaceSet xác tương ứng với trường coordIndex Trường colorIndex phải chứa số tương ứng với trường coordIndex phải chứa dấu hiệu bề mặt cuối (-1) tương ứng với trường coordIndex Nếu số lớn trường coordIndex N màu nút Color phải N+1  Nếu trường colorIndex rỗng, trường coordIndex sử dụng để lựa chọn màu sắc từ nút Color Nếu số lớn trường coordIndex N phải có N+1 màu nút Color  Nếu trường color NULL hình dựng bình thường cách dùng Material texture định nghĩa nút Appearance coordIndex: Trường bao gồm dãy số thứ tự cho điểm ảnh tạo nên đường thẳng  Ví dụ1: coordIndex [0 0] có nghĩa đường thẳng tạo điểm thứ nối với điểm thứ hai, điểm thứ hai nối với điểm thứ ba, điểm thứ ba nối với điểm thứ nhất, điểm ảnh xác định nút Coordinate  Ví dụ 2: coordIndex [0 -1 0], kí hiệu “-1” cho biết hình ảnh tạo gồm hai đường thẳng: đường thẳng tạo điểm thứ nối với điểm thứ hai đường thẳng khác tạo điểm thứ ba nối với điểm thứ ColorPerVertex  Nếu giá trị TRUE màu đường thẳng màu trung bình hai màu hai điểm tạo nên đường thẳng  Nếu giá trị FALSE đường thẳng có màu đơn lẻ màu mặc định (trắng) Convex: Định nghĩa bề mặt lồi hay lõm Solid  Cho phép mặt phẳng tạo nhìn từ hai phía mặt phẳng khơng  Ví dụ solid FALSE tức cho phép nhìn mặt phẳng hai phía, solid TRUE cho phép nhìn mặt phẳng phía  normal  Nếu trường normal khơng NULL chứa nút Normal mà normal áp dụng cho đỉnh bề mặt IndexedFaceSet cách xác tương đương với mô tả để áp dụng màu cho đỉnh/bề mặt ( normalPerVertex tương ứng với colorPerVertex normalIndex tương ứng với colorIndex )  Nếu trường nomal NULL, trình duyệt tự động tạo normal, sử dụng creaseAngle để xác định cách normal làm phẳng quanh đỉnh texCoordIndex: Nếu trường texCoordIndex khơng NULL, chứa nút TextureCoordinate Texture nút áp dụng cho đỉnh IndexedFaceSet sau:  Nếu trường texCoordIndex không rỗng, sử dụng để chọn texture coordinate cho đỉnh IndexedFaceSet tương ứng trường coordIndex dùng để chọn coordinate cho đỉnh từ nút Coordinate texCoordIndex phải chứa sốtương ứng trường coordIndex phải chứa dấu hiệu kết thuc bề mặt (-1) tương ứng vói trường coordIndex.Nếu số lớn trường texCoordIndex N phải có N+1 texture nút TextureCoordinate  Nếu trường texCoordinate rỗng, mảng coordIndex dùng để chọn texture từ nút TextureCoordinate Nếu số lớn trường coordIndex N phải có N+1 texture coordinate nút TextureCoordinate  Nếu trường texCoord NULL, texture mặc định tính cách sử dụng hộp bao shape hệ tọa độ địa phương Chiều lớn hộp bao xác định coordinate S, chiều dài tiếp xác định coordinate T Nếu hai tất các chiều hộp bao nhau, ràng buộc bị phá vỡ cách chọn chiều X, Y, Z theo thứ tự ưu tiên Giá trị coordiante S từ đến 1, từ cuối hộp bao đến hộp khác Coordinate T dao động tỉ lệ chiều lớn thứ hai hộp với chiều lớn hộp bao Ví dụ1 Shape { appearance Appearance{} geometry IndexedFaceSet { coord Coordinate { point [0 0,1 0,0 0,1 0,1 0,1 1] } coordIndex [0 -1 5] color Color { color [1 1,1 0] } colorIndex [1 0] colorPerVertex FALSE convex FALSE solid FALSE } } Ví dụ2 #VRML V2.0 utf8 Viewpoint { description "Initial view" position 0 } NavigationInfo { type "EXAMINE" } # Three IndexedFaceSets, showing: # - Color applied per-face, indexed # - Color applied per-vertex # - Texture coordinates applied per-vertex # A dodecahedron: 20 vertices, 12 faces # colors (primaries:RGB and complements:CMY) mapped to the faces Transform { translation -1.5 0 children Shape { appearance DEF A Appearance { material Material { } } geometry DEF IFS IndexedFaceSet { coord Coordinate { point [ # Coords/indices derived from "Jim Blinn's Corner" 1 1, 1 -1, -1 1, -1 -1, -1 1, -1 -1, -1 -1 1, -1 -1 -1, 618 1.618 0, -.618 1.618 0, 618 -1.618 0, -.618 -1.618 0, 1.618 618, 1.618 -.618, -1.618 618, -1.618 -.618, 618 1.618, -.618 1.618, 618 -1.618, -.618 -1.618 ] } coordIndex [ 12 13 -1, 15 14 -1, 10 13 12 -1, 11 14 15 -1, 12 16 17 -1, 13 19 18 -1, 14 17 16 -1, 15 18 19 -1, 16 -1, 17 11 10 -1, 18 -1, 19 10 11 -1, ] color Color { # Six colors: color [ 0 1, 0, 1, 0, 1, 1 ] } colorPerVertex FALSE # Applied to faces, not vertices # This indexing gives a nice symmetric appearance: colorIndex [ 0, 1, 1, 0, 2, 3, 3, 2, 4, 5, 5, ] # Five texture coordinates, for the five vertices on each face # These will be re-used by indexing into them appropriately texCoord TextureCoordinate { point [ # These are the coordinates of a regular pentagon: 0.654508 0.0244717, 0.0954915 0.206107 0.0954915 0.793893, 0.654508 0.975528, 0.5, ] } # And this particular indexing makes a nice image: texCoordIndex [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ] } } } # A tetrahedron, with a color at each vertex: Transform { translation 1.5 -1.5 children Shape { appearance USE A # Use same dflt material as dodecahedron geometry IndexedFaceSet { coord Coordinate { point [ # Coords/indices derived from "Jim Blinn's Corner" 1 1, -1 -1, -1 -1, -1 -1 1, ] } coordIndex [ -1, -1, -1, -1, ] color Color { # Four colors: color [ 0, 1 1, 0 1, 0 ] } # Leave colorPerVertex field set to TRUE # And no indices are needed, either each coordinate point # is assigned a color (or, to think of it another way, the same # indices are used for both coordinates and colors) } } } # The same dodecahedron, this time with a texture applied # The texture overrides the face colors given Transform { translation 1.5 1.5 children Shape { appearance Appearance { texture ImageTexture { url "Pentagon.gif" } material Material { } } geometry USE IFS } } 2.2.4 ElevationGrid Cú pháp ElevationGrid { eventIn MFFloat set_height exposedField SFNode color NULL exposedField SFNode normal NULL exposedField SFNode texCoord field MFFloat height field SFBool ccw NULL [] TRUE # (- ∞, ∞) field SFBool colorPerVertex TRUE field SFFloat creaseAngle field SFBool normalPerVertex TRUE field SFBool solid field SFInt32 xDimension field SFFloat xSpacing field SFInt32 zDimension field SFFloat zSpacing # [0, ∞] TRUE # [0, ∞) 1.0 # (0, ∞) # [0, ∞) 1.0 # (0, ∞) } Nút ElevationGrip cho phép xây dựng lưới hình chữ nhật có chiều cao khác mặt phẳng Y=0 hệ tọa độ địa phương Hình dạng lưới xác định mảng giá trị chiều cao (xác định chiều cao điểm lưới) Vị trí đỉnh xác định trường height, xSpacing zSpacing Nút hữu ích cho việc xây dựng mạng lưới địa hình Nên chia cảnh thành vùng để tối ưu vẽ Điểm bắt đầu gốc tọa độ, điểm lại tạo nên lưới nằm theo hướng dương trục OX OZ Thuộc tính Color  Xác định màu sắc cho điểm đỉnh cạnh tứ giác nút ElevationGrid dựa vào giá trị colorPerVertex  Nếu color NULL, nút ElevationGrid dựng với thuộc tính nút Shape ColorPerVertex  Xác định màu sắc quy định trường color áp dụng cho đỉnh cạnh tứ giác nút ElevationGrid  Nếu ColorPerVertex FALSE trường color không NULL, trường color rõ nút Color chứa (xDimension-1)×(zDimension-1) màu  Nếu ColorPerVertex TRUE trường color không NULL, trường color nút Color chứa (xDimension)×(zDimension) màu Normal  Xác định normals đỉnh cạnh tứ giác cho ElevationGrid Nếu trường normal NULL, trình duyệt tự động tạo normal  Nếu normalPerVertex TRUE trường normal không NULL, trường normal xác định nút Normal chứa xDimension × zDimension normal texCoord  Xác định texture đỉnh nút ElevationGrid  Nếu texCoord NULL, texture mặc định áp dụng Texture mặc định có cận từ (0,0) đỉnh đến (1,1) đỉnh cuối  S texture theo trục X T texture theo trục Z  Nếu texCoord khơng NULL, xác định nút TextureCoordinate chứa (xDimension)×(zDimension) texture Ccw, solid, creaseAngle  Mô tả Shape  Mặc định, tứ giác định nghĩa theo ngược chiều kim đồng hồ Do đó, thành phần Y normal dương Thiết lập trường ccw FALSE đảo ngược hướng normal Mặt sau hủy kích hoạt trường solid TRUE xDimension: Chỉ số điểm phần tử mảng height lưới theo trục X xDimension>=0 zDimension: Chỉ số điểm phần tử mảng height lưới theo trục Z zDimension>=0 xSpacing: Là khoảng cách đỉnh liên trục X zSpacing: Là khoảng cách đỉnh liên trục Z height: Chứa danh sách giá trị độ cao điểm lưới solid TRUE khơng cho phép nhìn từ lên mạng lưới tạo Các điểm tính theo thứ tự từ trái sang phải từ xuống Các ánh xạ kết cấu tạo kết cấu ngược lại nhìn từ trục +Z Để định hướng kết cấu trực quan ta dùng nút TextureTransform đảo ngược kết cấu Shape { appearance Appearance { textureTransform TextureTransform { scale -1 } } geometry ElevationGrid { } } Ví dụ Shape { appearance Appearance { material Material {} } geometry ElevationGrid { xDimension zDimension xSpacing 1.0 xSpacing 1.0 solid TRUE height [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 2.0, 0.0, 2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 3.0, 1.0, 0.0, 0.0, 0.0, 1.0, 2.0, 3.0, 3.5, 3.0, 2.0, 1.0, 0.0, 0.0, 0.0, 1.0, 3.0, 3.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ] } } 2.2.5 Extrusion Cú pháp Extrusion { eventIn MFVec2f set_crossSection eventIn MFRotation set_orientation eventIn MFVec2f set_scale eventIn MFVec3f set_spine field SFBool beginCap field SFBool ccw field SFBool convex field SFFloat creaseAngle field MFVec2f TRUE TRUE TRUE crossSection [ 1, -1, -1 -1, # (- ∞, ∞) -1 1, 1 ] field SFBool endCap TRUE field MFRotation orientation field MFVec2f field SFBool field MFVec3f } scale solid spine # [0, ∞) 0010 11 # [-1,1],(- ∞, ∞) # (0, ∞) TRUE [ 0 0, ] # (- ∞, ∞) 2.2.6 PointSet Cú pháp PointSet { exposedField SFNode color NULL exposedField SFNode coord NULL } Xác định tập điểm 3D hệ tọa độ địa phương với màu sắc điểm Thuộc tính coord: Xác định nút Coordinate Kết không xác định trường coord xác định nút có kiểu khác PointSet sử dụng tọa độ theo thứ tự Nếu trường coord NULL, tập điểm coi rỗng color  Nếu trường color khơng NULL, xác định nút Color chứa số màu tương ứng với số điểm chứa nút coord Kết không xác định trường color xác định kiểu khác nút Màu sắc áp dụng cho điểm theo thứ tự Kết không xác định số giá trị nút Color số giá trị nút Coordinate  Nếu trường color NULL có nút Material định nghĩa cho nút Appearance ảnh hưởng đến nút PointSet, emissiveColor nút Material dùng để vẽ điểm  PoitSet không áp dụng chiếu sáng, texture, không tham gia phát va chạm Kích thước điểm phụ thuộc vào việc thực thi(độ phân giải hình,…) Ví dụ #VRML V2.0 utf8 DEF T Transform { children [ Shape { geometry PointSet { coord DEF C Coordinate { point [ -1 2, 0, -2 -1, -4 0, -2 -1, -2 1, -6 ] } color Color { color [ 0, 0, 0 1, 1 0, 1, 1, 1 ] } } } Transform { rotation 0 1.57 children Shape { appearance Appearance { material Material { diffuseColor 1 # ignored emissiveColor 1 # used for point color } } geometry PointSet { coord USE C } } } DEF TS TimeSensor { stopTime -1 loop TRUE cycleInterval 1.0 } DEF OI OrientationInterpolator { key [ ] keyValue [ 0, 3.14, 6.27 ] } ]} #ROUTE TS.fraction_changed TO OI.set_fraction #ROUTE OI.value_changed TO T.rotation ... 2. 0, 0.0, 2. 0, 2. 0, 2. 0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.0, 3.0, 3.0, 1.0, 0.0, 0.0, 0.0, 1.0, 2. 0, 3.0, 3.5, 3.0, 2. 0, 1.0, 0.0, 0.0, 0.0, 1.0, 3.0, 3.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2. 0, 2. 0, 2. 0,... kết khơng xác định Ví dụ Shape { geometry Cone { height 2. 0 bottomRadius 1.0 bottom TRUE side TRUE } } 2. 2 Các nút dựng mơ hình phức tạp 2. 2.1 Text Cú pháp Text { string [] fontStyle NULL length... thực thi(độ phân giải hình, …) Ví dụ #VRML V2.0 utf8 DEF T Transform { children [ Shape { geometry PointSet { coord DEF C Coordinate { point [ -1 2, 0, -2 -1, -4 0, -2 -1, -2 1, -6 ] } color Color

Ngày đăng: 25/04/2020, 18:43

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan