Bài giảng Đồ họa máy tính: Bài 8 - Lê Tấn Hùng

7 10 0
Bài giảng Đồ họa máy tính: Bài 8 - Lê Tấn Hùng

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

Thông tin tài liệu

VRML dïng nót Group ®Ó thùc hiÖn ®iÒu nµy „ Nót Group cã thÓ cã c¸c nót con.. Xem code Chaþ vÝ dô}[r]

(1)

(c) SE/FIT/HUT 2002

Ngôn ngữ mô hình hóa thực ảo VRML

(c) SE/FIT/HUT 2002

VRML ? LÞch sư

„ VRML ngôn ngữ văn dùng để mô tả môi tr−ờng t−ơng tác vật thể 3-D

„ Các file text VRML có đuôi wrl

VRML 1.0 dựa ngôn ngữ mô tả Silicon Graphics 3D gọi Open Inventor VRML 1.0 cho phép mô tả cảnh tỉnh không tơng tác

VRML 2.0 ngôn ngữ mô tả dựa Silicon Graphics đợc goi Moving Worlds

VRML1 (1994) & VRML2 (1997) có mở rộng thêm chủ đề liên quan

(c) SE/FIT/HUT 2002

TÝnh chất

Bạn xem file VRML nhờ trình duyệt VRML : Một ứng dụng hỗ trỵ VRML

„ Một ứng dụng VRML nhúng vào trình duyệt HTML „ Bạn xem file VRML từ đĩa cứng , hay qua mạng Internet

„ Toµn bé trang Web „ Nhóng vµo trang Web „ Toµn bé khung cđa trang Web „ Nhóng vào khung trang Web Nhúng vào ứng dụng đa thời gian Bạn tạo file VRML nhê :

„ Một trình soạn thảo văn đơn giản „ Một ch−ơng trình ứng dụng

„ Một trình dịch định dạng mơ hình hóa 3D „ Một ngơn ngữ tạo vật thể (nh−ngơn ngữ kịch Perl )

(c) SE/FIT/HUT 2002

CÊu tróc file VRML

„ Trong file VRML gồm có : „ Đầu đề file „ Comments– thớch

của bạn

Nodes nút chứa thông tin quan trọng cảnh vật

Fields thuộch tính nút mà bạn thay i

Values thuộc tính giá trị

„ Vµ

#VRML V2.0 utf8

# example1.wrl - a yellow box Shape

{ geometry Box{ } # default box appearance Appearance # override appearance

{material Material # with a new material

{diffuseColor 1.0 1.0 0.0 # yellow

} } }

Comments-chú thích

Lời thích bắt đầu với ký tù #

„ Ký tù # nháy kép bắt đầu thích.

Chú ý dòng đầu VRML 2.0 :

#VRML 2.0 utf8

và bắt buộc !

„ Từ khóautfdùng để nói đến ký tự quốc tế UTF-8 đ−ợc

dïng file.

Lời thích khoảng trắng không đợc bảo toàn

bởi VRML document server.

Phần tử VRML: Nút

Một file VRML gồm có danh sách nút, nút chứa phần thông tin mô tả toàn cảnh

„ Một nút định nghĩa hình dạng vật thể, hay thuộc tính của đối t−ợng , nh−màu màu sắc hệ tọa độ

Mỗi nút có tên, theo sau cặp dấu { } không chứa trờng hc nhiỊu tr−êng

„ Một câu lệnh tr−ờng gồm có tên tr−ờng sau có hay nhiều giá trị.Các tr−ờng đ−ợc viết theo trật tự khác „ Tên nút bắt đầu ký tự hoa, tên tr−ờng bắt đầu ký tự

th−êng (case sensitive) „ VÝ dụvềnót

(2)

(c) SE/FIT/HUT 2002

CÊu tróc ph©n líp

NútShapechứa hai trờng,geometryappearance, trờng lại chứa nút khác đợc coi nhgiá trị chúng

Shape

{ appearance NULL exposedField SFNode geometry NULL exposedField SFNode }

Đôi nút Shapecó trờng Appearancenhng trờng geometry (ví dụ nhcác vật thể không nhìn thấy!)

