Mô hình lập trình

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng mô hình chuyển động hình nhân 3d vào tương tác người máy và e learning luận văn ths công nghệ thông tin 1 01 10 (Trang 33 - 38)

Java3D là API hướng ựối tượng. Các ứng dụng xây dựng trên các thành phần ựồ họa riêng rẽ, ựó là các ựối tượng ựã ựược phân tách, sau ựó liên kết chúng lại theo một cấu trúc hình cây gọi là scene graph. Những ứng dụng này sẽ ựiểu khiển các thành phần ựồ họa bằng cách dùng các bộ truy nhập ựã ựược xây dựng sẵn cho từng ựối tượng, các bộ biến ựổi và phương thức kết nối giữa các nút trong cây scene graph. Java3D không thể ựoán trước hay hỗ trợ trực tiếp tất cả những gì mà một ứng dụng 3D cần ựến. Thay vào ựó, các nhà thiết kế cho phép bổ sung các hỗ trợ thông qua mã Java. Hệ thống CAD (computer-aided design) hoặc hệ thống animation sẽ ựịnh nghĩa các ựối tượng. Các ứng dụng Java3D sẽ nhận các ựối tượng ựó. Như vậy, các nhà thiết kế mẫu ựồ họa có thể dùng bất cứ một công cụ ựồ họa nào, miễn là họ thấy tiện lợi, ựể tạo ra một mô hình 3 chiều. Mô hình này sau ựó sẽ ựược xuất ra file dữ liệu có cấu trúc ựược Java3D hỗ trợ (tức là có thể ựọc ựọc hiểu dữ liệu chứa trong file). Java3D sẽ ựọc các thông tin của file dữ liệu ựó ựể cung cấp cho bộ render của nó. Bộ render sẽ dựa trên các thông tin này mà tái thiết lại mô hình 3 chiều ựã có. Vắ dụ, trong luận văn này tôi dùng 3ds max là một công cụ rất mạnh trong thiết kế ựồ họa ựể xây dựng mô hình bàn tay người, sau ựó xuất mô hình này ra một file ựuôi là .VRML (một trong những dạng file mà Java3D hỗ trợ). Trong chương trình ứng dụng Java3D sẽ có một phương thức

làm nhiệm vụ ựọc dữ liệu từ file VRML này ựể chuyển cho bộ render nhằm tái thiết lại mô hình bàn tay trong cửa sổ chương trình của Java3D.

3.1.3.1. Cấu trúc cây trong tổ chức ựối tượng của Java3D

Java3D ựịnh nghĩa các lớp cơ bản khác nhau ựể thiết kế và biến ựổi (từ gốc: manipulate Ờ vận dụng bằng tay) một scene graph và ựiều khiển việc hiển thị cũng như render các hình 3D [6]. Ta có thể mô tả toàn bộ cây cấu trúc ựối tượng của Java3D như sau: javax.media.j3d VirtualUniverse Locale View PhysicalBody PhysicalEnvironment Screen3D

Canvas3D (extends awt.Canvas) SceneGraphObject

Node

Group Leaf NodeComponent

Various component objects

Transform3D javax.vecmath

Matrixclasses Tuple classes

graph chứa ựựng những mô tả hoàn chỉnh về một khung cảnh hay một thế giới ảo. Nó mang các thông tin về dữ liệu hình khối (hình cầu, trụ, lập phương, lướiẦ), các thông tin về thuộc tắnh (ánh sáng, màu sắc, ựộ bóngẦ), thông tin về góc nhìn. Các thông tin này sẽ ựược tổng hợp làm dữ liệu cho việc render chắnh khung cảnh ựó từ góc nhìn ựã ựược chỉ ra.

Java3D API hoàn thiện các API ựồ họa ựã có bằng cách loại bỏ ựi nhiều yêu cầu tắnh toán hoặc các yêu cầu nhỏ khác trong lập trình mà các API trước ựó vẫn ựòi hỏi. Như vậy, nó cho phép người lập trình tập trung vào ựiều khiển các ựối tượng hình học hơn là việc giải quyết cụ thể cái khung lưới tạo nên chúng, tập trung vào kết cấu giữa các ựối tượng hình học hơn là phải việc lập trình thao tác render ựể sao cho các hình khối này ựạt ựược hiệu quả như mong muốn [6].

3.1.3.3. Các phương thức render

Java3D cung cấp 3 phương thức render. đó là: phương thức render trực tiếp

(Immediate Mode), phương thức render lưu giữ (Retained Mode), phương thức render biên dịch-lưu giữ (Compiled-retained Mode). điều này cho phép người dùng thoải mái trong việc lựa chọn cách thực hiện một ứng dụng Java3D. Hầu hết những người xây dựng ứng dụng Java3D ựều thắch những cải tiến về hai mặt tiện nghi và thực hiện mà các phương thức retained và compiled-retained mang lại [6] [13] [25].

3.1.3.3.1. Immediate Mode (IM)

