本文整理汇总了C++中vec3_t::AbsSquared方法的典型用法代码示例。如果您正苦于以下问题:C++ vec3_t::AbsSquared方法的具体用法?C++ vec3_t::AbsSquared怎么用?C++ vec3_t::AbsSquared使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vec3_t
的用法示例。
在下文中一共展示了vec3_t::AbsSquared方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
bool vec3_t::RayCylinderIntersect(const vec3_t& pStart, const vec3_t& pDir,
const vec3_t& edgeStart, const vec3_t& edgeEnd,
const float radius,
float* f)
{
// math. for 3d game programming 2nd ed. page 270
// assert(edgeStart != edgeEnd); // sloppy level design
const vec3_t pa = edgeEnd - edgeStart;
const vec3_t s0 = pStart - edgeStart;
const float pa_squared = pa.AbsSquared();
const float pa_isquared = 1.0f/pa_squared;
// a
const float pva = pDir * pa;
const float a = pDir.AbsSquared() - pva*pva*pa_isquared;
// b
const float b = s0*pDir - (s0*pa)*(pva)*pa_isquared;
// c
const float ps0a = s0*pa;
const float c = s0.AbsSquared() - radius*radius - ps0a*ps0a*pa_isquared;
const float dis = b*b - a*c;
if(dis < 0)
return false;
*f = (-b - lynxmath::Sqrt(dis))/a;
const float collision = (pStart + *f*pDir - edgeStart)*pa;
return collision >= 0 && collision <= pa_squared;
}