Các hình dạng cơ sở (a) plain; (b) sphere; (c) torus

Một phần của tài liệu (LUẬN văn THẠC sĩ) kỹ thuật mô phỏng đối tượng dạng sợi và ứng dụng mô phỏng tóc trong thực tại ảo (Trang 51 - 53)

2.3.3. Thuật toán

2.3.3.1. Hệ thống mass-spring

Trước tiên, các spring được tạo và sau đó là các particle. Mỗi vòng lặp của hệ

thống massy-spring thì được thực hiện với một giải thuật Euler sửa đổi.

Ở đây, chỉ có các spring tuyến tính mới được sử dụng. Chúng được xây dựng dựa trên cơ sở số lượng tóc được nhìn thấy. Độ dài rest của các spring thì dựa vào giới hạn độ dài được lựa chọn trước đó.

Sau khi các spring được xây dựng thì các particle thực tế được tạo ra. Các particle thì được chia ra n particle cho mỗi sợi, với điều kiện n=8. Particle đầu tiên của mỗi sợi thì được cố định trên bề mặt. Các particle còn lại trong sợi này thì lớn lên ra ngoài về hướng bình thường của hình dạng cơ sở. Độ quăn và độ dài của mỗi particle này được xác định dựa trên giới hạn độ dài và góc rest được lựa chọn trước đó. Mass của mỗi particle thì được thiết lập tới 1 (tập hợp tới 1). Các véctơ lực và vận tốc của mọi particle thì được thiết lập tới 0.

Thuật toán 1: Mô tả quá trình xây dựng các particle.

COPYV(particles[i*parts].p , surf[k]); MAKEV(particles[i*parts].v, 0.0f, 0.0f, 0.0f) MAKEV(particles[i*parts].f, 0.0f, 0.0f, 0.0f) for (j=1..parts) MAKEV(particles[i*parts+j].v, 0.0f, 0.0f, 0.0f) MAKEV(particles[i*parts+j].f, 0.0f, 0.0f, 0.0f) if (nx==0) particles[i*parts+j].p.x=

randomp(restang)+particles[i*parts].p.x; else particles[i*parts+j].p.x= -nx*randomp(leng)+particles[i*parts+j-1].p.x; if (ny==0) particles[i*parts+j].p.y = randomp(restang)+particles[i*parts].p.y; else particles[i*parts+j].p.y = -ny*randomp(leng)+particles[i*parts+j-1].p.y; if (nz==0) particles[i*parts+j].p.z = randomp(restang)+particles[i*parts].p.z; else particles[i*parts+j].p.z = -nz*randomp(leng)+particles[i*parts+j-1].p.z; 2.3.3.2. Các lực ngoài

Người dùng lựa chọn lực ngoài, như: gravity, wind và damping. Wind và gravity thay đổi hướng với mười lần vòng lặp của hệ thống mass-spring.

Giải thuật tiếp theo, cho phép lực được thêm vào thực sự đối các lực bên trong của mỗi particle mà nó không cố định trên bề mặt. Ở lực thứ nhất của mỗi particle được thiết lập tới 0, sau đó nếu particle này không cố định trên bề mặt thì lực wind và gravity được thêm vào.

Thuật toán 2: Mô tả quá trình thêm lực vào mỗi particle

For (i=0 ... particles)

MAKEV(particles[i].f, 0.0f, 0.0f, 0.0f) if (particles[i].fixed) continue;

ADDV(particles[i].f, wind);

particles[i].f.y +=gravity *particles[i].m;

2.3.3.3. Các điểm điều khiển

Mỗi sợi riêng lẻ sẽ được xây dựng mô hình bằng bề mặt hình trụ NURBS xoắn

với n điểm điều khiển, độ 2 và chia thành 20x20. Mỗi hình trụ này gồm một độ dày

và độ dài nhất định. Một đường tròn xác định bề dày của sợi hình trụ này. Trước

được tạo ra. Sau đó, các điểm nút v đối với các điểm điều khiển đường tròn này được tạo ra.

Một phần của tài liệu (LUẬN văn THẠC sĩ) kỹ thuật mô phỏng đối tượng dạng sợi và ứng dụng mô phỏng tóc trong thực tại ảo (Trang 51 - 53)

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

(78 trang)