CHƯƠNG 1: CÔNG NGHỆ VR VỚI THƯƠNG MẠI ĐIỆN TỬ VÀ QUẢNG BÁ SẢN PHẨM TRÊN NỀN WEB
1.4. Giới thiệu OpenSceneGraph (OSG)
1.4.4. Một số lớp cơ bản trong Scene Graph
Các lớp trong Scenegraph hỗ trợ công việc dựng hình của các đối tượng mô phỏng. Hầu hết các lớp Scene Graph trong OSG được lấy ra từ osg::Node.
Một khái niệm gốc, nhóm, các nút lá là tất cả các kiểu nút khác nhau. Trong OSG, đó là tất cả các kiểu nút cuối cùng được lấy ra từ osg::Node và các lớp đặc biệt cung cấp chức năng đồ thị cảnh không ổn định. Ngoài ra, các nút gốc trong OSG không phải là một kiểu nút đặc biệt, nó đơn giản là một nút osg:Node không có cha.
1.4.4.1. Lớp Node
Các lớp node là lớp cơ bản cho hầu hết các nút trong đồ thị cảnh. Nó chứa các phương thức để tạo điều kiện thuận lợi cho sự giao nhau giữa các đồ thị cảnh, sự phân loại, các lời gọi ứng dụng, và sự quản lý trạng thái.
1.4.4.2. Group
Lớp Group là lớp cơ bản của bất kỳ lớp nút nào có thể có nút con. Nó là một lớp khóa mã trong sự tổ chức không gian của các đồ thị cảnh.
1.4.4.3. LOD
Lớp LOD hiển thị các nút con của nó dựa trên khoảng cách của chúng đến điểm nhìn. Lớp này thông thường được sử dụng để tạo mức chi tiết khác nhau cho các đối tượng trong quang cảnh.
1.4.4.4. MatrixTransform
Lớp MatrixTransform chứa một ma trận chuyển đổi hình học của các nút con của nó, cho phép các đối tượng quang cảnh được xoay, được biên dịch, được co dãn, được bóp méo, được chiếu, v.v…
1.4.4.5. Switch
Lớp Switch chứa mặt nạ luận lý để có thể hoặc không thể xử lý các nút con của nó.
1.4.4.6. Lớp hình học
Lớp Geode là một nút lá của OSG, nó chứa các dữ liệu về hình học cho sự biến đổi hình vẽ phác thành hình ba chiều. Sử dụng các lớp sau để lưu trữ dữ liệu về hình học trong một Geode.
Drawable: Lớp Drawable là lớp cơ bản cho việc lưu trữ dữ liệu thuộc về hình học và Geode lưu trữ dữ liệu của chúng trong một danh sách std::list<osg::Drawable>. Drawable là một lớp ảo thuần túy và không thể tạo đối tượng trực tiếp. Phải sử dụng một lớp phân loại như ShapeDrawable, Geometry cho phép ứng dụng để vẽ các hình ban đầu như hình cầu, hình nón và hình hộp.
Geometry: Lớp Geometry, kết hợp với lớp PrimitiveSet hoạt động như trình bao bọc mức cao, xung quanh các chức năng ma trận đỉnh của OpenGL. Geometry lưu trữ đỉnh các ma trận đỉnh, tọa độ kết cấu, màu và các mảng thông thường.
PrimitiveSet: Lớp PrimitiveSet cung cấp sự hỗ trợ mức cao cho các lệnh vẽ ma trận đỉnh của OpenGL. Sử dụng lớp này để xác định các loại của gốc để vẽ từ dữ liệu được lưu trữ trong lớp liên quan đến Geometry.
Các lớp Vector (Vector2, Vector3,…): OSG cung cấp một bộ các vector ban đầu 2 - phần tử, 3 - phần tử, 4 - phần tử của kiểu float hoặc double. Sử dụng các vector đó để xác định các đỉnh, màu, các tọa độ kết cấu, và các pháp tuyến.
Các lớp Array (Vec2Array, Vec3Array,…): OSG định nghĩa một vài lớp thông thường được sử dụng kiểu Array, như Vec2Array cho các tọa độ texture. Xác định mảng dữ liệu vertex lưu trữ dữ liệu hình học trong các mảng đó trước khi chuyển chúng tới các đối tượng
Điều này nghe có vẻ rất khó hiểu, nhưng nó có thể được tóm lược như sau:
Các đối tượng Geode là các nút lá trong đồ thị cảnh lưu trữ các đối tượng Drawable. Geometry (một kiểu của Drawable) lưu trữ mảng dữ liệu đỉnh và các lệnh vẽ mảng đỉnh cụ thể tới dữ liệu. Dữ liệu của nó gồm các mảng các vector.
Geometry chứa đựng các đối tượng cơ bản bao gồm (Point – điểm, line – đường thẳng, hoặc triangle – hình tam giác) và cùng được thiết lập các thuộc tính theo những quy định bắt buộc đối với từng loại.
CopyOp.cpp Drawable.cpp
StateSet.cpp LightPointDrawable.h GLObjectsVisitor.cpp ClasterCullingCallback
DrawPixels Geode GeoMetry ShapeDrawable DagtabasePaper
Input GUEventHandler
ParticleSystem ImposterSprite
Text
RenderLeal Statistics RenderLeal
TransformmationAttributeFuntion
InputParticleSystem.cpp
TextCulMsit
TextRederGraph Drawable
Các thuộc tính được đưa vào dưới dạng danh sách và định dạng các chỉ số được dùng một mảng các số nguyên để nhận dạng vùng dữ liệu tham chiếu đến.
Sơ đồ kế thừa như sau:
Hình 17 - Sơ đồ kế thừa của Geometry trong Scene Graph
Một nút trong cơ sở dữ liệu được định nghĩa là lớp Node. Mặc dù có thể về mặt kỹ thuật, Node không phải là sử dụng nhiều. Nhưng nó có rất nhiều lớp phụ kế thừa từ lớp Node. Có ba lớp phụ đó là: Geode, Group, PossitionAttitudeTransform. Nhưng quá trình hiển thị cảnh lại được thực hiện trên các lớp Drawable. Nhưng đối tượng này không phải là nút của đồ thị cảnh, vì vậy chúng ta không thể gắn chúng trực tiếp tới đồ thị cảnh. Nó cần thiết phải có nút “hình học”, Geode thay vào đó.
Không phải nút trong một đồ thị cảnh cũng có thể thêm những nút con khác vào. Cần hạn chế và chỉ có hai đối tượng đó là Group và Geode. Ta có thể miêu tả lại đồ thị khung cảnh trong hình 17 bằng các lớp như sau:
Referenced
Object
Drawable
Geometry
Hình 18 - Scene Graph được biểu diễn bằng đối tượng trong cơ sở dữ liệu
Đồ thị khung cảnh theo mô tả gồm có hai đối tượng hình học Drawable.
Những thể hiện các lớp bắt nguồn từ Group bên dưới là Geode được nối với hai lớp Drawable miêu tả dữ liệu hình học của đối tượng. Đó không phải là cách duy nhất để chuyển đồ thị cảnh từ hình trên đến một đồ thị cảnh thực tế. Drawable có thể được gắn với Geode, vì vậy đồ thị cảnh miêu tả trong hình trên cũng có cách khác để miêu tả.
Hình 19 - Scene Graph rút gọn