Tải bản đầy đủ (.pdf) (24 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (425.48 KB, 24 trang )

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ỉ
định được dựng bằng cách áp dụng nút appearance.
Ví dụ
#VRML V2.0 utf8
Group { children [
Transform {
translation -3 0 0
children Shape {
geometry Box {}
appearance Appearance {
material Material { diffuseColor 1 0 0 }
}
}


}
Transform {
children Shape {
geometry Sphere {}
appearance Appearance {


material Material { diffuseColor 0 1 0 }
}
}
}
Transform {
translation 3 0 0
children Shape {
geometry Cone {}
appearance Appearance {
material Material { diffuseColor 0 0 1 }
}
}
}
]}

2.1.2. Appearance
Cú pháp
Appearance {
material
texture

NULL
NULL


textureTransform NULL
}
Xác định thuộc tính trực quan của đối tượng hình học. Giá trị mỗi trường nếu khác NULL thì
nó 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 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.


Ví dụ:
Shape {
appearance Appearance {
material Material {
specularColor 1 1 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 về thế giới. Dùng cho mục đích tài liệu và không có hiệu lực hiển thị hình ảnh
trực quan hay hành vi của thế giới.
Thuộc tính
title: Dùng để lưu trữ tên hoặc tiêu đề của thế giới để trình duyệt có thể trình bày cho người
sử dụng.
info: Chứa thông tin khác của thế giới, chẳng hạn như thông tin tác giả, bản quyền, và chỉ dẫn


2.1.4. Hình hộp (Box)
Cú pháp
Box {
# (0, ∞)

size 2 2 2
}

Xác định khối hộp lục diện tại tâm (0,0,0) trong 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
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.

Nút Box chỉ xác định mặt ngoà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 1

# (0, ∞)

}
Xác định quả cầu có tâm tâm tại (0, 0, 0) trong 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ộ bề mặt, quấn ngược chiều kim
đồng hồ từ phía sau.
Nút Sphere chỉ xác định bề mặt ngoài.
Để tạo ra các 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 2
radius 1

side

TRUE

top

TRUE

# (0, ∞)

# (0, ∞)

}
Xác định hình trụ có đáy, tâm tại (0,0,0) trong 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 tại “-1” đến “+1” trong cả 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 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


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
}
}

2.1.7. Hình nón (Cone)
Cú pháp
Cone {
bottomRadius 1
# (0, ∞)
height
2
# (0, ∞)
side
TRUE
bottom
TRUE
}


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


2.2.1. Text
Cú pháp
Text {
string

[]

fontStyle NULL
length

# [0, ∞)


[]

maxExtent 0.0

# [0, ∞)

}
Xác định văn bản đặt trong mặt phẳng Z=0 trong hệ tọa độ địa phương
Thuộc tính
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”]


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
[]


# [-1, ∞)

field

MFInt32 colorIndex

field

SFBool colorPerVertex TRUE

field

MFInt32 coordIndex

[]

# [-1, ∞)

}
Vẽ một tập hợp các đường thẳng trong hệ tọa độ không gian ba chiều với tập hợp các màu
tương ứng cho các đường thẳng đó.
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 (đ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.



 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 {



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



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.

colorIndex
o Chỉ định màu sắc cho các điểm ảnh trong coordIndex khi colorPerVertex
có giá trị là TRUE

o Chỉ định màu sắc cho các đường thẳng trong coordIndex khi
colorPerVertex có giá trị là FALSE.
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.


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,…)
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 0 1]
coordIndex [0 1 2 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 # [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 được hình thành bằng cách xây dựng bề mặt (đa
giác) từ các điểm đỉnh
Mỗi bề mặt của IndexedFaceSet sẽ có
Ít nhất 3 đỉnh không trùng nhau
Các đỉnh xác định một đa giác phẳng
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:




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.
ColorPerVertex
 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.
 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).
