HANDSOMEROOT

Bài 6 : Các đối tượng hình học phức tạp trong VRML


1. Hiển thị văn bản (Text)

Nút này được thiết kế nhằm cho phép hiển thị một đoạn văn bản 2D trong thế giới ảo đang xây dựng. Nút này tương đối đơn giản nhưng nếu chúng ta thao tác với thuộc tính fontStyle (là nút FontStyle trong VRML) của nó thì lại khá phức tạp.

Ví dụ:

Shape {

    geometry Text{

        string ["ITqnu" "ntm"]

        fontStyle FontStyle{

            size 1

            family "ARIAL"

            style "BOLD"

            spacing 1

            justify "MIDDLE"

            horizontal TRUE

            leftToRight TRUE

            topToBottom TRUE

        }

    length [1 1]

    maxExtent 5.0

    }

}


Các tham số:

- string [“Nội dung văn bản”]: hiển thị các xâu trong cặp dấu “[]”.
- length [X1 X2]: độ dài của các xâu trong “string”.
- maxExtent Y: giới hạn kéo dãn của các dòng.

Các tham số của nút FontStyle (nếu chúng ta muốn đơn giản nút Text thì có thể đặt thuộc tính fontStyle này bằng NULL):

- family: tên font sử dụng.
- style BOLD / ITALIC / BOLDITALIC / PLAIN: kiểu chữ.
- size M: chiều cao, kích thước 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).


2. Xây dựng các đường thẳng trong hệ tọa độ ba chiều


Nút IndexedLineSet là nút vẽ một tập hợp các đường thẳng trong hệ tọa độ không gian ba chiều của thế giới VRML với tập hợp các màu tương ứng cho các đường thẳng đó.

Cú pháp:

IndexedLineSet{

    coord Coordinate{}

    coordIndex

    color Color{}

    colorIndex[]

    colorPerVerter TRUE

}


Nút này có các thuộc tính (một số thuộc tính của nút này cũng là nút – nằm trong nhóm nút Geometric Properties Nodes):
  • Coordinate: là nút xác định một tập hợp các điểm ảnh trong không gian (đây là các điểm đỉnh của các đường thẳng).
  • Color: nút này nhằm 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.
  • 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ụ 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ụ khác coordIndex [0 1 -1 2 0], ở đây kí hiệu “-1” cho biết hình ảnh được tạo trong VRML 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: được sử dụng để chỉ định màu sắc cho các điểm ảnh (khi colorPerVertex có giá trị là true) hay cho các đường thẳng (khi colorPerVertex có giá trị là false) trong coordIndex. Trường này lấy màu sắc được quy định từ nút Color. Ví dụ colorIndex [0 1 0 1]trong ví dụ đầu tiên (coordIndex [0 1 2 0] và colorPerVertex TRUE) ở trên có nghĩa là 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ư, còn trong ví dụ thứ hai (coordIndex [0 1 -1 2 0] và colorPerVertex FALSE) thì có nghĩa là đườ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: có giá trị boolean. Khi colorPerVertex nhận giá trị 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. Và khi trường này nhận 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).

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

    }

}


3. Xây dựng khung bề mặt trong không gian


Nút IndexedFaceSet sẽ tạo nên bề mặt bằng cách kết hợp các điểm với nhau.

Cú pháp:

IndexedFaceSet{

    coord Coordinate{}

    coordIndex[]

    color Color{}

    colorIndex[]

    colorPerVertex TRUE

    convex TRUE

    solid TRUE

}


Các tham số:

- Coordinate, coordIndex, Color, colorIndex, colorPerVertex: có đặc điểm tương tự như trong nút - IndexedLineSet đã nói ở trên. Chú ý là bề mặt luôn luôn được xác định bởi các đường thẳng khép kín vì thế không cần chỉ ra điểm đầu tiên lại một lần nữa trong trường coordIndex.

Ví dụ:

coordIndex [0 1 2 3]


Nếu có bốn điểm xác định, khi liên kết các điểm này sẽ tạo ra hình tứ giác bằng cách sử dụng thuộc tính coordIndex[] (coordIndex[0 1 2 3]) có nghĩa là đ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ứ tư và điểm thứ tư nối với điểm thứ nhất.

  • Convex: định nghĩa bề mặt là lồi hay lõm, trường này có giá trị kiểu boolean. Bộ trình duyệt VRML chỉ vẽ bề mặt lồi, trong trường hợp vẽ bề mặt lõm, bộ trình duyệt chia bề mặt đó thành các bề mặt lồi bé hơn để vẽ.

  • solid: sử dụng để 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.

Ví dụ:

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

    }

}


4. Xây dựng khung lưới và bản đồ trong không gian


Nút ElevationGrip cho phép xây dựng khung lưới được tạo bởi các điểm có độ cao xác định trong không gian. Thẻ này rất hữu ích cho việc xây dựng các mạng lưới hoặc địa hình chẳng hạn chúng ta có thể sử dụng nút này để vẽ một bản đồ địa hình trong không gian ảo.

Hình ảnh xây dựng được đặt trong không gian của mặt phẳng OXYZ. Đ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.

Cú pháp:

ElevationGrid {

    xDimension X

    xSpacing Y

    zDimension Z

    zSpacing W

    height []

    color Color []

    colorPerVertex TRUE

    convex TRUE

    solid TRUE

}


Các tham số:
- Color, colorPerVertex, convex, solid: có tính chất tương tự như đã nói ở phần trên, 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.
- xDimension: chứa số điểm trong mạng lưới nằm trên trục X.
- zDimension: chứa số điểm bên trong lưới nằm trên trục Z.
- xSpacing: là khoảng cách của hai điểm liên tiếp nhau theo hướng của trục X.
- zSpacing: khoảng cách của hai điểm liên tiếp nhau theo hướng của 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.
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.

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

    }

}

Kết quả của đoạn code trên:
Hình 2.1 Ví dụ về xây dựng khung lưới và bản đồ

Nhận xét

Bài đăng phổ biến từ blog này

[Share] CSDL Quản lý Shop Online

Hướng dẫn cài đặt VRML Pad và Cortona 3D Viewer

RANKING in SQL (ROW_NUMBER, RANK, DENSE_RANK,NTILE)