1. Trang chủ
  2. » Công Nghệ Thông Tin

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

24 283 0

Đ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ông tin cơ bản

Định dạng
Số trang 24
Dung lượng 425,48 KB

Nội dung

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”.

Trang 1

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

Các đối tượng hình học trong thế giới ảo thường được cấu tạo từ các đối tượng hình học

cơ bản như hình hộp, hình tròn, hình trụ, hình cầu … Và VRML cung cấp sẵn cho chúng ta

một số các đối tượng hình học đơn giản đó dưới dạng các nút như Box (hình hộp), Cone (hình nón), Cylinder (hình trụ tròn), Sphere (hình cầu)…

Nút Sharp là nút cơ sở dùng để chứa các đối tượng hình học thông qua “Geometry

nodes” và các thuộc tính cần thể hiện của đối tượng hình học đó qua “Appearance nodes” Điều đó có nghĩa nếu ta muốn tạo ra bất kỳ một đối tượng nào thì nút hình dáng của đối tượng

đó phải được tạo ra trước

2.1.1 Shape

Shape {

exposedField SFNode appearance NULL

exposedField SFNode geometry NULL

}

Nút này có hai trường appearance và geometry được dùng để tạo đối tượng kết xuất trong thế

giới

Trường appearance chứa nút Appearance xác định các thuộc tính trực quan (ví dụ, material

và texture) để áp dụng cho đối tượng hình học chứa trong nút geometry Nút hình học chỉ

Trang 2

material Material { diffuseColor 0 1 0 }

Material: Chứa nút Material Nếu trường material là NULL hoặc không được chỉ

định sẽ tắt chiếu sáng (bỏ qua tất cả các đèn khi dựng đối tượng) và màu của đối tượng không có ánh sáng là (1,1,1)

Texture: Chứa một trong các kiểu ImageTexture, MovieTexture, hoặc PixelTexture

của nút Texture Nếu là NULL hoặc trường texture không được chỉ định thì không tham chiếu

texture Transform: Nếu được chỉ định sẽ chứa nút TextureTransform Nếu trường

texture NULL hoặc không được chỉ định trường thì trường textureTransform không có hiệu lực

Trang 3

field MFString info []

field SFString title ""

Trang 4

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

của hộp 2 đơn vị theo mỗi chiều, từ -1 đến 1

Texture áp dụng riêng cho mỗi mặt của hộp

Trang 5

side: Cho phép hay không tồn tại bề mặt

top: Cho phép hay không tồn tại nắp trên

bottom: Cho phép hay không tồn tại nắp dưới

Trang 6

Khi áp dụng texture ở mặt bên, texture phủ ngược chiều kim đồng hồ (từ trên xuống) bắt đầu

từ mặt sau trụ Đường may thẳng đứng phía sau

Đối với nắp trên và dưới, một vòng tròn được cắt ra từ texture vuông rồi dán vào

Nút Cylinder chỉ xác định ngoài bề mặt Khi nhìn từ bên trong thì kết quả là không xác định

Ví dụ:

Shape {

geometry Cylinder{

height 2.0 radius 1.0 bottom TRUE top TRUE side TRUE }

Trang 7

Xác định hình nón tại tâm của hệ trục tọa độ địa phương, trục trung tâm là y

Thuộc tính

height: Chiều cao của hình nón tính từ tâm Mặc định là 2.0

bottomRadius: Bán kính của đáy Mặc định là 1.0

bottom TRUE / FALSE: Hiện / ẩn đáy

side TRUE / FALSE: Tồn tại / không tồn tại mặt bên Nếu là FALSE thì không đủ

điều kiện để phát hiện va chạm hoặc cảm biến

Khi áp dụng texture lên bề mặt, texture phủ ngược chiều kim đồng hồ từ trên xuống dưới, bắt đầu từ mặt sau Texture có đường may thẳng đứng phía sau

Đối với nắp đáy, một vòng tròn được cắt ra từ texture vuông và dán vào

Cone chỉ phụ thuộc vào bề mặt Khi nhìn từ bên trong thì kết quả 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

Trang 8

string [“Nội dung văn bản”]: Chứa xâu văn bản Xâu đặt giữa cặp dấu “”

length [N1 N2]: Độ dài của các xâu trong “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 của chữ

 spacing N: Khoảng cách giữa các dòng

 justify BEGIN / MIDDLE / END: Canh lề trái / giữa / phải cho các

dòng

 horizontal TRUE / FALSE: Trình bày ngang / dọc màn hình

 leftToRight TRUE / FALSE: Trình bày từ trái sang phải (TRUE) hoặc

từ phải sang trái (FALSE)

 topToBottom TRUE / FALSE: Trình bày từ trên xuống dưới (TRUE)

hoặc từ dưới lên trên (FALSE)

Nút Text không tham gia phát hiện va chạm

Ví dụ

Shape {

geometry Text{

string [“Hello” “VRML”]

Trang 9

fontStyle FontStyle{

size 1 family “ARIAL”

style “BOLD”

spacing 1 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

field MFInt32 colorIndex [] # [-1, ∞)

field SFBool colorPerVertex TRUE

field MFInt32 coordIndex [] # [-1, ∞)

 Chỉ ra các đỉnh 3D của tập đường thẳng chứa trong nút Coordinate

 Coordinate là nút xác định một tập hợp các điểm ảnh trong không gian (điểm đỉnh của đường thẳng)

Color

 Xác định màu sắc tại các điểm ảnh trong nút Coordinate

Trang 10

 Số thành phần trong nút này có thể không nhất thiết phải bằng với số thành phần trong nút Coordinate

Nếu trường color khác NULL, nó chứa nút Color và màu được áp dụng cho đường thẳng như sau:

 Nếu colorPerVertex là FALSE

 Nếu trường colorIndex không rỗng màu được dùng cho mỗi đường của IndexedLineSet Số chỉ mục của trường colorIndex như số đường trong IndexedLineSet Nếu chỉ

số lớn nhất của trường colorIndex là N thì trong nút Color số màu phải là N+1 Trường colorIndex không chứa phần tử âm

 Nếu trường colorIndex là rỗng, màu sắc từ nút Color sẽ được áp dụng cho mỗi đường của IndexedLineSet theo thứ tự Số màu trong nút Color phải phù hợp với số đường

 Nếu colorPerVertex là TRUE

 Nếu trường colorIndex không rỗng màu được áp dụng cho mỗi điểm đỉnh của IndexedLineSet, trường coordIndex được dùng cung cấp tọa độ cho mỗi đỉnh từ nút Coordinate Trường colorIndex phải chứa số chỉ mục tương ứng trường coordIndex và phải chứa dấu hiệu của đường cuối cùng (-1) tương ứng với trường coordIndex (Ví dụ: colorIndex [0 1 -1 0 1], coordIndex [0 1 -1 2 0]) Nếu chỉ số lớn nhất của trường colorIndex là N thì số màu của nút Color phải là N+1

 Nếu trường colorIndex là rỗng, trường coordIndex được dùng để chọn màu từ nút Color Nếu chỉ số lớn nhất trong trường coordIndex là N thì số màu trong nút Color phải là N+1

 Nếu trường color là NULLvà Material được định nghĩa cho Appearance sẽ ảnh hưởng tới IndexedLineSet, emissiveColor của Material sẽ được sử dụng để vẽ đường

 Ví dụ: Vẽ tam giác màu đỏ

#VRML V2.0 utf8 Shape{

appearance Appearance { material Material {

Trang 11

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 1 2 0]

colorPerVertex FALSE }

 Một ví dụ 2: coordIndex [0 1 -1 2 0], kí hiệu “-1” cho biết hình ảnh được tạo gồm hai đường thẳng: một đường thẳng tạo bởi điểm thứ nhất nối với điểm thứ hai và một đường thẳng khác tạo bởi điểm thứ ba nối với điểm thứ nhất

o Trường này lấy màu sắc được quy định từ nút Color

o Ví dụ1 colorIndex [0 1 0 1], coordIndex [0 1 2 0] và colorPerVertex

TRUE  xác định tại màu sắc thứ nhất cho điểm thứ nhất và điểm thứ

ba, màu sắc thứ hai cho điểm thứ hai và thứ tư

o Ví dụ 2: colorIndex [0 1 0 1], coordIndex [0 1 -1 2 0] và colorPerVertex

FALSE thì đường thẳng nối hai điểm thứ nhất và thứ hai sẽ có màu thứ nhất, đường thẳng nối hai điểm thứ tư và thứ năm sẽ có màu sắc thứ hai

ColorPerVertex

o Nếu giá trị là TRUE thì màu của đường thẳng sẽ là màu trung bình của hai màu tại hai điểm tạo nên đường thẳng

Trang 12

o Nếu giá trị là FALSE thì các đường thẳng đều có màu đơn lẻ hoặc 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 hiện va chạm Chiều rộng của đường thẳng phụ thuộc khi thực thi(độ phân giải màn hình,…)

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 NULL

field SFBool ccw TRUE

field MFInt32 colorIndex [] # [-1, ∞)

field SFBool colorPerVertex TRUE

Trang 13

field SFBool convex TRUE

field MFInt32 coordIndex [] # [-1, ∞)

field SFFloat creaseAngle 0 # [0, ∞)

field MFInt32 normalIndex [] # [-1, ∞)

field SFBool normalPerVertex TRUE field SFBool solid TRUE

field MFInt32 texCoordIndex [] # [-1, ∞)

Các đỉnh xác định đa giác không tự giao nhau

Nếu không thì kết quả không xác định

Thuộc tính

coord

Chỉ ra các đỉnh 3D của tập đường thẳng chứa trong nút Coordinate

Coordinate là nút xác định một tập hợp các điểm ảnh trong không gian

Color

 Nút này xác định màu sắc tại các điểm ảnh trong nút Coordinate

 Số thành phần trong nút này có thể không nhất thiết phải bằng với số thành phần trong nút Coordinate

 Nếu trường color không là NULL nó chứa một nút Color áp dụng cho

đỉnh hoặc bề mặt IndexedFaceSet như sau:

 Nếu colorPerVertex là FALSE màu được áp dụng cho mỗi mặt

 Nếu trường colorIndex không rỗng, màu sắc sử dụng cho từng bề mặt của IndexedFaceSet Trong trường colorIndex phải có chỉ số

tương ứng số bề mặt trong IndexedFaceSet Nếu chỉ số lớn nhất

trong trường colorIndex là N thì phải là N+1 màu trong nút Color Trường colorIndex không được chứa thành phần có giá trị âm

 Nếu trường colorIndex là rỗng thì màu áp dụng cho từng bề mặt

của IndexedFaceSet theo thứ tự Số màu trong nút Color tương ứng với các bề mặt

 Nếu colorPerVertex là TRUE, màu được áp dụng với mỗi đỉnh như sau:

Trang 14

 Nếu trường colorIndex không rỗng, màu sắc áp dụng cho từng

đỉnh của IndexedFaceSet chính xác tương ứng với trường

coordIndex Trường colorIndex phải chứa các chỉ số tương ứng với trường coordIndex và phải chứa dấu hiệu của bề mặt cuối (-1)

tương ứng với trường coordIndex Nếu chỉ số lớn nhất trong

trường coordIndex là N thì màu trong nút Color phải là N+1

 Nếu trường colorIndex rỗng, trường coordIndex được sử dụng để

lựa chọn màu sắc từ nút Color Nếu chỉ số lớn nhất trong trường

coordIndex là N thì phải có N+1 màu trong nút Color

 Nếu trường color là NULL hình sẽ được dựng bình thường bằng cách dùng Material và texture định nghĩa trong nút Appearance

coordIndex: Trường này bao gồm một dãy chỉ số thứ tự cho các điểm ảnh tạo nên

đường thẳng

 Ví dụ1: coordIndex [0 1 2 0] có nghĩa là đường thẳng được tạo bởi điểm thứ nhất 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, các điểm ảnh được xác định trong nút Coordinate

 Ví dụ 2: coordIndex [0 1 -1 2 0], kí hiệu “-1” cho biết hình ảnh được tạo gồm hai đường thẳng: một đường thẳng tạo bởi điểm thứ nhất nối với điểm thứ hai và một đường thẳng khác tạo bởi điểm thứ ba nối với điểm thứ nhất

 Cho phép các mặt phẳng tạo ra có thể nhìn từ hai phía mặt phẳng hoặc không

 Ví dụ solid FALSE tức là cho phép nhìn mặt phẳng ở hai phía, solid TRUE thì chỉ

cho phép nhìn mặt phẳng ở một phía

 normal

 Nếu trường normal không là NULL nó chứa nút Normal mà normal được áp dụng cho các đỉnh hoặc bề mặt của IndexedFaceSet một cách chính xác tương đương với mô tả ở trên để áp dụng màu cho đỉnh/bề mặt ( normalPerVertex tương ứng với colorPerVertex và normalIndex tương ứng với colorIndex )

 Nếu trường nomal là NULL, trình duyệt sẽ tự động tạo ra normal, sử dụng creaseAngle để xác định cách normal được làm phẳng quanh đỉnh

Trang 15

texCoordIndex: Nếu trường texCoordIndex không là NULL, nó chứa nút

TextureCoordinate Texture trong nút đó được áp dụng cho đỉnh của IndexedFaceSet như sau:

 Nếu trường texCoordIndex không rỗng, nó được sử dụng để chọn texture coordinate cho mỗi đỉnh của IndexedFaceSet tương ứng trường coordIndex được

dùng để chọn coordinate cho mỗi đỉnh từ nút Coordinate texCoordIndex phải

chứa chỉ sốtương ứng trường coordIndex và 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 chỉ số lớn nhất trong trường texCoordIndex là N thì phải có N+1 texture trong nút TextureCoordinate

 Nếu trường texCoordinate là rỗng, mảng coordIndex được dùng để chọn texture

từ nút TextureCoordinate Nếu chỉ số lớn nhất trong trường coordIndex là N thì phải có N+1 texture coordinate trong nút TextureCoordinate

 Nếu trường texCoord là NULL, texture mặc định được tính bằng cách sử dụng

hộp bao của shape trong hệ tọa độ địa phương Chiều lớn nhất của hộp bao xác định coordinate S, chiều dài nhất tiếp đó xác định coordinate T Nếu cả hai hoặc tất các các chiều của hộp bao bằng nhau, mỗi ràng buộc sẽ bị phá vỡ bằng cách chọn chiều X, Y, hoặc Z theo thứ tự ưu tiên Giá trị của coordiante S từ 0 đến 1,

từ cuối hộp bao đến hộp khác Coordinate T dao động giữa 0 và tỉ lệ của chiều

lớn nhất thứ hai của hộp với chiều lớn nhất của hộp bao

Trang 16

Ví dụ2

#VRML V2.0 utf8

Viewpoint { description "Initial view" position 0 0 9 }

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

# 6 colors (primaries:RGB and complements:CMY) mapped to the faces Transform {

translation -1.5 0 0

children Shape {

appearance DEF A Appearance { material Material { } }

geometry DEF IFS IndexedFaceSet {

Trang 17

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, 4 ]

# 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

Trang 18

]

color Color { # Four colors:

color [ 0 1 0, 1 1 1, 0 0 1, 1 0 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

eventIn MFFloat set_height

exposedField SFNode color NULL

exposedField SFNode normal NULL

exposedField SFNode texCoord NULL

field MFFloat height [] # (- ∞, ∞)

field SFBool ccw TRUE

Trang 19

field SFBool colorPerVertex TRUE

field SFFloat creaseAngle 0 # [0, ∞]

field SFBool normalPerVertex TRUE

field SFBool solid TRUE

field SFInt32 xDimension 0 # [0, ∞)

field SFFloat xSpacing 1.0 # (0, ∞)

field SFInt32 zDimension 0 # [0, ∞)

field SFFloat zSpacing 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 nhau trong mặt phẳng Y=0 của hệ tọa độ địa phương Hình dạng của lưới xác định bởi mảng giá trị chiều cao (xác định chiều cao tại mỗi điểm trong lưới)

Vị trí các đỉnh được xác định bởi các trường height, xSpacing và zSpacing

Nút này hữu ích cho việc xây dựng các mạng lưới hoặc địa hình Nên chia cảnh thành các vùng để tối ưu khi vẽ

Điểm bắt đầu là gốc tọa độ, các điểm còn lại tạo nên lưới nằm theo hướng dương của các trục

 Nếu ColorPerVertex là FALSE và trường color không là NULL, trường color chỉ

rõ nút Color chứa ít nhất (xDimension-1)×(zDimension-1) màu

 Nếu ColorPerVertex là TRUE và trường color không là NULL, trường color chỉ

ra nút Color chứa ít nhất (xDimension)×(zDimension) màu

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

TỪ KHÓA LIÊN QUAN

w