本文整理汇总了C++中Wvec::X方法的典型用法代码示例。如果您正苦于以下问题:C++ Wvec::X方法的具体用法?C++ Wvec::X怎么用?C++ Wvec::X使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Wvec
的用法示例。
在下文中一共展示了Wvec::X方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void
XToonStripCB::faceCB(CBvert* v, CBface* f)
{
assert(v && f);
Wvec bNorm; //Blended Normal
//first calculate the abstract(blended) normal
switch(_blend_type) {
case XToonStripCB::SMOOTH: {
// Note: doesn't work
bNorm = v->get_all_faces().n_ring_faces(3).avg_normal();
}
break;
case XToonStripCB::SPHERIC: {
BMESH* mesh = v->mesh();
Wpt c = mesh->get_bb().center();
bNorm = (v->loc()-c).normalized();
}
break;
case XToonStripCB::ELLIPTIC: {
BMESH* mesh = v->mesh();
Wvec c_to_v = v->loc() - mesh->get_bb().center();
Wvec dim = mesh->get_bb().dim();
double a = dim[0]*0.5;
double b = dim[1]*0.5;
double c = dim[2]*0.5;
bNorm = Wvec(c_to_v[0]/a, c_to_v[1]/b, c_to_v[2]/c).normalized();
}
break;
case XToonStripCB::CYLINDRIC: {
BMESH* mesh = v->mesh();
Wpt c = mesh->get_bb().center();
Wvec axis;
Wvec dim = mesh->get_bb().dim();
if (dim[0]>dim[1] && dim[0]>dim[2])
axis = dim.X();
else if (dim[1]>dim[0] && dim[1]>dim[2])
axis = dim.Y();
else
axis = dim.Z();
Wpt v_proj = c + ((v->loc()-c)*axis) * axis;
bNorm = (v->loc()-v_proj).normalized();
}
break;
default:
assert(0);
}
//set the blended normal, the regular normal and the vertex point
glVertexAttrib3f(_loc, bNorm[0], bNorm[1], bNorm[2]);
glNormal3dv(f->vert_normal(v).data());
glVertex3dv(v->loc().data());
}