Trờng geometrychứa nútBoxvà trờng appearancecoi nút Appearancenhlà giá trị có

Nút Appearancelại chứa nút khác làMaterial.

Câu trúc nút mà nút lại đợc chứa nút khác gäi lµscene graph

(c) SE/FIT/HUT 2002

CÊu tróc c¶nh

„ VRML giúp bạn chia lớp thành khoanh quản lý đ−ợc „ Mỗi nút riêng lẻ đơn giản, kết nối nút cho phép tạo

c¸c lớp phức tạp

Nút shapeđợc tạo nên trung t©m cđa thÕ giíi VRML „ Mét file VRML cã thĨ chøa nhiỊu nót shape

„ C¸c nót shape trùng lên chúng đợc tạo nên vị trí

Bạn nên xem sử dụng trờng geometries sau zShape

geometry

appearance zAppearance

material zBox

zMaterial

diffuseColor

(c) SE/FIT/HUT 2002

Cơ vỊ nót shape

„ Box

{size 12 10 # x, y, z (=w, h, d)

}

Xem code Ch¹y vÝ dơ

„ Cone

{ bottomRadius # so 10 units wide

height 12

side TRUE

bottom TRUE

Xem code Chạy ví dụ

} Nút Shapelà viên gạch

tạo nên giới VRML Các nút Shape gốc khối chuẩn:

ã Box

• Cone

• Cylinder

• Sphere

• Text

Các trờng nút Geometry điều khiển kÝch th−íc

„ Kích th−ớc th−ờng có đơn vị m, nh−ng đơn vị

(c) SE/FIT/HUT 2002

Cơ nút shape

„ Cylinder

