[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!
- Kỹ Thuật Mô Phỏng Đối Tượng Dựa Vào Mass-Springs
- Kết Quả Thử Nghiệm Kỹ Thuật Mô Phỏng Sử Dụng Nurbs
- 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 - 9
Xem toàn bộ 81 trang tài liệu này.
{
pt[i].p=p0; p0+=dp;
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