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 - 10


[22] Thomas Sederberg, BYU NURBS, http://cagd.cs.byu.edu/~557/text/ch6.pdf.

[23] http://en.infinisys.co.jp/product, http://www.hairstylesdesign.com, http://hairstyleonline.com


PHỤ LỤC

1. Thuật toán xác định hướng và độ xoắn của sợi tóc:

void CLine::Init(CPoint3D p0, CPoint3D dp)

{

n=dp; n.Normalize(); p0-=dp;

for (int i=0;i<HAIRSIZE;i++)

Có thể bạn quan tâm!

Xem toàn bộ 81 trang tài liệu này.

{

pt[i].p=p0; p0+=dp;

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 - 10

dp.x+=rnd(2*HAIRRANDOM)-HAIRRANDOM; dp.y+=rnd(2*HAIRRANDOM)-HAIRRANDOM; dp.z+=rnd(2*HAIRRANDOM)-HAIRRANDOM;

// dp vi tri ngau nhien cua mot diem toc

}

}

2. Thuật toán Phủ sợi tóc lên đối tượng:

void CHair::Init(CObject *_o,CSurface *_s)

{

o=_o; s=_s; m=*s;

//xác định bề mặt phủ

m.flag&=~CMaterial::Lighting; //Lightinh là đấu hiệu nhận biết.

// Với mỗi một sợi tóc:

for (int i=0;i<NBHAIR;i++)

{

int f=rnd(s->nbf); CTriFace *fc=s->fc+f; float a=rnd(1.0f);


float b=rnd(1.0f); if (a+b>1.0f)

{

a=1.0f-a;

b=1.0f-b;

}

CPoint3D pos=fc->v[0]->p + a*(fc->v[1]->p - fc->v[0]->p) + b*(fc->v[2]->p - fc->v[0]->p);

CPoint3D dir=fc->v[0]->n + a*(fc->v[1]->n - fc->v[0]->n) + b*(fc->v[2]->n - fc->v[0]->n);

dir.Scale(HAIRLENGTH/dir.Length()); ln[i].Init(pos,dir);

}

// Thiết lập và áp đặt mầu sắc:

{

CColor4f col=m.diffuse;

for (int i=0;i<HAIRNCOLOR;i++)

{

c[i]=col*((i+HAIRNCOLOR/2)*1.0f/HAIRNCOLOR);

}

}

}


3. Thuật toán mô phỏng sợi tóc chuyển động

void CHair::Update(CPoint3D Depl)

{

CPoint3D v,v2; float l,f1,f2; CLine *pl=ln;


int i=NBHAIR; do

{

int p=HAIRSIZE-2;

//p là các điểm điều khiển, hay các đốt.. CNode *pp=pl->pt+2;

// Với mỗi một sợi tóc: do

{

pp->p+=Depl; v=pp[-1].p-pp[0].p;

//v: do dai cua mot dot toc l=v.Length2();

if (l>MAXL)

{

v*=(1.0f-MAXL2/(float)sqrt(l)); pp->p+=v;

pp->v*=1.0f-FROT;

}

//pp la một con trỏ, trỏ đến từng điểm điều khiển(đốt).


else

{

f1=STIFFNESS*(1.0f-(LENGTH*LENGTH)/l);

v2=pp[-2].p-pp[0].p; l=v2.Length2();

f2=0.4f*STIFF2*(1.0f-(LENGTH2*LENGTH2)/l);

pp->v=pp->v*(1.0f-FROT)+v*f1+v2*f2;

//+GForce;



tiếp.

// f1,f2 tính mềm dẻo của tóc

// v tốc độ chuyển động giữ hai điểm điều khiển liên

}

pp->v.z+=GRAVITY;

++pp; // trỏ tới điểm điều khiển tiếp theo

}

while (--p); p=HAIRSIZE-2;

pp=pl->pt+2; do

{

pp->p+=pp->v;

++pp;

}

while (--p);

++pl;

}

while (--i);

//duyet tat ca cac soi toc

}


NHẬN XÉT

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

Thái Nguyên ngày…..tháng…..năm 2019 Chữ ký của người nhận xét

Xem tất cả 81 trang.

Ngày đăng: 02/10/2023
Trang chủ Tài liệu miễn phí