Convex: Định nghĩa bề mặt là lồi hay lõm
Solid
 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



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.
Ví dụ1
Shape {
appearance Appearance{}
geometry IndexedFaceSet {
coord Coordinate {
point [0 0 0,1 1 0,0 1 0,1 1 0,1 0 0,1 0 1]
}
coordIndex [0 1 2 -1 3 4 5]
color Color {
color [1 1 1,1 0 0]
}

colorIndex [1 0]
colorPerVertex FALSE
convex FALSE
solid FALSE
}
}


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 {
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, -1 -1 1, -1 -1 -1,
.618 1.618 0, -.618 1.618 0, .618 -1.618 0, -.618 -1.618 0,
1.618 0 .618, 1.618 0 -.618, -1.618 0 .618, -1.618 0 -.618,
0 .618 1.618, 0 -.618 1.618, 0 .618 -1.618, 0 -.618 -1.618

]
}
coordIndex [
1 8 0 12 13 -1, 4 9 5 15 14 -1, 2 10 3 13 12 -1,
7 11 6 14 15 -1, 2 12 0 16 17 -1, 1 13 3 19 18 -1,
4 14 6 17 16 -1, 7 15 5 18 19 -1, 4 16 0 8 9 -1,
2 17 6 11 10 -1, 1 18 5 9 8 -1, 7 19 3 10 11 -1,
]
color Color { # Six colors:
color [ 0 0 1, 0 1 0, 0 1 1, 1 0 0, 1 0 1, 1 1 0 ]
}


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
0.0954915 0.793893, 0.654508 0.975528, 1 0.5,
]
}
# And this particular indexing makes a nice image:
texCoordIndex [
0 1 2 3 4 -1, 2 3 4 0 1 -1, 4 0 1 2 3 -1, 1 2 3 4 0 -1,
2 3 4 0 1 -1, 0 1 2 3 4 -1, 1 2 3 4 0 -1, 4 0 1 2 3 -1,
4 0 1 2 3 -1, 1 2 3 4 0 -1, 0 1 2 3 4 -1, 2 3 4 0 1 -1,
]

}
}
}
# A tetrahedron, with a color at each vertex:
Transform {
translation 1.5 -1.5 0
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, -1 -1 1,
]
}
coordIndex [
3 2 1 -1, 2 3 0 -1, 1 0 3 -1, 0 1 2 -1,


]
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.
Transform {
translation 1.5 1.5 0
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

# [0, ∞]

TRUE
0

# [0, ∞)

1.0

# (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 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
OX và OZ
Thuộc tính
Color
 Xác định màu sắc cho các điểm đỉnh hoặc các cạnh tứ giác của nút ElevationGrid
dựa vào giá trị của colorPerVertex
 Nếu color là NULL, nút ElevationGrid được dựng với các thuộc tính của nút
Shape.
ColorPerVertex
 Xác định màu sắc được quy định trong trường color áp dụng cho mỗi đỉnh hoặc
cạnh tứ giác của nút ElevationGrid
 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.
Normal

 Xác định normals các đỉnh hoặc cạnh tứ giác cho ElevationGrid. Nếu trường
normal là NULL, trình duyệt sẽ tự động tạo ra normal.
 Nếu normalPerVertex là TRUE và trường normal không là NULL, trường normal
xác định nút Normal chứa ít nhất xDimension × zDimension normal.


texCoord
 Xác định texture mỗi đỉnh của nút ElevationGrid.
 Nếu texCoord là NULL, texture mặc định sẽ được áp dụng. Texture mặc định có
cận từ (0,0) tại đỉnh đầu tiên đến (1,1) tại đỉnh cuối.
 S texture căn theo trục X. T texture căn theo trục Z.
 Nếu texCoord không là NULL, nó xác định nút TextureCoordinate chứa ít nhất
(xDimension)×(zDimension) texture.
Ccw, solid, creaseAngle
 Mô tả trong Shape
 Mặc định, tứ giác được định nghĩa theo ngược chiều kim đồng hồ. Do đó, thành
phần Y của normal là dương. Thiết lập trường ccw là FALSE sẽ đảo ngược
hướng normal. Mặt sau hủy kích hoạt khi trường solid là TRUE.
xDimension: Chỉ ra số điểm của phần tử của mảng height của lưới theo trục X.
xDimension>=0.
zDimension: Chỉ ra số điểm của phần tử của mảng height của lưới theo trục Z.
zDimension>=0.
xSpacing: Là khoảng cách của các đỉnh liên tiếp theo trục X.
zSpacing: Là khoảng cách của các đỉnh liên tiếp theo trục Z.
height: Chứa một danh sách các giá trị độ cao của mỗi điểm trong lưới.
solid ở đây nếu bằng TRUE thì sẽ không cho phép nhìn từ dưới lên đối với mạng lưới
tạo ra.
Các điểm này được tính theo thứ tự từ trái sang phải từ trên xuống dưới.



Các ánh xạ kết cấu tạo ra kết cấu ngược lại khi nhìn từ trục +Z. Để định hướng kết cấu trực
quan hơn ta dùng nút TextureTransform đảo ngược kết cấu
Shape {
appearance Appearance {
textureTransform TextureTransform { scale 1 -1 }
}
geometry ElevationGrid { ... }
}
Ví dụ
Shape {
appearance Appearance {
material Material {}
}
geometry ElevationGrid {
xDimension 9
zDimension 9
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 1, 1 1 ]
field SFBool

endCap

TRUE

field MFRotation orientation
field MFVec2f
field SFBool
field MFVec3f
}


scale
solid
spine

# [0, ∞)

0

0010
11

# [-1,1],(- ∞, ∞)
# (0, ∞)

TRUE
[ 0 0 0, 0 1 0 ] # (- ∞, ∞)


2.2.6. PointSet
Cú pháp
PointSet {
exposedField SFNode color

NULL

exposedField SFNode coord

NULL


}
Xác định tập các điểm 3D trong hệ tọa độ địa phương với màu sắc tại mỗi điểm
Thuộc tính
coord: Xác định nút Coordinate. Kết quả không xác định nếu trường coord xác định nút
có kiểu khác. PointSet sử dụng các tọa độ theo thứ tự. Nếu trường coord là NULL, tập
điểm coi là rỗng.
color
 Nếu trường color không là NULL, nó xác định nút Color chứa số màu tương ứng
với số điểm được chứa trong nút coord. Kết quả không xác định nếu trường
color xác định kiểu khác của nút. Màu sắc áp dụng cho mỗi điểm theo thứ tự.
Kết quả không xác định nếu số giá trị trong nút Color ít hơn số giá trị trong nút
Coordinate.
 Nếu trường color là NULL và có nút Material được định nghĩa cho nút
Appearance sẽ ảnh hưởng đến nút PointSet, emissiveColor của nút Material
được dùng để vẽ điểm.
 PoitSet không áp dụng chiếu sáng, texture, không tham gia phát hiện va chạm.
Kích thước mỗi điểm phụ thuộc vào việc thực thi(độ phân giải màn hình,…)
Ví dụ
#VRML V2.0 utf8
DEF T Transform { children [
Shape {
geometry PointSet {
coord DEF C Coordinate {
point [ 0 -1 2, 1 0 0, -2 3 -1, -4 0 0, -2 2 -1,
5 -2 1, 3 -6 3 ]
}
color Color {
color [ 1 0 0, 0 1 0, 0 0 1, 1 1 0, 1 0 1, 0 1 1, 1 1 1 ]
}



}
}
Transform {
rotation 1 0 0 1.57
children Shape {
appearance Appearance {
material Material {
diffuseColor 1 1 1 # ignored
emissiveColor 1 1 0 # used for point color
}
}
geometry PointSet { coord USE C }
}
}
DEF TS TimeSensor {
stopTime -1
loop TRUE
cycleInterval 1.0
}
DEF OI OrientationInterpolator {
key [ 0 .5 1 ]
keyValue [ 0 1 0 0, 0 1 0 3.14, 0 1 0 6.27 ]
}
]}
#ROUTE TS.fraction_changed TO OI.set_fraction
#ROUTE OI.value_changed TO T.rotation




×