{ radius # chiÒu réng lµ

height

bottom TRUE # “cup” có cạnh đáy

side TRUE

top FALSE # nh−ng khơng có đỉnh }

Xem code Ch¹y vÝ dô

„ Sphere # đơn giản nút shape { radius # nh−ng phức tạp } Xem code Chạy ví dụ

Nót text

„ Tránh tạo đặc tả kỹ thuật Web-based 3D/VR

„ Text hữu Ých hệ chuyên gia,ví dụ nhtrong khoa học trùc quan „ Text

{ string “Hi!” # multi-field

length # stretch to this width (0=natural width) fontStyle FontStyle

{ family “SERIF” # or SANS or TYPEWRITER style “PLAIN” # or BOLD ITALIC

size

}

} Xem code Chaỵ ví dụ

CÊu tróc ¶nh bitmap

„ Sư dơng ¶nh bitmap thay cho mô hình 3D thật cụ thể tiết kiệm đợc nhiều thời gian xử lý

„ Tuy vËy viƯc sư dơng réng r·i ảnh bitmap có bất lợi sau: Cấu trúc ảnh đợc gủi cho trình duyệt ,có thể phải qua

quá trình thông tin chËm

(3)

(c) SE/FIT/HUT 2002

CÊu tróc VRML

„ Appearance

{ texture ImageTexture

{ url “skin.gif” # GIF, JPG or PNG repeatSTRUE # repeat or stretch? repeatT TRUE

}

} Xem code Ch¹y vÝ dơ

„ Các Texture URL đầy đủ URLt−ơng đối đơn giản nh−sử dụng

„ Cã ba kiĨu nót texture lµ : ImageTexture, MovieTexture and PixelTexture

Xem code Ch¹y vÝ dơ

(c) SE/FIT/HUT 2002

Hệ tọa độ

„ Một file VRML xây dựng nên thành phần giới VRML „ Một file thành đ−ợc xây dựng giới hệ toạ độ

„ Theo mặc định , tất vật thể đ−ợc xây dựng từ gốc hệ toạ độ „ VRML sử dụng hệ toạ thun h to Cỏc

Đơn vị chuẩn đo chều dài khoảng cách VRML m Góc radian

Một vòng quay 2radian 360 2radian, khoảng 6.28 radian,

90 là/2 radian, khoảng 1.57 radian

(c) SE/FIT/HUT 2002

Chuyển đổi hệ toạ độ

„ Một nút transformtạo hệ toạ độ có:

„ Positioned :gèc „ Rotated :gãc quay „ Scaled :tû lÖ

„ Liên hệ với hệ toạ độ cha „ Các vật thể đ−ợc xây dựng hệ

toạ độ đ−ợc định vị ,quay tỷ lệ với

„ Nhóm nút Transformtạo nhóm với toạ độ

rotation– h−íng • scale– kÝch cì • translation vị trí ã children vật thậ tạo Transform {

translation rotation scale children [ ] }

(c) SE/FIT/HUT 2002

Tr−êng children

„ Tr−êng childrenbao gåm mét danh s¸ch mét hay nhiỊu nót

„ Transform {

children [ Shape { } Shape { } Transform { } ] }

Nót transform

„ Tr−ờngTranslationđịnh vị hệ toạ độ X,Y Z

„ Transform { # X Y Z translation 2.0 0.0 0.0 children [ ]}

„ Tr−ờngScaleđể co hay giản hệ toạ độ dựa vàu hệ số tỷ lệ trục X, Y, Z

„ Transform { # X Y Z scale 0.5 0.5 0.5 children [ ] }

„ Tr−ờngRotationđịnh h−ớng hệ toạ độ quay quoanh cạnh góc quay

•Góc th−ờng đ−ợc đu đơn vị radian

• radian = độ/ 180.0 * 3.141 Transform { # X Y Z Angle rotation 0.0 0.0 1.0 0.52 children [ ] }

Nót transform

„ Co giãn , xoay dịch hệ toạ độ, sau Transform {

translation 2.0 0.0 0.0 rotation 0.0 0.0 1.0 0.52 scale 0.5 0.5 0.5 children [ ]}

„ Các thao tác đ−ợc thực từ d−ới lên bottom-up: „ Tr−ờng children đ−ợc co giãn ,xoay sau dịch

„ Thứ tự tr−ờng đ−ợc ấn định, độc lập với trật tự tr−ờng

(4)

(c) SE/FIT/HUT 2002

nót Appearance

„ C¸c vật thể gốc có màu phát từ bề màu trắng

Bạn điều khiển màu vật thể:

ãMu búng ãMu phỏt •Tính suốt •Tính khơng chiếu sáng •C−ờng độ ánh sáng bao

quanh

„ Mét nót Appearancemiªu tả toàn hình dạng vật thể

ã Tr−êngmaterialgåm c¸c thuéc tÝnh nh−color, transparency, etc „ Shape {

appearance Appearance { material }

geometry }

(c) SE/FIT/HUT 2002

nót Material

„ Mét nót Material®iỊu khiĨn c¸c thc tÝnh vỊ chÊt liƯu cđa vËt thĨ ãdiffuseColor màu bóng

ãemissiveColor màu phát ãtransparency Trong suèt hay kh«ng „ Shape {

appearance Appearance { material Material { diffuseColor 0.8 0.8 0.8 emissiveColor 0.0 0.0 0.0 transparency 0.0 } }

geometry }

(c) SE/FIT/HUT 2002

Nót material

NútMaterialcũng điều khiển tính chiếu sáng vật thể ã specularColor điểm có màu bật

ã shininess kích cở chỗ bật

ã ambientIntensity hiêu ứng ánh sáng xung quanh „ Shape {

appearance Appearance { material Material { specularColor 0.71 0.70 0.56 shininess 0.16

ambientIntensity 0.4 } }

geometry } Xem code Chạy ví dụ

(c) SE/FIT/HUT 2002

Bảng mµu th−êng dïng

0.12 0.83 0.83 0.83 0.20 0.20 0.71

0.10 Plastic Blue

0.20 0.61 0.13 0.18 0.27 0.00 0.00

0.15 Metalic Red

0.20 0.64 0.00 0.98 0.10 0.03 0.22

0.17 Metalic Purple

0.16 0.71 0.70 0.56 0.22 0.15 0.00

0.40 Gold

0.08 0.75 0.33 0.00 0.30 0.11 0.00

0.26 Copper

0.10 0.70 0.70 0.80 0.30 0.30 0.50

0.30 Aluminum

shininess specular

Color diffuse

Color ambient

Intensity Mô tả

nút Group

Thơng th−ờng cẩn nhóm đối t−ợng lại với VRML dùng nút Group để thực điều „ Nút Group có nút „ Có thể nút nút

group

„ Cã c¸c kiĨu nót group sau:

„ Bạn nhóm vật thể lại với để tạo thành vật thể phức tạp

„ VRML cã nhiỊu nót group bao gåm Group { }

Switch { } Transform { } Billboard { } Anchor { } Inline { }

Xem code Chaỵ ví dụ

Billboard Switch

Collision Inline Anchor

LOD Group Transform

KÕt nèi tíi mét vị trí khác

Cũng nhtrong trang Web , siêu liên kết sẵn có VRML Có thể kết nối tới kiểu liệu hợp lệ , bao gåm c¸c trang VRML

kh¸c, c¸c trang HTML ứng dụng CGI

(5)

(c) SE/FIT/HUT 2002

C¸c nót Group-Switch-Transform

„ Nút Grouptạo nút khác

Mỗi nút childtrong group đợc hiển thị

Group { children [ ] } „ Nót nhãm Switcht¹o mét nhãm cã

thĨ chun cho „ ChØ cã mét nót childgroup is

trong nhóm đợc hiển thị Bạn chọn nút child

ãNỳt c ỏnh s tng minh t

ãA -1không chọn nút Switch { whichChoice choice [ ]

}

Xem code Chaỵ ví dụ

„ Nút Transformtạo nhóm dựa h to ca nú

Mỗinút childlà đợc hiĨn thÞ Transform {

translation 0.0 0.0 0.0 rotation 0.0 1.0 0.0 0.0 scale 1.0 1.0 1.0 children [ ] } „ Nót nhãm Billboardt¹o nhóm

vi h to c bit

ãMỗi nútchildđợc hiển thị displayed

ãH to tr li mặt xem „ Billboard {

axisOfRotation 0.0 1.0 0.0 children [ ] }

(c) SE/FIT/HUT 2002

Nót Anchor vµ Inline

„ Nút Anchortạo nhóm mà hoạt động nh−kiểu kớch chut c

Chỉ nútchildlà đợc hiển thị „ KÝch cht vµo nót child theo sau

bëi mét URL

„ Tr−ờng descriptionđặt tên cho nút anchor

Anchor { url "stairwy.wrl" description "Twisty Stairs" children [ ] }

„ Xem code Ch¹y vÝ dơ

NútInlinetạo nhóm đặc biệt từ nội dung file VRML khác

„ Nút đọc từ file đ−ợc chọn URL

„ Mỗi nútchildlà đợc hiển thị Inline { url "table.wrl" } „ Inline {

url "table.wrl" } Transform {

translation -0.95 0.0 0.0 rotation 0.0 1.0 0.0 3.14

children [ Inline { url "chair.wrl" } ] }

Xem code Ch¹y vÝ dơ

(c) SE/FIT/HUT 2002

Đặt tên

Nu nhiều vật thể giống yếu tố hình học hay hình dạng , bạn phải dùng nhiều nút giống hệt „ Thay vào , định nghĩamột tên

cho nút tìm thấy „ Sau đó, sử dụngtên để chia sẻ

cho nót tơng tự ngữ cảnh

Cú pháp DEFtạo tên cho nút

Shape {

appearance Appearance { material

DEF RedColor

Material { diffuseColor 1.0 0.0 0.0 } } geometry }

„ DEFbắt buộc phải ký tự hoa „ Có thể đặt tên cho nút „ Tên hầu hết chuỗi ký

tù vµ sè

„ Trong mét file tên phải

(c) SE/FIT/HUT 2002

Tõ khãa use

„ Từ khoáUSEcho phép sử dụng nút đ−ợc đặt tên tr−ớc

„ Shape {

appearance Appearance { material

USE RedColor } geometry }

Xem code Ch¹y vÝ dơ

„ USEbắt buộc phải chử hoa „ Sử dụng lại nút đ−ợc đặt tên

gọi biến hay thể „ Một nút đ−ợc đặt tên có

mét vµi thĨ hiƯn

„Mỗi thể chia sẻ miêu tả nút „Chỉ có thể hiên mà tên

của nút đ−ợc định nghĩa file

−u ®iĨm

„ Đặt tên sử dụng nút: „ L−u đánh vào „ Giảm kích th−ớc file

„ Cho phép thay đổi nhanh chóng vật thể có thuộc tính „ Tăng tốc độ cho trình xử lý trình duyệt

„ Tên cần thiết cho cảnh động

Giíi thiệu hoạt cảnh

Cỏc nỳt nhBillboardvAnchorcú cỏc hnh động xây dựng sẵn „ Bạn tạo hành động riêng bạn nh−làm cho vật thể cú

thể di chuyển,xoay, co giÃn n÷a

„ Chúng ta cần ph−ơng thức để kích , thời gian hố, đáp ứng chuỗi kiện theo trật tự để t−ơng tác tốt ng−ời dùng giới bên ngồi

„ Hầu hết nút thành phần dòng hoạt cảnh „ Nút hoạt động nh−các phần điện tử ảo

„ Nút gửi nhận kiện Các đờng dây nối nút lại với Một kiện thông báo đợc gửi nút

Một giá trị liệu (giống nh−sù dÞch chun)

(6)

(c) SE/FIT/HUT 2002

Thêm kiện

Để quay vật thể:

ã Nối nút mà gửi kiƯn rotation víi tr−êng rotationcđa nót Transform

„ §Ĩ làm vật thể nhấp nháy:

ã Nối nút gưi sù kiƯn color víii tr−êng diffuseColorcđa nót Material

(c) SE/FIT/HUT 2002

Cài đặt hoạt cảnh

„ Để cài đặt dòng hoạt cảnh , bạn cần ba thứ : „ Một nút gửi kiện

„ Nút phải đ−ợc đặt tên với câu lệnh DEF „ Một nút nhận kiện

„ Nút phải đ−ợc đặt tên với câu lệnh DEF „ Một đ−ờng dõy kt nichỳng li

Mỗi nút có trờng , thông tin vào thông tin cần có: field:Một giá trị liệu đợc lu trử

eventIn:đầu vào eventOut:đầu

Một trờng exposedFieldviết gọn cho giá trị liệu, đầu vào đầu

(c) SE/FIT/HUT 2002

Các ví dơ Vµo-

„ Nót OrientationInterpolator

cã kiện :

value_changedđa giá trị gãc xoay

„ NótPositionInterpolator cã sù kiƯn :

value_changedđa vị trí

Nút TimeSensorcó sù kiƯn ra: „ time®−a thêi gian

„ NútTransformcó kiện vào:

set_translation set_rotation set_scale

NútMaterialcó kiện vàu: set_diffuseColor

„ set_emissiveColor „ set_transparency

(c) SE/FIT/HUT 2002

Tõ khãa route

„ C©u lƯnh ROUTEcho phÐp kÕt nèi hai nót l¹i víi :

„ Tên nút gửi kiện Tên nút nhËn vµ s−kiƯn vµu „ ROUTE

MySender.rotation_changed TO MyReceiver.set_rotation ROUTETObắt buộc phải

ký tự hoa

„ Các quy −ớc đặt tên

„ Hầu hết nút có exposedFields „ Nếu tr−ờng exposed tờn lxxx, thỡ:

ãset_xxxlà kiện vào đợc gán cho trờng ãxxx_changedlà kiện

đ−ợc gửi tr−ờng thay đổi

•Các tiếp ngữset_ và_changed tuỳ chọn nh−ng nên có để phõn bit

Nút Transformcó: Trờngrotation ãSự kiện vàoset_rotation ãSự kiện rotation_changed

Hoạt cảnh

Hot cảnh cho phép thay đổi qua thời gian: • Vị trí – tơ

• H−ớng - máy bay l−ợn • Màu sắc – i

Hoạt cảnh bắt buộc điều khiển qua thời gian: ã Khi bắt đầu dừng

ã Mc nhanh chm

điều khiển thời gian

Nút TimeSensorcho phép bạn điều khiển thời gian bắt đầu kết thúc Nút cảm ứng tạo kiện thời gian chạy

Để kích hoạt , dẫn kiện thời gian tới nút khác

Nút TimeSensortạo hai sù kiƯn thêi gian lµabsoluteand fractional

„ Sù kiƯn thêi gian Absolute t¹o thêi gian thùc

• Thời gian tuyệt đối đ−ợc đu giây từ 12:00h mồng tháng năm 1970!

(7)

(c) SE/FIT/HUT 2002

sư dơng thêi gian phân đoạn

Sự kiện thời gian phân đoạn nhận giá trị số từ 0.0 tới 1.0 Khi nút cảm ứng thời gian bắt đầu , đầu cđa nã lµ 0.0 „ KÕt thóc mét chu kỳ_ cycle, đầu 1.0

Số giây 0.0 1.0 đ−ợc xác định xung tuần hồn_ cycle interval

„ C¶m biÕn thời gian chạy mÃi , chạy qua mét vßng råi dõng

(c) SE/FIT/HUT 2002

Nút timesensor

Nút TimeSensortạo kiện dựa vào thời gian

Thời gian bắt đầu_startTimevà thời gian kết thúc_stopTimekhi chạy

Thời gian tuần

hoàn_cycleIntervalthời gian cho chu kỳ

Lặp_loop có lặp lại hay không TimeSensor {

cycleInterval 1.0 loop FALSE startTime 0.0 stopTime 0.0 }

Để tạo thời gian chạy liên tục: loop TRUE

stopTime<=startTime Khi stop time <= start time,thì stop

time bị bá qua

„ Ch¹y cho tíi stop time: „ loop TRUE

„ stopTime>startTime „ Để chạy vịng sau dừng:

„ loop FALSE „ stopTime<=startTime Sự kiện vào liệu set_startTime:

đặt thời gian bắt đầu

„ Sự kiện vàu liệuset_stopTime: „ đặt thời gian kết thúc

(c) SE/FIT/HUT 2002

Tr−êng d÷ liƯu

„ Tr−êng d÷ liƯuisActive:

Ra liệu làTRUEkhi thời gian bắt đầu

Ra liệu làFALSEkhi thời gian kết thóc

„ Tr−ờng liệutime: „ Đ−a thời gian tuyệt đối

„ Tr−êng d÷ liệufraction_changed: Đa giá trị từ 0.0 tíi 1.0

suèt mét chu ký

„ Đặt lại giá trị 0.0 lúc bắt đầu chu kú

Xem code Ch¹y vÝ dơ

(c) SE/FIT/HUT 2002

Chuyển đổi thời gian toạ độ

Để kích hoạt vị trí vật thể VRML cung cấp:

ãMột danh sách khoá vị trí key positionscho đờng di chuyển

ãThời gian bắt đầu vị trí

Nỳt interpolatorcú th chuyển đổi đầu vàu thời gian thành đầu to

ãKhi thời gian hai khoá vị trí, nút interpolator tính toán vị trí trung gian

Interpolating positions

Mỗi khoá vị trí với đờng dẫn có:

Một khoá giá trị key value (nhlà vị trí)

Một khoá thời gian phân đoạn Phép nội suy điền vàu giá

trị vàu giá trị khoá: Fractional TimePosition

0.1

Nút positioninterpolator

NútPositionInterpolatormiêu tả vị trí đờng dẫn

ã key khoá thời gian phân đoạn

ã keyValue khoá vị trí PositionInterpolator { key [ 0.0,

] keyValue [ 0.0 0.0 0.0, ] }

„ Th−ờng để gửi vào kiện đầu vào set_translationcủa nút Transform

Sự kiện đầu vào set_fraction: ã Đặt thời gian phân đoạn thời theo khoá đờng dẫn

Sự kiện đầu value_changed: ã Đa vị trí theo đờng

dn mi fraction c đặt

Xem code Ch¹y vÝ dơ

Sư dơng c¸c nót interpolator kh¸c

Ngày đăng: 09/03/2021, 04:08

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

Tài liệu liên quan