Tài liệu tham khảo kỹ thuật công nghệ, chuyên ngành tin học Đồ họa máy tính và hiện thực ảo
Trang 1
Tìm hiểu ngôn ngữVRML
Lời nói đầu
Trong xu thế tin học hoá toàn bộ cuộc sống đang diễn ra tấp nập hiệnnay,lĩnh vực đồ hoạ đóng góp một vai trò cực kỳ to lớn.Ở đâu ta cũng có thể tìmthấy những minh hoạ cho việc áp dụng đồ hoạ máy tính vào cuộc sống : xử lý ảnh,phim hoạt hình, đặc biệt là thực tại ảo(Virtual Reality_VR) Thực tại ảo,là mộtnghành công nghệ cao,có ứng dụng đặc biệt rộng rãi.Từ các trò chơi 3D cực kì sốngđộng đến những mô phỏng phức tạp trong công nghiệp và khoa học công nghệ(môphỏng các vụ thử hạt nhân,mô phỏng thế giới ảo dùng để huấn luỵện phi công…),từnhững trường hợp đơn giản đến các trường hợp cực kì quan trọng.
Một phần quan trọng của VR là mô phỏng thế giới thực xung quanh chúngta.Để làm được điều này, chúng ta có thể dùng ngôn ngữ VRML(Virtual RealityModeling Language).Đây là một ngôn ngữ tương đối đơn giản nhưmg cực kỳ hiệuquả.Với VRML,kết hợp với trình duyệt IE hay Nescape,chúng ta có thể mô phỏngthế giới quanh ta một cách như ý.Trong thế giới đó,có các vật thể,có các tương tácvà có các cảm biến y như thế giới thực.Ứng dụng của VRML cũng rất rộng rãi : môphỏng nhà cửa,thiết kế các phòng học ảo,các thiết bị thí nghiệm ảo, lập trình khônggian ảo…
Trong bài tập lớn môn học này,em đã tìm hiểu về VRML và dùng ngôn ngữVRML để mô phỏng toà nhà C14-15 của trường đại họcBKHN.Tuy được sự hướngdẫn tận tình của thầy Hùng nhưng do thời gian và năng lực còn có hạn nên kết quảcòn nhiều thiếu sót.Tuy nhiên,em rất cám ơn thầy Hùng vì môn học và bài tập lớnnày đã đem lại cho em nhiều hiếu biết về thế giới đồ hoạ,mở ra cho chúng em mộthướng đi mới trong lĩnh vực tin học.
Trang 2
BÁO CÁO BÀI TẬP LỚN MễN HỌC "ĐỒ HOẠ MÁY TÍNH VÀ HIỆN THỰC ẢO"
I.Giới thiệu về VRML1.Về ngụn ngữ VRMLa,Về trình duyệt
Điều đầu tiên bạn cần là VRML browser, để quan sát các thế giới của bạn Phần lớn cácbrower VRML hoạt động cho Nescape và Internet Explorer, các browser có sẵn đối vớicác hệ điều hành Để biết thêm thông tin bạn hãy tra trong VRML Repository.
b,Soạn thảo VRML
Điều tiếp theo bạn cần là tạo nên các thế giới của bạn Có hai cách để thực hiện điềunày Đầu tiên bạn có thể sử dụng một trong các công cụ tạo ra VRML, chính là các môhình 3D mà bạn có thể tạo ra thế giới của bạn Một phơng pháp thực hiện VRML là mãhoá bằng tay, tất cả bạn cần là việc soạn thảo văn bản wordpad hoặc notepad VrmlPad làbộ soạn thảo Vrml đặc biệt hiệu quả với đặc điểm nổi bật cú pháp Loại đơn giản đợc mãhoá chỉ ra, đợc cất dới file có dạng filename.wrl Sau đó bạn có thể tải vào browser và lấyra để xem Nếu bạn sử dụng bộ soạn thảo phức tạp hơn, nh Wordpad, hãy đảm bảo cất dớifile đơn giản hoặc nếu không nó sẽ không làm việc.
Làm việc với VRML cha có kinh nghiệm, nó có thể rất khó để tạo ra các đối tợngphức tạp Để thực hiện điều này bạn cần phải sử dụng hoặc công cụ bản quyền mức caohoặc ngôn ngữ mô hình hoá Nếu bạn đi đến các lựa chọn muộn hơn, bạn có thể sẽ cầnvài loại file chơng trình biên dịch để chuyển giữa các dạng mô hình hoá và VRML Bộbiên dịch miễn phí là crossroads Các công cụ VRML cấp cao có sẵn đối với nhiều côngty
c Kỹ thuật nén, MIME và xuất bản
Sự mở rộng thông thờng cho các file VRML là wrl và wrz sử dụng cho việc nénVRML Browser có thể đọc các file VRML bị nén bởi GZIP Các file nén có thể sử dụngnh wrz, wrl.gz hoặc sự mở rộng chuẩn wrl GZIP là một chuẩn cân bằng trên các hệthống UNIX nhng bạn có thể nhận thấy trên phiên bản PC hoặc Mac Cách tốt nhất để néncác file là sử dụng Chisel, là bộ xác nhận và bộ đánh giá VRML có thể bị cất các fileVRML GZIP Đây là một công cụ tốt để có bất kỳ cách nào cho việc gỡ rối mã bởi vìkhông có ai viết VRML hoàn hảo ngay từ lần đầu tiên
Tất cả các tài liệu internet theo chuẩn MIME, chuẩn VRML MIME là model/vrml, tơngtự nó có thể là x-world/x-wrml Mỗi khi bạn tạo thế giới của bạn, bạn cần tạo nó lên trangweb để mọi ngời có thể xem nó Đối với việc này bạn cần một vài ISP (Internet ServiceProvider) Bạn có thể sử dụng không gian này để đa các file lên trang web, có thể là cácfile HTML thông thờng.
d Headers và chú thích.
Trang 3
VRML(Virtual Reality Modeling Language), là ngụn ngữ cho phộp mụ tả cỏc đối tượng 3D của thể giới thực, và chạy trờn mụi trường web Nú cho phộp xõy dựng nờn cỏc file wrl cú thể mở được bằng cỏc trỡnh duyệt web như IE hay NESCAPE Một file vrml cú dạng như sau:
Tiờu đề file: #VRML V2.0 utf8
trong đú utf8 là cụm từ cho phộp dựng cỏc ký tự quốc tế trong file VRML sau đú là cỏc nỳt Điều này nói cho các browser xem xét file VRML, và phiên bản này nó đang sử dụng Trong trờng hợp này nó là phiên bản 2.0 VRML là trờng hợp dễ bị ảnh hởng(case sensetive), việc sử dụng chính xác nh bạn đã thấy Phần utf8 thông báo cho browser chuẩn chuỗi văn bản để sử dụng VRML 1.0 hoặc là ascii hoặc utf8 nhng phiên bản 2.0 chỉ là utf8, tốt nhất để sử dụng
Bất kỳ dòng nào bắt đầu với kí tự # là chú thích, và bị lờ đi khỏi bộ phân tích cúpháp VRML Tiếp theo là VRML hợp lệ.
WorldInfo cũng có thể chứa một chuỗi thông tin, chứa các thông tin khác về file Bạn có
thể đặt vào các từ khoá cho các search engine Một nút WorldInfo mẫu đợc chỉ ra ở dới
đây:
WorldInfo {
title "Floppy's VRML97 Tutorial Example 1" info ["(C) Copyright 1999 Vapour Technology" "guide@vapourtech.com"]
Có thể có các chuỗi phức tạp trong trờng info, bằng cách đặt chúng bên trong ngoặcvuông Tiêu đề không cần ngoặc vuông, khi nó chỉ là một chuỗi đơn lẻ File VRML có
thể có nhiều nút WorldInfo nhng chỉ có nút đầu tiên đợc phân tích, các phần sau bị lờ đi.
VRML cú 54 loại nỳt khỏc nhau, và được chia làm 9 nhúm, bao gồm: Grouping Nodes : Cỏc nỳt nhúm
Special Group Nodes: Cỏc nỳt nhúm đặc biệt Common Nodes: Cỏc nỳt chung
Sensor Nodes: Cỏc nỳt cảm biến Geometry : Cỏc nỳt hỡnh học
Geometric Properties Nodes: Cỏc nỳt thuộc tớnh hỡnh học Appearance Nodes : Cỏc nỳt hỡnh dỏng
Interpolators Nodes Cỏc nỳt nội suy
Trang 4Shape{
appearance Appearance{material Material{diffuColor 1 0 0 Shininess 0
textture ImageTextTure{}
geometry Box{} }
trong đú appearance là thuộc tớnh của nỳt giỏ trị của nú chỉ cú thể là nỳt Appearance dựng chỉ dạng bề mặt của vật thể Trong nỳt Appearance co cỏc trường material dựng để chỉ màu, độ búng, độ trong suốt của vật thể Trường textture dựng để chỉ kết cấu của vật thể, giỏ trị của trường này cú thể là cỏc nỳt ImageTextture,MovieTextture
Chỳng ta điểm qua một số nỳt cơ bản
}
geometry Box { }
Ví dụ này có một trờng bên trong nút Appearance, trờng material Theo cách này
có các nút bên trong các nút dờng nh là khó khăn, nhng cho phép bạn định nghĩa các hình
Trang 5
dạng do sử dụng DEF và USE Điều này là hiệu quả trong việc có nhiều đối tợng theo
cùng một cách quan sát Nút Appearance có thể chứa trờng material và texture trờng
material chứa nút Material Nút texture chứa một trong số các loại nút kết cấu Những
điều này đợc mô tả trong phần sau, trớc tiên chúng ta giải quytết các nút Material.
Vì vậy nếu bạn muốn tạo hình khối ban đầu, với màu xanh bán trong suốt, bạn sẽđịnh nghĩa dạng của nó nh sau:
Shape {
appearance Appearance { material Material { emissiveColor 0 0.8 0 transparency 0.5 }
}
geometry Box { }
e3,Kết cấu hình ảnh( image texture)
Các màu sắc thú vị là rất tốt nhng để trông thực sự là hấp dẫn, chúng ta phải có sơ
đồ kết cấu các vật thể Điều này đợc thực hiện qua trờng texture của nút Appearance trờng này chứa ba loại nút kết cấu Loại đầu tiên chúng ta xem xét là ImageTexture Đây
là sơ đồ kết cấu cơ sở, ánh xạ toàn bộ hình ảnh vào một đối tợng Nút có thể là sơ đồ kếtcấu một đối tợng với file JPEG hoặc PNG Một vài browser có thể hỗ trợ nó, nhng đây
không phải là chuẩn nút có thể chứa ba trờng Đầu tiên, url chỉ rõ hình ảnh để sử dụng
Trang 6
chuẩn dạng URL Bạn có thể chỉ rõ danh sách hình ảnh trong các ngoặc vuông, browser
sẽ hiển thị hình ảnh đầu tiên trong danh sách mà nó tìm thấy Hai trờng khác là repeatSvà repeatT, thông báo liệu kết cấu lặp lại theo hớng trục ngang (S) hay trục dọc(T) Điều
này dẫn đến giá trị boolean là TRUE hoặc FALSE chúng chỉ thực sự hiệu quả khi kết hợp
với TextureTransform, chúng ta khôg trình bày kỹ ở phần sau Bạn có thể chỉ rõ các
thông tin trong suốt trong các hình ảnh đã sử dụng trong trờng hợp nó thay thế lại sự trongsuốt của các đối tợng ban đầu Nếu bạn sử dụng kết cấu tỉ lệ xám, diffuseColor đợc nhânlên với độ dày của kết cấu để tạo ra kết cấu thực sự Thực tế, bạn có thể tạo nhiều hiệu
quả do kết hợp nút Material và ImageTexture Nói chung, chúng chỉ thực hiện những gì
bạn mong muốn, vì vậy chỉ cần quan sát và một chút kinh nghiệm là bạn có thể tạo ra đ ợc
-Vì vậy để định dạng kết cấu của hộp thứ hai với kết cấu gạch, chúng ta có thể sửdụng nh sau:
Appearance {
texture ImageTexture { url "brick.jpg"
}}
khi nút appearance của hộp thứ hai.
e4 Movie Texture
MovieTexture nhận lấy phim MPEG và sơ đồ kết cấu lên một đối tợng theo cách
nh ImageTexture Nó có ba trờng giống nhau, ngoài ra có một số trờng khác, đó là:
Nó có trờng image thay thế cho trờng URL.
Trờng image bao gồm hai con số chỉ rõ chiều rộng và cao của kết cấu, tiếp theo là
một con số chỉ rõ số lợng các thành phần Thành phần màu sắc là tỉ lệ xám, hai thànhphần màu sắc là tỉ lệ xám với độ trong suốt, thành phần thứ ba là màu RGB và thứ t làRGB với độ trong suốt Sau các đối số này là danh sách các điểm pixel, là các số hexa vớimột byte cho mỗi thành phần Vì vậy pixel thành phần thứ t là red và 50 % độ trong suốtlà 0xFF00007F Các pixel đợc sắp xếp theo thứ tự từ đáy trái đến đỉnh bên phải Ví dụ đ-ợc chỉ ra dới đây:
DEF PIXMAP Appearance { texture PixelTexture {
image 2 2 3 0xFF0000 0x00FF00 0x0000FF 0xFF0000
Trang 7
}}
Chúng ta chỉ cần mô tả nhanh về các số hexa Thông thờng ở máy tính thuận tiệnkhi chỉ rõ các con số là các số thập phân thông thờng (0-9) hoặc nhị phân (0-1) và ngoài
ra có một loại khác là hexadecimal, có dạng nh sau:
F trong số hexa là 15 trong số thập phân 10 trong hexa là 16 trong số thập phân.
Chữ số hexa thông thờng đợc chỉ rõ 0x ở phía trớc để dễ dàng nhận ra Ví dụ 0x10 = 16,0xFF = 255, và 0x7F = 12.
e6 Văn bản và kiểu font( text và fontstyle)
Nút này tạo văn bản 2D trong thế giới Tất cả đều thực sự đơn giản trừ phi bạn
muốn thực hiện các điều phức tạp hơn sử dụng Fontstyle Nút Text có 4 trờng Trờng đầutiên là string, bạn có thể định nghĩa chuỗi hoặc danh sách các chuỗi để hiển thị Trờng
fontStyle chứa nút FontStyle Hai trờng cuối là maxExtent, bạn chỉ rõ độ rộng lớn nhất (
theo đơn vị mét) của văn bản và length là danh sách chiều dài đối với mỗi chuỗi, vì vậybạn có thể chỉ rõ độ rộng riêng biệt của mỗi chuỗi Nếu các length đợc chỉ rõ, browser sẽ
định lại kích thớc của văn bản để cho vừa với kích thớc đó geometry Text {
string ["Hello", "World"] fontStyle USE HELLOFONT maxExtent 5
length [3, 3]}
Trang 8
Nút Text là phức tạp, FontStyle phức tạp hơn Cách tốt nhất để thực hiện ở đây là
liệt kê danh sách các trờng.FontStyle {
size family style horizontal leftToRight topToBottom language justify spacing}
size là chiều cao của dòng văn bản theo hệ mét Trờng family có thể nhận 3 giá trị và thay
đổi loại bề mặt cuỉa font Ba loại đó là "SERIF", "SANS", hoặc "TYPEWRITER", chúng
rất rõ ràng Để thay đổi cách xem xét văn bản, bạn có thể sử dụng trờng style, có thể nhậnmột trong các kiểu sau: "PLAIN", "BOLD", "ITALIC", hoặc"BOLD ITALIC" horizontal
là giá trị boolean chỉ ra liệu văn bản là ngang horizontal ("TRUE") hoặc dọc vertical
("FALSE") leftToRight và topToBottom cũng là giá trị boolean và cân bằng trong các
hoạt động trớc Tơng tự chuỗi utf-8 có thể xuất hiện khác nhau, phụ thuộc vào ngôn ngữtrong nó, vì vậy điều này là mã hoá hai kí tự đối với ngôn ngữ Thực sự không biết các mã
là gì, tốt nhất là lờ đi trờng này justify là hiệu quả và cóthể là một trong bất kỳ "BEGIN","MIDDLE", hoặc "END" spacing là số lợng không gian trôngd giữa các dòng trong văn
bản 1 là bình thờng, 2 là gấp đối khoảng cách (dòng trồng giữa mỗi dòng
Đó là FontStyle , bạn có thể thực sự lờ đi các trờng nhng style, family và justify
thực sự là hiệu quả
e7,Cỏc đối tượng cơ bản
Để chỉ hỡnh dỏng vật thể ta dựng trường geometry Giỏ trị của trường này là cỏc nỳthỡnh học cơ bản.VRML hỗ trợ 4 đối tượng cơ bản , đú là: Cone(hỡnh nún), Cylinder(Hỡnhtrụ), Box(Hỡnh hộp), Sphere(Hỡnh cầu) Đõy là bốn đối tượng hỡnh học cơ bản giỳp ta xõydựng nờn cỏc đối tượng hỡnh học của mỡnh Cấu trỳc của cỏc nỳt này như sau
Nỳt Box:
Box{size cd cc cr} Trong đú cd, cc, cr là cỏc số thực lần lượt là chiều dài, chiều cao, chiều rộng của hỡnh hộp Tõm của hỡnh hộp là gốc tọa độ hệ thống
Nỳt Cylinder: Cone{
radius dk Chỉ bỏn kớnh của hỡnh trụ height cc Chỉ chiều cao của hỡnh hộp
Trang 9radius Một giá trị thực chỉ bán kính đáy của hình nón height Môt giá trị thực chỉ chiều cao của hình hộp}
Nút Sphere:
Sphere{ radius } trường radius chỉ bán kính của hình cầu
Đây là bốn nút hình học cơ bản để bạn xây dựng nên các đối tượng hình học cơ bảncủa mình.Chúng được gọi là các nút hình học chuẩn Để xây dựng nên các đối tượng hìnhhọc không chuẩn bạn có thể dùng các nút IndexedFaceSet, IndexedLineSet,
IndexedPointSet,ElavationGrid, Extrusion
Thông thường khi bạn tạo ra một đối tượng tâm của nó trùng với tâm của hệ toạ độđịa phương, để di chuểyn đối tượng bạn dùng nút Transform.
Transform{
Scale Chỉ sự biến đối của đối tượng
Translation chỉ các giá trị dịch chuyển theo các trục x, y, z Rotation chỉ góc quay và trục quay
Children[] các nút con chịu tác động của translation và rotation }
Trong nút Transform Scale có tác động đầu tiên, sau đó đến rotation và translationĐể gom nhiều nút lại với nhau ta sử dụng nút Group, cú pháp của nó như sau:
Trang 10
PlaneSensor Cỏc nỳt nội suy, như PositionInterpolator, OrientationInterpolator,
ColorInterpolator, cho phộp bạn chuyển cỏc giỏ trị khỏc kiểu về kiểu giỏ trị mà bạn mong muốn như chuyờn sự thay đụi thời gian về giỏ trị dịch chuyển của một vật thể Cỏc nỳt nội suy đúng vai trũ là cỏc Engine trong luồng Animation của VRML TRong VRML cũncú một số loại nỳt khỏc như LOD, Switch
2.Cỏc kiểu dữ liệu trong VRML
Nh đã nói ở phần trớc, các file VRML bao gồm một nhóm các nút Các nút này cóthể chứa cá nút khác và có thể chứa các trờng Mỗi trờng có các kiểu dữ liệu khác nhau.Sau đây là mô tả của chúng
SFBool
Đây là giá trị boolean đơn lẻ, có thể nhận giá trị "TRUE" or "FALSE"
SFColor & MFColor
SFColor là một trờng chứa màu đơn lẻ, đợc tạo nên từ ba số thực dấu chấm độnggiữa 0 và 1 tơng ứng với các giá trị màu red, green và blue, ví dụ 0 1 0 là green MFColorlà một trờng chứa các số nhân, ví dụ [0 1 0, 1 0 0, 0 0 1]
SFFloat & MFFloat
SFFloat là giá trị dấu chấm động đơn lẻ, ví dụ 7.5 MFFloat là một số các giá trị dấuchấm động, ví dụ [1.0, 3.4, 76.54]
Sau đó, có các con số hexa are width * height bao gồm ahi chữ số cho mỗi thành
phần Vì vậy 0xFF là màu trắng trong hình ảnh 1- thành phần và 0xFF00007F sẽlà nửa màu đỏ trong hình ảnh 4- thành phần.
Các pixel đợc chỉ rõ từ trái sang phải, từ trên xuống dới.
SFInt32 & MFInt32
Các số nguyên đơn lẻ hoặc chuỗi 32 bit có thể theo dạng thập phân hoặc hexa Các số hexa bắt đầu với 32 bit, ví dụ 0xFF là 255 hệ thập phân.
SFNode & MFNode
SFNode là một nút đơn lẻ và MFNode là danh sách các nút Trờng children với
nhiều nút là kiểu MFNode.
SFRotation & MFRotation
Các trờng này chỉ rõ một phép quay xung quanh một trục Nó đợc tạo nên từ 4 sốthực dấu chấm động Ba số thực đầu tiên chỉ rõ các toạ độ X, Y và Z cho các vectơ tơng
ứng với trục để quay, số thứ t là radian để quay Hơn nữa sự lựa chọn là rotation trong
phần 1.3 SFRotation là tập các giá trị đơn lẻ, MFRotation là một danh sách.
SFString & MFString
Loại này chứa danh sách các kí tự trong tập kí tự utf-8 ASCII là tập hợp phụ củautf-8, vì vậy bạn không cần lo lắng về tập các kí tự khác nhau hoặc về bất kỳ điều gì khác.Chuỗi (SFString) nh "Hello", trong dấu nháy kép Một danh sách (MFString) trông giốngnh : ["Hello", "World"]
SFTime & MFTime
Trang 11
Thời gian đơn lẻ hoặc một danh sách thời gian Thời gian đợc chỉ rõ nh các số dấuchấm động biểu thị số lợng các giây trôi qua từ nửa đêm ngày 1 tháng giêng 1970 Điềunày tạo nên nhiều cảnh quan hơn khi chú ý đến các sự kiện sau đó.
SFVec2f & MFVec2f
Các vectơ đơn lẻ hoặc danh sách các vectơ 2D Một vectơ 2D là một cặp các số thựcdấu chấm động.
SFVec3f & MFVec3f
Các vectơ đơn lẻ hoặc danh sách các vectơ 3D Một vectơ 3D là một bộ 3 các số thực dấu chấm động.
3.Hệ toạ độ trongVRML
Tất cả các khoảng cách trong VRML đợc đo bằng mét Hệ thống toạ độ VRML ợc chỉ ra trong sơ đồ sau:
Trang 12
Các phép quay trong VRML làm việc theo luật tay phải Nếu bạn tởng tợng việc đặtbàn tay bao trùm lên một trong số các trục, với ngón tay cái chỉ theo chiều dơng, hớngquay dơng cùng chiều với hớng của bàn tay, nghĩa là ngợc chiều với kim đồng hồ là hớngdơng Điều này là đúng đối với các phép quay đối với bất kỳ trục nào, vì vậy nếu bạnmuốn quay một đối tợng một góc 90 xung quanh trục X, bạn sẽ phải sử dụng góc quayâm 90 Điều này cũng áp dụng cho các phép quay xung quanh một trục tuỳ ý, đợc giảithích trong phần sau của tài liệu này Một điểm cần chú ý là các phép quay đợc đo bằngradian chứ không đo bằng độ Vì vậy để thực hiện phép quay nh đã mô tả ở trên, bạn phảithực hiện phép quay -1.57 xung quanh trục X Ta phải nhớ là 3.14 radian tương ứng với180 độ
4,Cỏc phộp biến đổi trong VRML
Để tạo nên thế giới sử dụng tất cả mọi thứ, chúng ta cần có thể biến đổi đợc mọi đối
tợng VRML có ba loại biến đổi có thể áp dụng cho các đối tợng Đó là translations,
rotations, và scales, và chúng đợc sử dụng trong nút Transform Nhng không phải một
nút Transform phải có đầy đủ ba loại biến đổi trên, ví dụ trong nút Transform chỉ cóphép quay rotation Các phép biến đổi trong Transform có thể áp dụng cho các nút con
children của nút Điều này gọi là một tổ hợp, một nút cha có thể có nhiều nút con Cú
pháp cho vấn đề này đợc chỉ ra dới đây, áp dụng cho nút Transform
Transform { translation 1 1 1 rotation 0 1 0 0.78 scale 2 1 2
children [ USE FBOX ]
Một nút Transform có thể có các tổ hợp khác bên trong nút con của nó, cho phép
bạn thực hiện tuần tự một chuỗi các phép biến đổi Chú ý rằng trật tự các phép biến đổi làkhông quan trọng Một phép quay đợc tiếp theo một phép biến đổi không giống với một
phép biến đổi thực hiện sau phép quay Bên trong một nút Transform đơn lẻ, các phép
biến đổi đợc thực hiện theo một trật tự chặt chẽ: Scale, Rotate và Translate Vì vậy nếu
bạn muốn thực hiện phép biến đổi sau phép quay, bạn cần tổ hợp các nút Transform bên
Trang 13
a Translation and Scale ( Phép biến đổi và tính tỉ lệ)
Có hai phép biến đổi tợng tự nhau, cả hai đều nhận ba đối số : giá trị x, y và z Phépbiến đổi dịch chuyển trung tâm của đối tợng trong các khoảng cách này theo hớng thíchhợp Tỉ lệ nhân với kích thớc của đối tợng bởi các giá trị này theo các hớng thích hợp.Một phép biến đổi 0 theo một hớng sẽ loại bỏ các đối tợng không ảnh hởng đến hớng.Yếu tố tỉ lệ 0 làm cho đối tợng không chính xác theo hớng đó, là điều bình thờng khôngđợc mong muốn Yếu tố 1 đợc yêu cầu mà không có ảnh hởng nào cả
Quan trọng chú ý rằng việc tính tỉ lệ là tơng đối cho nguyờn bản, không phải là trung tâm
của đối tợng Vì vậy để tính tỉ lệ của trung tâm của đối tợng, chúng ta phải đảm bảo rằngđối tợng đợc đặt trung tâm tại phần mở đầu Đó là lí do tại sao việc tính tỉ lệ phải thựchiện trớc phép quay và phép biến đổi
b Rotation ( phép quay)
Phép quay có điểm hơi khác so với hai loại ở trên Nó nhận 4 tham số, đầu tiên là batoạ độ xác định trục của phép quay và cuối cùng là góc quay, tính bằng radian Ví dụ đểquay 1 radian xung quanh trục Y, bạn phải viết:
Transform { rotate 0 1 0 1 children [ USE FBOX ]
Chiều dài của trục quay là bất kỳ, không cần thiết là 1 Bạn có thể sử dụng giá trị Ylà 50 nếu bạn thích nhng nó không thực hiện điều gì khác với giá trị Y là 1 Trục quayhoàn toàn là tuỳ ý, bạn có thể quay quanh bất kỳ trục nào bạn thích Ví dụ trục 1 0.3 2.45là hoàn toàn hợp lý Thật là khó khăn để tạo các phép quay theo cách này, tuy nhiênchúng có thể khó khăn để quan sát, đặc biệt nếu bạn không có bất kỳ sự luyện tập nào.Chính vì điều đó Vapour Technology đã tạo ra một cặp công cụ Dizzy và Twister Twistertạo phép quay vuông góc với trục từ một loại đơn giản hơn và Dizzy kết hợp nhân cácphép quay vuông góc với trục để tạo một loại đơn giản hơn với hiệu quả tơng tự Bạn cóthể sử dụng các điều này để dễ dàng hơn trong việc quay các đối tợng trong thế giới.
5.Các sự kiện
Một số các trờng, hầu nh các nút đều chứa các sự kiện Có hai loại sự kiện , eventInvà eventOut Các eventOut là các sự kiện sắp đi ra, phát sinh các thông tin nh thay đổinh thay đổi một giá trị hoặc thời gian của kích chuột Các eventIn là các sự kiện sắp đến,
chấp nhận thông tin từ bên ngoài của nút và thực hiện một vài điều với nó Mỗi sự kiện cómột loại dữ liệu thích hợp với chúng, nh mô tả ở trên
Một vài nút có các trờng đợc trng bày Điều này có nghĩa là nút có hai trờng định nghĩa
cho trờng đó set_fieldname and fieldname_changed Có eventIn và eventOut đối với
trờng có thể sử dụng để thiết lập các giá trị của nó và thông báo cho thế giới bên ngoài khi
có sự thay đổi Nếu bạn sử dụng set_fieldname để thiết lập giá trị của trờng, nút sẽ phátsinh một sự kiện fieldname_changed Để dễ dàng sử dụng, các thành phần set_ và
_changed của sự kiện có thể nghiêng về phía trái và browser sẽ làm việc khi sự kiện đ ợc
sử dụng Nếu một trờng không đợc phơi bày ra, nó không thể thay đổi do các sự kiện vàgiá trị trong trờng đợc sử dụng trong suốt các khoảng thời gian Để xem xét trờng nào đợcbày ra đối với mỗi nút, hãy giữ lấy một tham chiếu từ một vị trí từ trang liên kết hoặcnhận lấy tham chiếu nút trong phụ lục
Trang 14
6.Các router
Để thực hiện hiệu quả mọi thứ với các sự kiện, chúng ta cần nối chúng với nhau.
Việc kết nối đợc biết đến nh ROUTER Ví dụ để dẫn từ touchTime eventOut tới
startTime eventIn, chúng ta sẽ dẫn sự kiện nh sau:
ROUTE SENSOR.touchTime TO SOUND.startTime
Vì vậy, bít này của mã sẽ dẫn tới sự kiện touchTime từ TouchSensor ( sẽ đề cậpđến ở phần sau) tới sự kiện startTime trong nút sound ( cũng đợc đề cập ở phần sau) Do
đó, khi TouchSensor bị kích vào, âm thanh đợc chơi Bạn cần sử dụng DEF cho mỗi nútmà bạn dẫn tới hoặc từ đó sao cho nó có một tên riêng lẻ Vì vậy, các nút TouchSensor vàSound sẽ đợc định nghĩa:
DEF SENSOR TouchSensor {}
DEF SOUND Sound {}
Ngoại trừ các trờng bên trong chúng Nếu bạn có một số các đối tợng với cùng mộttên (do sử dụng USE), và dẫn tới hoặc từ chúng, tất cả các đối tợng bị ảnh hởng, vì vậynếu bạn chỉ muốn một đối tợng bị ảnh hởng, đa cho nó một tên duy nhất hoặc sử dụngPROTO, đợc giải thích sau.
7,Camera, âm thanh, ánh sáng
Trong phần này chúng tôi sẽ trình bày cách để giúp các bạn làm cho phong cảnhcủa bạn trở nên hiện thực hơn Nó bao gồm máy quay phim, ánh sáng, âm thanh, nền vàtrạng thái của tất cả những yếu tố khác Trớc hết ta hủy bỏ đi điểm khởi đầu ngầm định vàxem xét máy quay phim (camera).
VRMR browser tạo ra một cổng vào mặc định cho một cảnh, nó đợc đặt dọc theotrục +Z sao cho toàn bộ thế giới đợc hiển thị trong cửa sổ Tuy nhiên bạn không nên bắtđầu từ vị trí này mà bạn nên để ngời quan sát có thể chọn một trong số các điểm nhìn Đểlàm đợc điều này bạn hãy đặt thêm các camera trong phong cảnh của bạn và sử dụng cácnút điểm nhìn (Viewpoint node).
Nút điểm nhìn có một số trờng, trờng thứ nhất là vị trí (position), đó là một SFVec3f(nh một bộ ba các số thực mô tả các tọa độ X, Y, Z) Trờng này xác định vị trí của cameratrong thế giới Trờng thứ hai là hớng (orientation), đó là một SFRolation, nó cũng gồm 3số thực để xác định sự quay của camera Hớng ngầm định là nhìn về hớng -Z với độ lệch+X ở bên phải và +Y ở phía trên.
Trang 15
Trờng thứ 3 là phạm vi nhìn (FieldofView) Trờng này là một số thực tính theo đơnvị radian có giá trị từ 0 đến pi Nó dùng để xác định góc nhìn, giá trị nhỏ hơn tơng ứng vớigóc nhìn nhỏ hơn, nó cho ta kết quả thu nhỏ Giá trị lớn tơng ứng với hình ảnh đợc phóngto Giá trị ngầm định là 0,78 radian ứng với hình ảnh trung bình.
Mỗi điểm nhìn còn có một trờng mô tả (description) Đây là trờng mà brouser dùngđể xác định camera, trờng này là một SFString Cú pháp đầy đủ của một điểm nhìn là nhsau:
Viewpoint { position 0 5 5
orientation 1 0 0 0.39 fieldOfView 0.39 description "Camera 1"}
Bạn cũng có thể sử dụng những camera khác để tạo ra những cổng vào khác chophong cảnh của bạn bằng cách liên kết tên của camera với trang mà nó đợc dùng làmcổng vào cho phong cảnh Ví dụ nh để đ vào một phong cảnh tại camera có tên CAM1bạn phải thực hiện kết nối nh sau:
World.wrl#CAM1Những vấn đề liên quan:
Brouser sẽ bắt đầu kiểm tra hình ảnh trong thế giới của bạn tại camera đầu tiên mànó tìm thấy trong file, vì vậy hãy chắc chắn rằng là cổng đầu tiên mà bạn đã ghi nhận.Một vấn đề nhỏ nữa là việc lập kế hoạch cho các điểm nhìn là khá phức tạp Nếu bạn biếtcamera ở đâu và nơi nào bạn muốn xem thì sẽ rất khó để điều chỉnh đúng hớng Tuynhiên có một công cụ nhỏ từ Vapour Technology sẽ giúp bạn thực hiện toàn bộ điều này,hãy gọi Peek
b,Âm thanh
Để làm cho thế giới của bạn trở nên hấp dẫn hơn, chúng ta sẽ thêm âm thanh vàođó Ta có thể tạo âm thanh nền, tiếng chuông cửa, còi báo động hoặc những âm thanhkhác mà bạn muốn Tất cả những điều đó đợc thực hiện bởi 2 loại nút là nút Sound (Soundnodes) và nút AudioClip (AudioClip nodes) Bạn hãy tởng tợng: một nút Sound giống nhsự xác định ở nơi nào trong không gian bạn sẽ nghe thấy âm thanh và nó bắt nguồn từđâu Còn bản thân âm thanh sẽ đợc xác định bởi nút AudioClip.Trớc tiên chúng ta hãyxem xét nút Sound.
Nút Sound:
Một nút Sound đợc sử dụng để xác định vị trí và sự định hớng của một nguồn âmthanh trong thế giới của bạn Nút sound đợc đặt tại một nơi nào đó Cho dù bạn nghe âmthanh hay bất cứ liên quan nào khác với âm thanh thì âm thanh vẫn đợc phát ra dới dạngnhững mặt elipsoid
Trong vùng màu đỏ, âm thanh sẽ đợc nghe thấy với toàn bộ cờng độ của nó Trongvùng màu vàng, âm thanh loãng đi theo khoảng cách đến nguồn âm Các khoảng cáchminFront, maxFront, minBack, maxBack là các trờng đợc xác định bởi nút sound, đó làcác hớng Cú pháp của nút Sound nh sau:
Sound {
SFVec3f direction 0 0 1 SFFloat intensity 1 SFVec3f location 0 0 0 SFFloat maxBack 10 SFFloat maxFront 10
Trang 16
SFFloat minBack 1 SFFloat minFront 1 SFFloat priority 0 SFNode source NULL SFBool spatialize TRUE }
Các trờng khác có tác dụng nh sau: Direction là một vectơ xác định hớng mà âmthanh truyền tới Intensity là cờng độ của âm thanh Giá trị 1 là toàn bộ cờng độ của âmthanh trong file, còn giá trị 0 là hoàn toàn yên lặng Location là vị trí của nguồn âm thanhtrong thế giới 4 thông số max/ min/ Front/Back xác định hình dạng của elipsoid nh đã nóiở trên Ví dụ: Để có một âm thanh có thể nghe rõ nh nhau ở tất cả các hớng bạn hãy lấymaxFront = maxBack, minFront = minBack Nếu bạn không muốn âm thanh bị giảm theokhoảng cách Bạn hãy đặt tất cả các giá trị với cùng một khoảng cách mà khoảng cách đóđủ lớn để có thể bao trùm toàn bộ thế giới của bạn Nếu bạn muốn cho âm thanh của bạnnhỏ dần đi theo khoảng cách, hãy đặt các giá trị max là 10 nhân với giá trị min.
Priority là mức độ u tiên của âm thanh Brouser có một số các kênh âm thanh vàPriority của các âm thanh đợc sử dụng để xác định xem âm thanh nào sẽ đợc phát ra, nósẽ lấy giá trị 0 hoặc 1 âm thanh nền có mức độ u tiên thấp với giá trị là 0, mức độ u tiêncao nên dùng với những âm thanh ngắn nh tiếng chuông, tiếng còi nó có giá trị 1.
Trờng Spatialize đợc brouser dùng để xác định việc truyền âm thanh, điều đó cónghĩa rằng nó sẽ phát âm thanh thông qua các speaker đợc xem là các nguồn âm thanh, vìvậy bạn sẽ nghe thấy âm thanh thay đổi khi bạn thay đổi cách liên hệ với nó Nếu nh tr-ờng này là FALSE thì brouser sẽ không thực hiện điều này Trờng này có ích trong việctối u hóa cũng nh trong việc tạo ra các âm thanh bao xung quanh.
Có một yếu tố còn cha có trong nút sound, đó chính là nút nguồn âm, đây là một nútrất quan trọng Nó có thể là nút AudioClip hoặc nút MovieTexture Nếu bạn sử dụngMovieTexture, brouser sẽ phát âm thanh từ một file hình (movie file) Cách này hữu íchtrong việc phát âm thanh từ các file movie Cách còn lại tỏ ra hiệu quả hơn là sử dụng nútAudioClip, cách này sẽ đợc trình bày dới đây.
Các chức năng của AudioClip nh sau: Trờng url là một danh sách các file khôngnén có dạng WAV hoặc General MIDI MID Điều này rất hữu ích cho việc kết hợp vớiâm nhạc Brouser sẽ trình bày file đầu tiên trong danh sách mà nó có thể load Loop dùngxác định xem âm thanh có đợc lặp lại không, và description là sự mô tả về âm thanh màbrouser muốn trình bày Pitch là hệ số tốc độ phát lại và cờng độ của âm thanh Giá trịpitch 1.0 là tốc độ thông thờng, giá trị pitch là 0.5 thì việc phát lại sẽ ở tốc độ bằng mộtnửa Giá trị là 2.0 sẽ cho kết quả ngợc lại, tăng gấp đôi tốc độ phát âm thanh.
StartTime và StopTime là các giá trị SFTime, chúng dùng để xác định khi nào phát
Trang 17
nó với các cảm biến và các đờng dẫn Một cảm biến sẽ phát ra một tín hiệu báo khi đếnthời gian đợc kích hoạt, và nếu nó đợc nối với một nút AudioClip thông qua việc đặtStartTime thì âm thanh sẽ đợc phát ra Chúng ta sẽ xem xét thêm về điều này khi tơng táctrực tiếp với các sensor.
Fade away
Một vấn đề nữa cần xem xét ở các nút sound là việc giải nén Các file dạng WAVlà quá lớn và tốn nhiều thời gian để download, vì vậy ta phải hạn chế sử dụng chúng đểtăng hiệu quả Các file MIDI tốt hơn và tỏ ra có hiệu quả trong nhạc nền Tuy nhiên cầnphải làm cho nó đạt độ trong (giống file WAV) một cách tối đa có thể đợc Nếu bạn cócác file này, chỉ cần ngắn và chất lợng đủ chấp nhận đợc, chứ không ai có thể đợi 10 phútđể download những file có chất lợng WAV.
Đó là tất cả những vấn đề cơ bản mà bạn cần biết về âm thanh Để tạo ra nhữngâm thanh nh tiếng chuông cửa, chúng ta cần có khả năng tơng tác với thế giới thông quacác sensor và những dụng cụ tơng tự nh vậy Chúng ta cha xem xét đến vấn đề này và tôixin dừng phần trình bày về âm thanh của mình ở đây.
c,ánh sáng và màu sắc
ở phần trớc, chúng ta đã xét một số đối tợng đặc biệt đó là IndexFaceSets,Extrusions và ElevationGrid, chúng tạo ra những hình rất đẹp, tuy vậy ta có thể làm nhiềuhơn thế nữa Những nút hình học này cho phép bạn xác định pháp tuyến, màu sắc, kiểuloại và những tham số khác để có thể tuỳ chọn sự xuất hiện của các đối tợng này Tôi sẽgiải thích một chút về những điều này và trình bày cách ứng dụng chúng.
Pháp tuyến (Normal):
Một pháp tuyến là một vector ứng với một bề mặt, nó nằm vuông góc với bề mặt ởđiểm mà tại đó nó cắt bề mặt Các pháp tuyến đợc sử dụng trong các VRML Brouser đểlàm việc tính toán trở nên sáng sủa hơn
Tuy nhiên bạn vẫn phải cẩn thận vì công việc của bạn ở đây không phải là lập trình đồhọa 3D Nh tôi đã đề cập, Brouser sử dụng các pháp tuyến để làm cho việc tính toán trởnên sáng sủa hơn Dựa vào hớng của pháp tuyến, brouser sẽ đánh bóng bề mặt theo nhữngcách khác nhau Nếu 2 bề mặt có các pháp tuyến tạo với nhau 1 góc nhỏ hơn một giá trịđã định nào đó, brouser sẽ đánh bóng làm trơn và nối chúng lại với nhau, và tạo nên mộtvùng tiếp xúc cong Nếu góc lớn hơn giá trị đã định đó, brouser sẽ đánh bóng và kết nốichúng thành một cạnh Khi đó góc này đợc gọi là góc gấp, đó là một trờng xuất hiện ởtrong extrusions, Elevationgrid và IndexFaceSets Sử dụng chúng có thể làm tăng khảnăng hiển thị vật thể, làmvật thể trơn hơn hoặc có cạnh gấp.
Hãy xem phần example và code để biết cách làm một góc xuất hiện trong các đối tợng Bây giờ ta hãy quay lại với các pháp tuyến Brouser sẽ tạo ra các pháp tuyến ngầmđịnh cho tất cả các loại nút, bao gồm cả các đối tợng đặc biệt Tuy nhiên những nút hìnhhọc đặc biệt có một trờng là trờng pháp tuyến, trờng này chứa nút pháp tuyến (normalnode) Nó cho phép bạn xác định các pháp tuyến một cách rõ ràng nhờ đó bạn có thể đạtđợc hiệu quả cao về bố trí ánh sáng Các pháp tuyến này đợc xác định cho mỗi đỉnh hoặccho mỗi mặt, xác định điều này bằng trờng normalPerVertex Nếu trờng này là TRUE thìcác pháp tuyến đợc xác định cho mỗi đỉnh, nếu là FALSE thì các pháp tuyến đợc xác địnhcho từng mặt Nếu bạn hoàn toàn không xác định các pháp tuyến thì brouser sẽ tạo rachúng một cách ngầm định, đây là giải pháp tốt nhất cho hầu hết các trờng hợp Bạn cũngchỉ sử dụng đến các pháp tuyến khi cần có những kết quả đặc biệt Việc tự xác định cácpháp tuyến sẽ làm bạn tốn rất nhiều không gian, và nhiều thời gian để download Vì vậynên hạn chế điều này và chỉ thực hiện khi thực sự cần thiết.
Trang 18
Trên đây là phần lý thuyết, bây giờ ta sẽ đi vào cụ thể Ngoài các trờngCreaseAngle, NormalPerVertex đã trình bày còn có một số trờng mới và nút mới Chúngta sẽ bắt đầu với nút Normal đó là nút bao gồm một tập các pháp tuyến, nó chỉ đợc sửdụng trong trờng normal
Các nút hình học có chứa trờng ccw Nó xác định các đỉnh của bề mặt đợc xét thứtự theo chiều kim đồng hồ hay ngợc chiều kim đồng hồ Nó ảnh hởng đến hớng của cácpháp tuyến ngầm định mà những pháp tuyến ngầm định này đợc sử dụng trong việc tínhtoán trực quan Nếu bạn nhìn vào bề mặt với các đỉnh ngợc chiều kim đồng hồ thì pháptuyến sẽ chỉ về phía bạn Nếu bạn nhìn một bề mặt với các đỉnh theo chiều kim đồng hồthì pháp tuyến sẽ chỉ ra ngoài và sẽ không nhìn thấy Thiết lập sai trờng này có thể gây ramột số kết quả thú vị ví dụ nh vật thể không có bề mặt trớc (để lộ rõ cấu trúc bên trong).Trờng ccw đợc ngầm định là TRUE
Trờng tiếp theo là NormalIndex Nó bao gồm một danh sách một số mặt hoặc cácđiểm, phụ thuộc vào trờng NormalPerVertex Mặt (điểm) thứ nhất đợc xác định bởi trởngCoorIndex (Coor) với số 0, tiếp theo nh vậy đến n-1 Trong đó n là số mặt (điểm) TrờngNormalIndex xác định pháp tuyến nào tơng ứng với mặt (điểm) nào Nh vậy bạn khôngcần xác định các pháp tuyến theo thứ tự giống với các mặt (điểm) Nếu bạn không dùngtrờng này thì các pháp tuyến sẽ có thứ tự giống với các mặt, điểm.
Các nút extrution và IndexFaceSet cũng có trơng Convex Nếu nó là TRUE thìbrouser sẽ không kiểm tra việc các đối tợng chồng lên nhau Giá trị ngầm định là FALSE,nó an toàn hơn Bạn chỉ nên thiết lập trờng này khi biết chắc vật thể hoàn toàn lồi
Màu sắc:
Tơng tự nh các pháp tuyến, ta có thể điền màu sắc khác nhau vào các mặt hay cácđiểm Điều này đợc thực hiện bởi một trờng Color, nó chứa một nút Color Tơng tự nhvới trờng normal (Pháp tuyến) nó cũng có trờng ColorIndex và ColorPerVertex và cũngcó tác dụng giống nh trờng normal
Cú pháp của nút color là nh sau:Color {
exposedField MFColor color [] }
8.Một số vấn đề về lập trỡnh VRML
a,Tỏi sử dụng cỏc đối tượng
Nếu bạn có nhiều đối tợng giống hệt nhau , thờng rất khó khăn để duy trì việc viếtchính xác nhiều đối tợng theo cùng một loại Do đó, bạn có thể sử dụng lại các định nghĩaở phần trớc Sử dụng hộp này, bạn có thể định nghĩa nó để có tên FBOX Mỗi khi bạnmuốn sử dụng lại hộp, bạn có thể chỉ gõ USE FBOX thay cho toàn bộ định nghĩa Ví dụđợc chỉ ra dới đây:
DEF FBOX Shape {
appearance Appearance { material Material {
Trang 19
} }
geometry Box { }
USE FBOX
Đây không chỉ là một bit của ví dụ đơn giản, khi tạo hai hộp chính xác tại cùngmột vị trí không chỉ là các thứ mà bạn muốn Thỉnh thoảng, là định nghĩa USE tại mộtvài nơi bit có ý nghĩa hơn Đồng thời bạn có thể DEF/USE bất kỳ loại nút nào vì vậy bạn
muốn sử dụng lại Appearance của một đối tợng, bạn có thể thực hiện tốt điều đó
Shape {
appearance DEF APP1 Appearance { material Material {
} }
geometry Box { }
}Shape {
appearance USE APP1 geometry Box { }
File bạn đang kết hợp theo cách này phải là VRML hợp lệ, vì vậy nó phải là cácheader và mọi thứ mà thế giới VRML phải có Nếu bạn không tải cân bằng vào mộtbrowser, bạn không cần gạch chân.
Chỉ có một thứ đợc bao trùm lên, đó là mẫu Điều này là thực sự liên quan tới các sựkiện và các route nhng chúng tôi phải giải thích các trờng, thật dễ dàng để giải thích Việclấy mẫu đầu tiên là một cách để sử dụng lại mã của bạn Nếu bạn muốn một số các đối t-ợng của cùng một loại, bạn có thể sử dụng DEF và USE tuy nhiên, nếu bạn muốn sửdụng một số đối tợng giống nhau, nhng với một chút khác nhau, có thể nói các chiều caokhác nhau Trong trờng hợp đó, bạn có thể sử dụng PROTO để thay thế Để định nghĩamẫu đầu tiên, bạn định nghĩa đối tợng của bạn và định nghĩa các trờng và sự kiện với nó.dới đây là một ví dụ về PROTO đối với một hộp với biến màu sắc:
PROTO VBox [
Trang 20diffuseColor IS boxColour }
}
geometry Box { }
}}
Trờng trong các ngoặc vuông tại phần đầu của khai báo là giao diện của một đối ợng và các con số là các giá trị mặc định cho trờng Khi một trờng hợp của VBox đợc
t-khai báo, giá trị đợc sắp xếp vào trờng boxColour thay thế vào trờng diffuseColor của nút
Material Do đó, để khai báo red VBox và green VBox, chúng ta có thể sử dụng nút
VBox mới tại bất kỳ đâu chúng ta có thể sử dụng nút Shape, nút cấp đỉnh trong phần khaibáo là nút Shape
VBox { }VBox {
boxColour 0 1 0}
Đầu tiên sử dụng các định nghĩa red VBox mặc định, thứ hai đa ra một green VBox.Bạn có thể định nghĩa eventIns, eventOuts và exposedFields cho các mẫu chuẩn theo cùngmột cách, sử dụng IS để ánh xạ trờng PROTO thành một trờng trong sự thực hiện TrờngPROTO phải đợc ánh xạ theo cùng một kiểu trờng/ sự kiện và cũng là cùng loại dữ liệu.Chỉ một ngoại lệ là bạn có thể ánh xạ một trờng thông thờng trong định nghĩa PROTOthành exposedField trong sự thực hiện khi trờng thông thờng là tập hợp phụ cácexposedField, vì vậy ánh xạ hai trờng sẽ không có hại gì cả Bạn không thể áp dụng theocách khác.
Nếu bạn muốn định nghĩa PROTO ở một nơi nào khác hơn là trong file chính, bạncó thể sử dụng EXTERNPROTO Điều này nói cho các browser số lợng các định nghĩađối tợng trong một file khác Trong file chính của bạn, bạn bao gồm định nghĩaEXTERNPROTO và phải có PROTO đầy đủ trong file khác Cú pháp EXTERNPROTOđợc chỉ ra dới đây:
EXTERNPROTO VBox [ field SFColor boxColour]
File "proto.wrl" trong trờng hợp này phải chứa header VRML và các định nghĩamẫu chuẩn đầu tiên, không phải là một thứ gì khác Nếu bạn có nhiều hơn một PROTOtrong file của bạn, bạn phải khai báo giống nh một thứ bạn đang sử dụng:
"proto.wrl#VBox"
Trang 21
Chú ý rằng bạn không cần phải bao gồm các giá trị mặc định trong các định nghĩaEXTERNPROTO, chỉ là các kiểu trờng Thay thế vào một file đơn lẻ, nếu bạn muốn baogồm các lựa chọn phức tạp đối với file để tải, bạn có thể đặt chúng vào ngoặc vuông:
EXTERNPROTO VBox [ field SFColor boxColour]
"proto.wrl"
"http://www.mydomain.com/protos/proto.wrl"]
d,Lắp ráp
VRML không còn là ngôn ngữ tĩnh nữa Nó là những thứ sống động, có thể nhậnđầu vào và đa ra các đầu ra khác nhau Điều này yêu cầu một vài loại mô hình thực hiệnbên trong, để thông báo những thứ đã thay đổi và trật tự thực hiện nó Điều này đợc thựchiện do lắp ráp các thứ với nhau trong thế giới, cung cấp các đờng dẫn kèm theo cácthông điệp đi cùng với chúng Những sự lắp ráp này là không nhìn thấy đợc, chúng khôngcó sự hiển thị nào trong thế giới nhng chúng gắn các mô hình cơ sở với nhau, cho phépcác hiệu quả to lớn
Phần lớn các nút có eventIn và eventOut và rất nhiều exposedField, đó là cách cácnút nói chuyện với nhau eventIn giống nh các bộ nhận nghe các thông điệp gọi các
events từ bên ngoài và đa chúng đến đợc xử lý eventOut là các bộ truyền phát, gửi các
sự kiện từ nút ra bên ngoài exposedField là sự kết hợp cả hai Chúng đợc coi nh các file
thông thờng fieldname, eventIn gọi là set_fieldname và eventOut gọi là
fieldname_changed Nói chung, các phần set_ và _changed của tên là không cần thiết,
bạn có thể sử dụng fieldname của exposedField và mô hình thực hiện sẽ làm những thứ
bạn mong muốn
II Scripting
Ở phần 3 trớc chúng ta đã tìm hiểu hầu hết các tiêu chuẩn của VRML97 Bây giờtiếp đến chúng ta tìm hiểu một chủ chủ đề mới Chúng ta đi theo hớng mô tả VRML97nh ngôn ngữ lập trình tuần tự Chúng ta sẽ học cách làm thế nào để sử dụng đợc công cụmạnh nhất của VRML97 : scrripting
1,Java, JavaScript, VRMLScript, hay ECMAscript?
Điều đầu tiên chúng ta cần giải quyết đó là làm rõ sự mập mờ của các khái niệmtrên, để chúng ta hiểu một cách chính xác những gì chúng ta đang đề cập tới Hầu hếtchúng ta đã một lần nghe về java và javascrip Java lập trình một ngôn ngữ lập trình hoànhảo của Sun, nó hoàn toàn độc lập với máy Bạn dịch chơng trình của mình sang dạng mã
byte(bytecode) và chơng trình đích đợc tạo ra có thể chạy trên bất kỳ loại máy nào nh thể
có một máy java ảo đã đợc cài đặt vào Java lập trình một ngôn ngữ lập trình có nhiều uđiểm phù hợp cho việc phát triển các ứng dụng lớn.
JavaScript là một ngôn ngữ đợc Netscape phát triển có cú pháp tơng tự nh java Tuynhiên, nó không đợc hoàn hảo bằng java và không phải là ngôn ngữ biên dịch Nó đợc tạora với mục đích sử dụng cho các script bên trong các trang web và thờng khá đơn giản Nó