本文整理汇总了C++中AABB3::Nullify方法的典型用法代码示例。如果您正苦于以下问题:C++ AABB3::Nullify方法的具体用法?C++ AABB3::Nullify怎么用?C++ AABB3::Nullify使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AABB3
的用法示例。
在下文中一共展示了AABB3::Nullify方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UpdateParticles
/**
* updates position, velocity, and animation time of particles
* - rParticleSet.aabb is also updated
*
*/
inline void CBE_ParticleSet::UpdateParticles( ParticleSetExtraData& rParticleSet, float dt, AABB3& aabb )
{
// Vector3 vGravityAccel = m_pStage->GetGravityAccel();
// float fGravityInfluenceFactor = m_fGravityInfluenceFactor;
Vector3 vGravityAccel = m_pStage->GetGravityAccel() * m_fGravityInfluenceFactor;
// AABB3 aabb;
aabb.Nullify();
int i, num_particles = rParticleSet.iNumParticles;
for(i=0; i<num_particles; i++)
{
// update velocity
// rParticleSet.pavVelocity[i] += (vGravityAccel * fGravityInfluenceFactor) * dt;
rParticleSet.pavVelocity[i] += vGravityAccel * dt;
// update position
rParticleSet.pavPosition[i] += rParticleSet.pavVelocity[i] * dt;
// update animation time
rParticleSet.pafAnimationTime[i] += dt;
aabb.AddPoint( rParticleSet.pavPosition[i] );
}
const float r = m_fParticleRadius;
aabb.vMin -= Vector3(r,r,r);
aabb.vMax += Vector3(r,r,r);
rParticleSet.aabb = aabb;
}
示例2: UpdateAABB
inline void IndexedPolygon::UpdateAABB()
{
m_AABB.Nullify();
const size_t num_vertices = m_index.size();
for( size_t i=0; i<num_vertices; i++ )
{
m_AABB.AddPoint( GetVertex(i).m_vPosition );
}
}
示例3:
ParticleSetExtraData()
:
iNumParticles(0),
pavPosition(nullptr),
pavVelocity(nullptr),
pavOrigDirection(nullptr),
pafAnimationTime(nullptr),
pafAnimDuration(nullptr),
pasPattern(nullptr),
pafFadeVel(nullptr)
{
aabb.Nullify();
}
示例4: ClipLineSegment
// clip trace at the point of contact
void CTriangleMesh::ClipLineSegment( CJL_LineSegment& segment )
{
Vector3 vStart = segment.vStart;
Vector3 vEnd;
if( segment.fFraction == 1.0f )
vEnd = segment.vGoal;
else
vEnd = segment.vEnd; // the line segment has been already clipped - set the current end point
static vector<int> s_veciTriList;
s_veciTriList.resize( 0 );
AABB3 aabb;
aabb.Nullify();
aabb.AddPoint( vStart );
aabb.AddPoint( vEnd );
GetIntersectingTriangles( s_veciTriList, aabb );
size_t i, iNumTris = s_veciTriList.size();
if( iNumTris == 0 )
return; // no intersection
Vector3 vOrigLineSegment = vEnd - vStart;
for( i=0; i<iNumTris; i++ )
{
IndexedTriangle& tri = GetTriangle( s_veciTriList[i] );
Triangle triangle( GetVertex( tri.GetIndex(0) ),
GetVertex( tri.GetIndex(1) ),
GetVertex( tri.GetIndex(2) ),
tri.m_vNormal );
// check intersection between ray and triangle
if( triangle.RayIntersect( vStart, vEnd ) )
{ // found intersection
// 'vEnd' now represents the intersection point
// save contact surface
segment.plane = triangle.GetPlane();
// record surface material to 'tr'
segment.iMaterialIndex = tri.m_iMaterialID;
}
}
segment.fFraction *= Vec3Dot( vEnd - vStart, vOrigLineSegment ) / Vec3LengthSq( vOrigLineSegment );
segment.vEnd = vEnd;
}
示例5: SetLightsFromLightSourceFaces
void CBSPMapData::SetLightsFromLightSourceFaces()
{
vector<CMapFace> vecTempLightSourceFace; // temporary buffer to hold light source faces
size_t i,j;
size_t iNumInteriorFaces = m_aInteriorFace.size();
for(i=0; i<iNumInteriorFaces; i++)
{ // set all the flags of light source faces to false
m_aInteriorFace[i].m_bFlag = false;
}
// cluster light source faces
for(i=0; i<iNumInteriorFaces; i++)
{
vecTempLightSourceFace.clear();
CMapFace& rFace1 = m_aInteriorFace[i];
if( !rFace1.ReadTypeFlag(CMapFace::TYPE_LIGHTSOURCE) )
continue; // doesn't emit light by itself
if( rFace1.m_bFlag == true )
continue; // already registered as a light source face
rFace1.m_bFlag = true;
vecTempLightSourceFace.push_back( rFace1 );
// adjacent light source faces are converted into one point light
SearchAdjacentLightSourceFaces_r( &vecTempLightSourceFace, rFace1, &m_aInteriorFace );
// convert each cluster of light source faces into a point light
AABB3 aabb;
aabb.Nullify();
for(j=0; j<vecTempLightSourceFace.size(); j++)
vecTempLightSourceFace[j].AddToAABB( aabb );
SPointLightDesc light = FindPointLightDesc( rFace1.m_acSurfaceName );
CPointLight* pPointLight = new CPointLight;
pPointLight->vPosition = aabb.GetCenterPosition();
pPointLight->Color.fRed = light.fRed;
pPointLight->Color.fGreen = light.fGreen;
pPointLight->Color.fBlue = light.fBlue;
pPointLight->fIntensity = light.fIntensity;
pPointLight->fAttenuation0 = light.fAttenuation[0];
pPointLight->fAttenuation1 = light.fAttenuation[1];
pPointLight->fAttenuation2 = light.fAttenuation[2];
m_vecpLight.push_back( pPointLight );
}
}
示例6: Init
void Init( int flag, int num_particles )
{
Release();
iNumParticles = 0;
aabb.Nullify();
if( flag & ParticleSetFlag::POSITION ) pavPosition = new Vector3 [num_particles];
if( flag & ParticleSetFlag::VELOCITY ) pavVelocity = new Vector3 [num_particles];
if( flag & ParticleSetFlag::ORIG_DIR ) pavOrigDirection = new Vector3 [num_particles];
if( flag & ParticleSetFlag::ANIM_TIME ) pafAnimationTime = new float [num_particles];
if( flag & ParticleSetFlag::ANIM_DURATION ) pafAnimDuration = new float [num_particles];
if( flag & ParticleSetFlag::PATTERN ) pasPattern = new short [num_particles];
if( flag & ParticleSetFlag::FADE_VEL ) pafFadeVel = new float [num_particles];
// if( flag & ParticleSetFlag::LOCAL_POSITION )pavLocalPosition = new Vector3 [num_particles];
}
示例7: UpdateNozzleExhaust
void CBE_NozzleExhaust::UpdateNozzleExhaust( CCopyEntity* pCopyEnt, SBE_ParticleSetExtraData& rParticleSet, float dt )
{
int i, num_particles = m_MaxNumParticlesPerSet;
// float dt = fFrameTime;
AABB3 aabb;
aabb.Nullify();
// UpdateParticles( rParticleSet, fFrameTime, aabb );
float radius = m_fParticleRadius;
for(i=0; i<num_particles; i++)
{
// update animation time
rParticleSet.pafAnimationTime[i] += dt;
if( rParticleSet.pafAnimationTime[i] < 0 )
continue;
// update velocity
// rParticleSet.pavVelocity[i] += vGravityAccel * dt;
// update position
rParticleSet.pavPosition[i] += rParticleSet.pavVelocity[i] * dt;
aabb.AddSphere( Sphere(rParticleSet.pavPosition[i],radius) );
}
pCopyEnt->world_aabb.MergeAABB( aabb );
Vector3 vBasePos = Vector3(0,0,0);//pCopyEnt->Position();// + pCopyEnt->GetDirection() * pCopyEnt->f1;
Vector3 vDir = Vector3(0,0,1);//pCopyEnt->GetDirection();
Vector3 vRight = Vector3(1,0,0);//pCopyEnt->GetRightDirection();
Vector3 vUp = Vector3(0,1,0);//pCopyEnt->GetUpDirection();
float cycle_time = m_fDuration;
for( i=0; i<num_particles; i++ )
{
if( cycle_time <= rParticleSet.pafAnimationTime[i] )
{
// set new position & velocity
CreateNewParticle( pCopyEnt, rParticleSet, i );
// rParticleSet.pafAnimationTime[i] = 0;
}
}
}
示例8: GetAABB
inline AABB3 GetAABB( const std::vector<IndexedPolygon>& polygon_buffer )
{
AABB3 aabb;
aabb.Nullify();
size_t i, num_pols = polygon_buffer.size();
size_t j, num_verts;
for( i=0; i<num_pols; i++ )
{
// polygon_buffer[i].Update();
// aabb.MergeAABB( polygon_buffer[i].GetAABB() );
num_verts = polygon_buffer[i].m_index.size();
for( j=0; j<num_verts; j++ )
{
aabb.AddPoint( polygon_buffer[i].GetVertex((int)j).m_vPosition );
}
}
return aabb;
}
示例9: UpdateParticlePositions
/**
* updates position, velocity, and animation time of particles
* - rParticleSet.aabb is also updated
*
*/
inline void CBE_ParticleSet::UpdateParticlePositions( ParticleSetExtraData& rParticleSet, float dt, AABB3& aabb )
{
// AABB3 aabb;
aabb.Nullify();
int i, num_particles = rParticleSet.iNumParticles;
for(i=0; i<num_particles; i++)
{
// update position
rParticleSet.pavPosition[i] += rParticleSet.pavVelocity[i] * dt;
// update animation time
rParticleSet.pafAnimationTime[i] += dt;
aabb.AddPoint( rParticleSet.pavPosition[i] );
}
const float r = m_fParticleRadius;
aabb.vMin -= Vector3(r,r,r);
aabb.vMax += Vector3(r,r,r);
rParticleSet.aabb = aabb;
}