Ở chế ựộ này, các ứng dụng có thể sử dụng hoặc không cấu trúc scene-graph của Java3D. Người dùng sẽ có nhiều tùy chọn hơn nhưng ựi kèm với ưu ựiểm này là chi phắ khi chạy chương trình cao. Trong chế ựộ này, Java3D không ựược cung cấp nhiều thông tin ở mức cao liên quan tới các ựối tượng ựồ họa hoặc mối liên hệ giữa chúng. Do giản thiểu hóa các thông tin bao quát như vậy nên Java3D chỉ có thể hỗ trợ tắnh toán ở mức cục bộ từng ựối tượng thay cho người lập trình chứ không thể giúp hỗ trợ ở mức bao quát ựược.

Có hai dạng Immediate Mode là phương thức render trực tiếp thuần tuý (Pure Immediate Mode-PIM) và phương thức render trực tiếp trộn (Mixed Immediate Mode- MIM).

PIM

Phương thức này dành cho các trình ứng dụng và các applet ựược lập trình với ý ựồ không muốn Java3D tự ựộng render scene graph. Những ứng dụng kiểu này thậm chắ không muốn xây dựng cấu trúc scene graph ựể biểu diễn các dữ liệu ựồ họa. Tuy nhiên, các ứng dụng này lại muốn sử dụng các thuộc tắnh của các ựối tượng Java3D ựể thiết ựặt các trạng thái ựồ họa và các khối hình 3 chiều do Java3D cung cấp sẵn, ựồng thời ựã render sẵn.

Các ứng dụng PIM buộc phải xây dựng một tập hợp tối thiểu các ựối tượng Java3D trước khi tiến hành render. Thêm vào ựó, với ựối tượng Canvas3D, ứng dụng tạo một ựối tượng View cùng với các ựối tượng PhysicalBody và PhisicalEnvironment liên quan, các thành phần scene graph như: Virtual University, Locale, BranchGroup, TransformGroup cùng các biến ựổi có liên quan và cuối cùng là ViewPlatform ựể xác ựịnh vị trắ và hướng trong cái thế giới ảo ựó nhằm tạo ra khung nhìn. Hình dưới ựây mô tả cấu trúc ựó.

Hình 15: Chế ựộ PIM (Pure Immediate Mode)

Java3D cung cấp nhiều chức năng tiện ắch ựể xây dựng các cấu trúc thay thế cho các ứng dụng áp dụng chế ựộ PIM, làm người lập trình bớt phải quan tâm ựến phần phối cảnh. Trong chế ựộ này, người dùng phải tự mình kết thúc quá trình render của Java3D thông qua phương thức stopRender() của lớp Canvas3D.

MIM

Chế ựộ này yêu cầu nhiều cấu trúc hơn PIM, với MIM thì bộ render chạy liên tục ựể render scenegraph vào một canvas.

3.1.3.3.2. Retained Mode (RM)

Phương thức này yêu cầu trình ứng dụng phải xây dựng scene graph và xác ựịnh xem thành phần nào trong scene graph có thể thay ựổi trong suốt quá trình render. Scene graph mô tả từng ựối tượng trong thế giới ảo, các mối liên hệ giữa chúng và cách thức mà trình ứng dụng sẽ ựiều khiển chúng biến ựổi.

3.1.3.3.3. Compiled-Retained Mode (CRM)

Phương thức này giống retained mode ở chỗ nó cũng yêu cầu trình ứng dụng phải xây dựng scene graph và xác ựịnh xem thành phần nào trong scene graph có thể thay ựổi trong suốt quá trình render. Thêm vào ựó, trình ứng dụng có thể biên dịch toàn bộ hay một phần các subgraph, là các thành phần cấu thành nên một scene graph hoàn chỉnh. Java3D sẽ dịch các subgraph này và việc biểu diễn các subgraph ựã ựược biên dịch có thể không hoàn toàn tương ứng như cấu trúc cây nguyên gốc mà trình ứng dụng lập nên, tuy nhiên về mặt chức năng thì hoàn toàn tương ựồng. CRM là phương thức thực hiện cấp cao nhất.

3.1.3.4. Vấn ựề mở rộng các phương thức

Hầu hết các lớp Java3D chỉ ựưa ra các phương thức truy nhập và tắnh toán. Các phương thức này lại chỉ dùng cho các trạng thái bên trong của ựối tượng. Java3D khai báo hầu hết các phương thức ở dạng final. Các trình ứng dụng có thể mở rộng thêm các lớp của Java3D và bổ sung thêm các phương thức mới. Tuy nhiên các phương thức mới này không thể chồng lên các phương thức làm nhiệm vụ duyệt dần cấu trúc cây của scene graph.

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng mô hình chuyển động hình nhân 3d vào tương tác người máy và e learning luận văn ths công nghệ thông tin 1 01 10 (Trang 33 - 38)

Tải bản đầy đủ (PDF)

(92 trang)